Permalink
Browse files

Merge in latest tmail trunk r241

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9144 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
jeremy committed Mar 30, 2008
1 parent f66bbf5 commit 316906cbbb529839c2ffa3f37a010193f7722352
Showing with 534 additions and 193 deletions.
  1. +1 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail.rb
  2. +164 −30 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/address.rb
  3. +2 −3 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/attachments.rb
  4. +4 −10 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/base64.rb
  5. +8 −6 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/compat.rb
  6. +2 −6 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/config.rb
  7. +14 −18 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/core_extensions.rb
  8. +35 −8 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/encode.rb
  9. +2 −9 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/header.rb
  10. +2 −1 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/index.rb
  11. +14 −12 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/interface.rb
  12. +2 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/loader.rb
  13. +95 −24 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/mail.rb
  14. +70 −10 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/mailbox.rb
  15. +2 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/main.rb
  16. +2 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/mbox.rb
  17. +16 −15 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/net.rb
  18. +7 −12 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/obsolete.rb
  19. +1 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/parser.rb
  20. +2 −0 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/require_arch.rb
  21. +2 −1 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/scanner.rb
  22. +2 −1 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/scanner_r.rb
  23. +82 −25 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/utils.rb
  24. +3 −2 actionmailer/lib/action_mailer/vendor/tmail-1.2.2/tmail/version.rb
@@ -2,3 +2,4 @@
require 'tmail/mail'
require 'tmail/mailbox'
require 'tmail/core_extensions'
+require 'tmail/net'
@@ -3,7 +3,6 @@
= Address handling class
=end
-#
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
@@ -36,31 +35,72 @@
module TMail
+ # = Class Address
+ #
+ # Provides a complete handling library for email addresses. Can parse a string of an
+ # address directly or take in preformatted addresses themseleves. Allows you to add
+ # and remove phrases from the front of the address and provides a compare function for
+ # email addresses.
+ #
+ # == Parsing and Handling a Valid Address:
+ #
+ # Just pass the email address in as a string to Address.parse:
+ #
+ # email = TMail::Address.parse('Mikel Lindsaar <mikel@lindsaar.net>)
+ # #=> #<TMail::Address mikel@lindsaar.net>
+ # email.address
+ # #=> "mikel@lindsaar.net"
+ # email.local
+ # #=> "mikel"
+ # email.domain
+ # #=> "lindsaar.net"
+ # email.name # Aliased as phrase as well
+ # #=> "Mikel Lindsaar"
+ #
+ # == Detecting an Invalid Address
+ #
+ # If you want to check the syntactical validity of an email address, just pass it to
+ # Address.parse and catch any SyntaxError:
+ #
+ # begin
+ # TMail::Mail.parse("mikel 2@@@@@ me .com")
+ # rescue TMail::SyntaxError
+ # puts("Invalid Email Address Detected")
+ # else
+ # puts("Address is valid")
+ # end
+ # #=> "Invalid Email Address Detected"
class Address
- include TextUtils
-
+ include TextUtils #:nodoc:
+
+ # Sometimes you need to parse an address, TMail can do it for you and provide you with
+ # a fairly robust method of detecting a valid address.
+ #
+ # Takes in a string, returns a TMail::Address object.
+ #
+ # Raises a TMail::SyntaxError on invalid email format
def Address.parse( str )
Parser.parse :ADDRESS, special_quote_address(str)
end
- # Takes a string which is an address and adds quotation marks to special
- # edge case methods that the parser just barfs on.
- #
- # Right now just handles two edge cases:
- #
- # Full stop as the last character of the display name:
- # Mikel A. <mikel@me.com>
- # Returns:
- # "Mikel A." <mikel@me.com>
- #
- # Unquoted @ symbol in the display name:
- # mikel@me.com <mikel@me.com>
- # Returns:
- # "mikel@me.com" <mikel@me.com>
- #
- # Any other address not matching these patterns just gets returned as is.
- def Address.special_quote_address(str)
+ def Address.special_quote_address(str) #:nodoc:
+ # Takes a string which is an address and adds quotation marks to special
+ # edge case methods that the RACC parser can not handle.
+ #
+ # Right now just handles two edge cases:
+ #
+ # Full stop as the last character of the display name:
+ # Mikel L. <mikel@me.com>
+ # Returns:
+ # "Mikel L." <mikel@me.com>
+ #
+ # Unquoted @ symbol in the display name:
+ # mikel@me.com <mikel@me.com>
+ # Returns:
+ # "mikel@me.com" <mikel@me.com>
+ #
+ # Any other address not matching these patterns just gets returned as is.
case
# This handles the missing "" in an older version of Apple Mail.app
# around the display name when the display name contains a '@'
@@ -78,10 +118,22 @@ def Address.special_quote_address(str)
end
end
- def address_group?
+ def address_group? #:nodoc:
false
end
+ # Address.new(local, domain)
+ #
+ # Accepts:
+ #
+ # * local - Left of the at symbol
+ #
+ # * domain - Array of the domain split at the periods.
+ #
+ # For example:
+ #
+ # Address.new("mikel", ["lindsaar", "net"])
+ # #=> "#<TMail::Address mikel@lindsaar.net>"
def initialize( local, domain )
if domain
domain.each do |s|
@@ -103,22 +155,67 @@ def initialize( local, domain )
@routes = []
end
- attr_reader :name
+ # Provides the name or 'phrase' of the email address.
+ #
+ # For Example:
+ #
+ # email = TMail::Address.parse("Mikel Lindsaar <mikel@lindsaar.net>")
+ # email.name
+ # #=> "Mikel Lindsaar"
+ def name
+ @name
+ end
+ # Setter method for the name or phrase of the email
+ #
+ # For Example:
+ #
+ # email = TMail::Address.parse("mikel@lindsaar.net")
+ # email.name
+ # #=> nil
+ # email.name = "Mikel Lindsaar"
+ # email.to_s
+ # #=> "Mikel Lindsaar <mikel@me.com>"
def name=( str )
@name = str
@name = nil if str and str.empty?
end
+ #:stopdoc:
alias phrase name
alias phrase= name=
-
- attr_reader :routes
-
- def inspect
+ #:startdoc:
+
+ # This is still here from RFC 822, and is now obsolete per RFC2822 Section 4.
+ #
+ # "When interpreting addresses, the route portion SHOULD be ignored."
+ #
+ # It is still here, so you can access it.
+ #
+ # Routes return the route portion at the front of the email address, if any.
+ #
+ # For Example:
+ # email = TMail::Address.parse( "<@sa,@another:Mikel@me.com>")
+ # => #<TMail::Address Mikel@me.com>
+ # email.to_s
+ # => "<@sa,@another:Mikel@me.com>"
+ # email.routes
+ # => ["sa", "another"]
+ def routes
+ @routes
+ end
+
+ def inspect #:nodoc:
"#<#{self.class} #{address()}>"
end
+ # Returns the local part of the email address
+ #
+ # For Example:
+ #
+ # email = TMail::Address.parse("mikel@lindsaar.net")
+ # email.local
+ # #=> "mikel"
def local
return nil unless @local
return '""' if @local.size == 1 and @local[0].empty?
@@ -130,11 +227,25 @@ def local
end
end
+ # Returns the domain part of the email address
+ #
+ # For Example:
+ #
+ # email = TMail::Address.parse("mikel@lindsaar.net")
+ # email.local
+ # #=> "lindsaar.net"
def domain
return nil unless @domain
join_domain(@domain)
end
+ # Returns the full specific address itself
+ #
+ # For Example:
+ #
+ # email = TMail::Address.parse("mikel@lindsaar.net")
+ # email.address
+ # #=> "mikel@lindsaar.net"
def spec
s = self.local
d = self.domain
@@ -145,28 +256,51 @@ def spec
end
end
- alias address spec
-
+ alias address spec
+
+ # Provides == function to the email. Only checks the actual address
+ # and ignores the name/phrase component
+ #
+ # For Example
+ #
+ # addr1 = TMail::Address.parse("My Address <mikel@lindsaar.net>")
+ # #=> "#<TMail::Address mikel@lindsaar.net>"
+ # addr2 = TMail::Address.parse("Another <mikel@lindsaar.net>")
+ # #=> "#<TMail::Address mikel@lindsaar.net>"
+ # addr1 == addr2
+ # #=> true
def ==( other )
other.respond_to? :spec and self.spec == other.spec
end
alias eql? ==
+ # Provides a unique hash value for this record against the local and domain
+ # parts, ignores the name/phrase value
+ #
+ # email = TMail::Address.parse("mikel@lindsaar.net")
+ # email.hash
+ # #=> 18767598
def hash
@local.hash ^ @domain.hash
end
+ # Duplicates a TMail::Address object returning the duplicate
+ #
+ # addr1 = TMail::Address.parse("mikel@lindsaar.net")
+ # addr2 = addr1.dup
+ # addr1.id == addr2.id
+ # #=> false
def dup
obj = self.class.new(@local.dup, @domain.dup)
obj.name = @name.dup if @name
obj.routes.replace @routes
obj
end
- include StrategyInterface
+ include StrategyInterface #:nodoc:
- def accept( strategy, dummy1 = nil, dummy2 = nil )
+ def accept( strategy, dummy1 = nil, dummy2 = nil ) #:nodoc:
unless @local
strategy.meta '<>' # empty return-path
return
@@ -1,6 +1,6 @@
=begin rdoc
-= Attachment handling class
+= Attachment handling file
=end
@@ -17,8 +17,7 @@ def has_attachments?
end
def attachment?(part)
- (part['content-disposition'] && part['content-disposition'].disposition == "attachment") ||
- part.header['content-type'].main_type != "text"
+ part.disposition_is_attachment? || part.content_type_is_text?
end
def attachments
@@ -1,9 +1,4 @@
-# = TITLE:
-#
-# Base64
-#
-# = COPYRIGHT:
-#
+#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
@@ -27,10 +22,9 @@
#
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
# with permission of Minero Aoki.
-
-#
+#++
+#:stopdoc:
module TMail
-
module Base64
module_function
@@ -48,5 +42,5 @@ def decode( str, strict = false )
end
end
-
end
+#:startdoc:
@@ -1,17 +1,18 @@
-unless Enumerable.method_defined?(:map)
- module Enumerable
+#:stopdoc:
+unless Enumerable.method_defined?(:map)
+ module Enumerable #:nodoc:
alias map collect
end
end
unless Enumerable.method_defined?(:select)
- module Enumerable
+ module Enumerable #:nodoc:
alias select find_all
end
end
unless Enumerable.method_defined?(:reject)
- module Enumerable
+ module Enumerable #:nodoc:
def reject
result = []
each do |i|
@@ -23,17 +24,18 @@ def reject
end
unless Enumerable.method_defined?(:sort_by)
- module Enumerable
+ module Enumerable #:nodoc:
def sort_by
map {|i| [yield(i), i] }.sort.map {|val, i| i }
end
end
end
unless File.respond_to?(:read)
- def File.read(fname)
+ def File.read(fname) #:nodoc:
File.open(fname) {|f|
return f.read
}
end
end
+#:startdoc:
Oops, something went wrong.

0 comments on commit 316906c

Please sign in to comment.