actionmailer 1.1.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionmailer might be problematic. Click here for more details.

data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ *1.2.0* (March 27th, 2005)
2
+
3
+ * Nil charset caused subject line to be improperly quoted in implicitly multipart messages #2662 [ehalvorsen+rails@runbox.com]
4
+
5
+ * Parse content-type apart before using it so that sub-parts of the header can be set correctly #2918 [Jamis Buck]
6
+
7
+ * Make custom headers work in subparts #4034 [elan@bluemandrill.com]
8
+
9
+ * Template paths with dot chars in them no longer mess up implicit template selection for multipart messages #3332 [Chad Fowler]
10
+
11
+ * Make sure anything with content-disposition of "attachment" is passed to the attachment presenter when parsing an email body [Jamis Buck]
12
+
13
+ * Make sure TMail#attachments includes anything with content-disposition of "attachment", regardless of content-type [Jamis Buck]
14
+
15
+
1
16
  *1.1.5* (December 13th, 2005)
2
17
 
3
18
  * Become part of Rails 1.0
@@ -7,6 +22,8 @@
7
22
 
8
23
  * Rename Version constant to VERSION. #2802 [Marcel Molina Jr.]
9
24
 
25
+ * Stricter matching for implicitly multipart filenames excludes files ending in unsupported extensions (such as foo.rhtml.bak) and without a two-part content type (such as foo.text.rhtml or foo.text.really.plain.rhtml). #2398 [Dave Burt <dave@burt.id.au>, Jeremy Kemper]
26
+
10
27
 
11
28
  *1.1.3* (November 7th, 2005)
12
29
 
@@ -8,16 +8,20 @@ module ActionMailer
8
8
  module ClassMethods #:nodoc:
9
9
  def adv_attr_accessor(*names)
10
10
  names.each do |name|
11
+ ivar = "@#{name}"
12
+
11
13
  define_method("#{name}=") do |value|
12
- instance_variable_set("@#{name}", value)
14
+ instance_variable_set(ivar, value)
13
15
  end
14
16
 
15
17
  define_method(name) do |*parameters|
16
18
  raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1
17
19
  if parameters.empty?
18
- instance_variable_get("@#{name}")
20
+ if instance_variables.include?(ivar)
21
+ instance_variable_get(ivar)
22
+ end
19
23
  else
20
- instance_variable_set("@#{name}", parameters.first)
24
+ instance_variable_set(ivar, parameters.first)
21
25
  end
22
26
  end
23
27
  end
@@ -4,7 +4,7 @@ require 'action_mailer/part_container'
4
4
  require 'action_mailer/utils'
5
5
  require 'tmail/net'
6
6
 
7
- module ActionMailer
7
+ module ActionMailer #:nodoc:
8
8
  # Usage:
9
9
  #
10
10
  # class ApplicationMailer < ActionMailer::Base
@@ -121,6 +121,10 @@ module ActionMailer
121
121
  class Base
122
122
  include AdvAttrAccessor, PartContainer
123
123
 
124
+ # Action Mailer subclasses should be reloaded by the dispatcher in Rails
125
+ # when Dependencies.mechanism = :load.
126
+ include Reloadable::Subclasses
127
+
124
128
  private_class_method :new #:nodoc:
125
129
 
126
130
  cattr_accessor :template_root
@@ -278,15 +282,17 @@ module ActionMailer
278
282
  if @parts.empty?
279
283
  templates = Dir.glob("#{template_path}/#{@template}.*")
280
284
  templates.each do |path|
281
- type = (File.basename(path).split(".")[1..-2] || []).join("/")
282
- next if type.empty?
283
- @parts << Part.new(:content_type => type,
285
+ # TODO: don't hardcode rhtml|rxml
286
+ basename = File.basename(path)
287
+ next unless md = /^([^\.]+)\.([^\.]+\.[^\+]+)\.(rhtml|rxml)$/.match(basename)
288
+ template_name = basename
289
+ content_type = md.captures[1].gsub('.', '/')
290
+ @parts << Part.new(:content_type => content_type,
284
291
  :disposition => "inline", :charset => charset,
285
- :body => render_message(File.basename(path).split(".")[0..-2].join('.'), @body))
292
+ :body => render_message(template_name, @body))
286
293
  end
287
294
  unless @parts.empty?
288
295
  @content_type = "multipart/alternative"
289
- @charset = nil
290
296
  @parts = sort_parts(@parts, @implicit_parts_order)
291
297
  end
292
298
  end
@@ -296,7 +302,7 @@ module ActionMailer
296
302
  # normal template exists (or if there were no implicit parts) we render
297
303
  # it.
298
304
  template_exists = @parts.empty?
299
- template_exists ||= Dir.glob("#{template_path}/#{@template}.*").any? { |i| i.split(".").length == 2 }
305
+ template_exists ||= Dir.glob("#{template_path}/#{@template}.*").any? { |i| File.basename(i).split(".").length == 2 }
300
306
  @body = render_message(@template, @body) if template_exists
301
307
 
302
308
  # Finally, if there are other message parts and a textual body exists,
@@ -406,14 +412,16 @@ module ActionMailer
406
412
  m.date = sent_on.to_time rescue sent_on if sent_on
407
413
  headers.each { |k, v| m[k] = v }
408
414
 
415
+ real_content_type, ctype_attrs = parse_content_type
416
+
409
417
  if @parts.empty?
410
- m.set_content_type content_type, nil, { "charset" => charset }
418
+ m.set_content_type(real_content_type, nil, ctype_attrs)
411
419
  m.body = Utils.normalize_new_lines(body)
412
420
  else
413
421
  if String === body
414
422
  part = TMail::Mail.new
415
423
  part.body = Utils.normalize_new_lines(body)
416
- part.set_content_type content_type, nil, { "charset" => charset }
424
+ part.set_content_type(real_content_type, nil, ctype_attrs)
417
425
  part.set_content_disposition "inline"
418
426
  m.parts << part
419
427
  end
@@ -423,7 +431,10 @@ module ActionMailer
423
431
  m.parts << part
424
432
  end
425
433
 
426
- m.set_content_type(content_type, nil, { "charset" => charset }) if content_type =~ /multipart/
434
+ if real_content_type =~ /multipart/
435
+ ctype_attrs.delete "charset"
436
+ m.set_content_type(real_content_type, nil, ctype_attrs)
437
+ end
427
438
  end
428
439
 
429
440
  @mail = m
@@ -56,6 +56,8 @@ module ActionMailer
56
56
  def to_mail(defaults)
57
57
  part = TMail::Mail.new
58
58
 
59
+ real_content_type, ctype_attrs = parse_content_type(defaults)
60
+
59
61
  if @parts.empty?
60
62
  part.content_transfer_encoding = transfer_encoding || "quoted-printable"
61
63
  case (transfer_encoding || "").downcase
@@ -71,20 +73,20 @@ module ActionMailer
71
73
  # Also don't set filename and name when there is none (like in
72
74
  # non-attachment parts)
73
75
  if content_disposition == "attachment"
74
- part.set_content_type(content_type || defaults.content_type, nil,
75
- squish("charset" => nil, "name" => filename))
76
+ ctype_attrs.delete "charset"
77
+ part.set_content_type(real_content_type, nil,
78
+ squish("name" => filename).merge(ctype_attrs))
76
79
  part.set_content_disposition(content_disposition,
77
- squish("filename" => filename))
80
+ squish("filename" => filename).merge(ctype_attrs))
78
81
  else
79
- part.set_content_type(content_type || defaults.content_type, nil,
80
- "charset" => (charset || defaults.charset))
82
+ part.set_content_type(real_content_type, nil, ctype_attrs)
81
83
  part.set_content_disposition(content_disposition)
82
84
  end
83
85
  else
84
86
  if String === body
85
87
  part = TMail::Mail.new
86
88
  part.body = body
87
- part.set_content_type content_type, nil, { "charset" => charset }
89
+ part.set_content_type(real_content_type, nil, ctype_attrs)
88
90
  part.set_content_disposition "inline"
89
91
  m.parts << part
90
92
  end
@@ -94,13 +96,16 @@ module ActionMailer
94
96
  part.parts << prt
95
97
  end
96
98
 
97
- part.set_content_type(content_type, nil, { "charset" => charset }) if content_type =~ /multipart/
99
+ part.set_content_type(real_content_type, nil, ctype_attrs) if real_content_type =~ /multipart/
98
100
  end
99
-
101
+
102
+ headers.each { |k,v| part[k] = v }
103
+
100
104
  part
101
105
  end
102
106
 
103
107
  private
108
+
104
109
  def squish(values={})
105
110
  values.delete_if { |k,v| v.nil? }
106
111
  end
@@ -38,5 +38,14 @@ module ActionMailer
38
38
  part(params, &block)
39
39
  end
40
40
 
41
+ private
42
+
43
+ def parse_content_type(defaults=nil)
44
+ return [defaults && defaults.content_type, {}] if content_type.blank?
45
+ ctype, *attrs = content_type.split(/;\s*/)
46
+ attrs = attrs.inject({}) { |h,s| k,v = s.split(/=/, 2); h[k] = v; h }
47
+ [ctype, {"charset" => charset || defaults && defaults.charset}.merge(attrs)]
48
+ end
49
+
41
50
  end
42
51
  end
@@ -7,13 +7,18 @@ module TMail
7
7
 
8
8
  class Mail
9
9
  def has_attachments?
10
- multipart? && parts.any? { |part| part.header["content-type"].main_type != "text" }
10
+ multipart? && parts.any? { |part| attachment?(part) }
11
+ end
12
+
13
+ def attachment?(part)
14
+ (part['content-disposition'] && part['content-disposition'].disposition == "attachment") ||
15
+ part.header['content-type'].main_type != "text"
11
16
  end
12
17
 
13
18
  def attachments
14
19
  if multipart?
15
20
  parts.collect { |part|
16
- if part.header["content-type"].main_type != "text"
21
+ if attachment?(part)
17
22
  content = part.body # unquoted automatically by TMail#body
18
23
  file_name = (part['content-location'] &&
19
24
  part['content-location'].body) ||
@@ -33,7 +33,7 @@ module TMail
33
33
  part.body(to_charset, &attachment_presenter)
34
34
  elsif header.nil?
35
35
  ""
36
- elsif header.main_type == "text"
36
+ elsif !attachment?(part)
37
37
  part.unquoted_body(to_charset)
38
38
  else
39
39
  attachment_presenter.call(header["name"] || "(unnamed)")
@@ -1,8 +1,8 @@
1
1
  module ActionMailer
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 1
5
- TINY = 5
4
+ MINOR = 2
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/rakefile CHANGED
@@ -25,6 +25,7 @@ Rake::TestTask.new { |t|
25
25
  t.libs << "test"
26
26
  t.pattern = 'test/*_test.rb'
27
27
  t.verbose = true
28
+ t.warning = false
28
29
  }
29
30
 
30
31
 
@@ -32,7 +33,7 @@ Rake::TestTask.new { |t|
32
33
  Rake::RDocTask.new { |rdoc|
33
34
  rdoc.rdoc_dir = 'doc'
34
35
  rdoc.title = "Action Mailer -- Easy email delivery and testing"
35
- rdoc.options << '--line-numbers --inline-source --main README --accessor adv_attr_accessor=M'
36
+ rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
36
37
  rdoc.template = "#{ENV['template']}.rb" if ENV['template']
37
38
  rdoc.rdoc_files.include('README', 'CHANGELOG')
38
39
  rdoc.rdoc_files.include('lib/action_mailer.rb')
@@ -53,7 +54,7 @@ spec = Gem::Specification.new do |s|
53
54
  s.rubyforge_project = "actionmailer"
54
55
  s.homepage = "http://www.rubyonrails.org"
55
56
 
56
- s.add_dependency('actionpack', '= 1.11.2' + PKG_BUILD)
57
+ s.add_dependency('actionpack', '= 1.12.0' + PKG_BUILD)
57
58
 
58
59
  s.has_rdoc = true
59
60
  s.requirements << 'none'
@@ -0,0 +1 @@
1
+ Have a lovely picture, from me. Enjoy!
@@ -0,0 +1,29 @@
1
+ Mime-Version: 1.0 (Apple Message framework v730)
2
+ Content-Type: multipart/mixed; boundary=Apple-Mail-13-196941151
3
+ Message-Id: <9169D984-4E0B-45EF-82D4-8F5E53AD7012@example.com>
4
+ From: foo@example.com
5
+ Subject: testing
6
+ Date: Mon, 6 Jun 2005 22:21:22 +0200
7
+ To: blah@example.com
8
+
9
+
10
+ --Apple-Mail-13-196941151
11
+ Content-Transfer-Encoding: quoted-printable
12
+ Content-Type: text/plain;
13
+ charset=ISO-8859-1;
14
+ delsp=yes;
15
+ format=flowed
16
+
17
+ This is the first part.
18
+
19
+ --Apple-Mail-13-196941151
20
+ Content-Type: text/x-ruby-script; name="hello.rb"
21
+ Content-Transfer-Encoding: 7bit
22
+ Content-Disposition: attachment;
23
+ filename="api.rb"
24
+
25
+ puts "Hello, world!"
26
+ gets
27
+
28
+ --Apple-Mail-13-196941151--
29
+
@@ -21,6 +21,16 @@ Content-Type: text/plain;
21
21
 
22
22
  This is the first part.
23
23
 
24
+ --Apple-Mail-12-196940926
25
+ Content-Transfer-Encoding: 7bit
26
+ Content-Type: text/x-ruby-script;
27
+ x-unix-mode=0666;
28
+ name="test.rb"
29
+ Content-Disposition: attachment;
30
+ filename=test.rb
31
+
32
+ puts "testing, testing"
33
+
24
34
  --Apple-Mail-12-196940926
25
35
  Content-Transfer-Encoding: base64
26
36
  Content-Type: application/pdf;
@@ -0,0 +1 @@
1
+ Ignored when searching for implicitly multipart parts.
@@ -0,0 +1 @@
1
+ Ignored when searching for implicitly multipart parts.
@@ -23,6 +23,20 @@ class Net::SMTP
23
23
  end
24
24
  end
25
25
 
26
+ class FunkyPathMailer < ActionMailer::Base
27
+ def multipart_with_template_path_with_dots(recipient)
28
+ recipients recipient
29
+ subject "Have a lovely picture"
30
+ from "Chad Fowler <chad@chadfowler.com>"
31
+ attachment :content_type => "image/jpeg",
32
+ :body => "not really a jpeg, we're only testing, after all"
33
+ end
34
+
35
+ def template_path
36
+ "#{File.dirname(__FILE__)}/fixtures/path.with.dots"
37
+ end
38
+ end
39
+
26
40
  class TestMailer < ActionMailer::Base
27
41
 
28
42
  def signed_up(recipient)
@@ -153,6 +167,14 @@ class TestMailer < ActionMailer::Base
153
167
  @implicit_parts_order = order if order
154
168
  end
155
169
 
170
+ def implicitly_multipart_with_utf8
171
+ recipients "no.one@nowhere.test"
172
+ subject "Foo áëô îü"
173
+ from "some.one@somewhere.test"
174
+ template "implicitly_multipart_example"
175
+ body ({ "recipient" => "no.one@nowhere.test" })
176
+ end
177
+
156
178
  def html_mail(recipient)
157
179
  recipients recipient
158
180
  subject "html mail"
@@ -204,6 +226,15 @@ class TestMailer < ActionMailer::Base
204
226
  end
205
227
  attachment :content_type => "application/octet-stream",:filename => "test.txt", :body => "test abcdefghijklmnopqstuvwxyz"
206
228
  end
229
+
230
+ def attachment_with_custom_header(recipient)
231
+ recipients recipient
232
+ subject "custom header in attachment"
233
+ from "test@example.com"
234
+ content_type "multipart/related"
235
+ part :content_type => "text/html", :body => 'yo'
236
+ attachment :content_type => "image/jpeg",:filename => "test.jpeg", :body => "i am not a real picture", :headers => { 'Content-ID' => '<test@test.com>' }
237
+ end
207
238
 
208
239
  def unnamed_attachment(recipient)
209
240
  recipients recipient
@@ -223,6 +254,14 @@ class TestMailer < ActionMailer::Base
223
254
  body "testing"
224
255
  end
225
256
 
257
+ def custom_content_type_attributes
258
+ recipients "no.one@nowhere.test"
259
+ subject "custom content types"
260
+ from "some.one@somewhere.test"
261
+ content_type "text/plain; format=flowed"
262
+ body "testing"
263
+ end
264
+
226
265
  class <<self
227
266
  attr_accessor :received_body
228
267
  end
@@ -270,6 +309,12 @@ class ActionMailerTest < Test::Unit::TestCase
270
309
  assert_equal "application/octet-stream", created.parts[1].content_type
271
310
  end
272
311
 
312
+ def test_attachment_with_custom_header
313
+ created = nil
314
+ assert_nothing_raised { created = TestMailer.create_attachment_with_custom_header(@recipient)}
315
+ assert_equal "<test@test.com>", created.parts[1].header['content-id'].to_s
316
+ end
317
+
273
318
  def test_signed_up
274
319
  expected = new_mail
275
320
  expected.to = @recipient
@@ -573,6 +618,14 @@ EOF
573
618
  assert_equal "Photo25.jpg", mail.attachments.first.original_filename
574
619
  end
575
620
 
621
+ def test_attachment_with_text_type
622
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email13")
623
+ mail = TMail::Mail.parse(fixture)
624
+ assert mail.has_attachments?
625
+ assert_equal 1, mail.attachments.length
626
+ assert_equal "hello.rb", mail.attachments.first.original_filename
627
+ end
628
+
576
629
  def test_decode_part_without_content_type
577
630
  fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email4")
578
631
  mail = TMail::Mail.parse(fixture)
@@ -601,6 +654,11 @@ EOF
601
654
  assert_match(/\nSubject: =\?utf-8\?Q\?Foo_.*?\?=/, mail.encoded)
602
655
  end
603
656
 
657
+ def test_implicitly_multipart_with_utf8
658
+ mail = TestMailer.create_implicitly_multipart_with_utf8
659
+ assert_match(/\nSubject: =\?utf-8\?Q\?Foo_.*?\?=/, mail.encoded)
660
+ end
661
+
604
662
  def test_explicitly_multipart_messages
605
663
  mail = TestMailer.create_explicitly_multipart_example(@recipient)
606
664
  assert_equal 3, mail.parts.length
@@ -697,7 +755,7 @@ EOF
697
755
  def test_recursive_multipart_processing
698
756
  fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email7")
699
757
  mail = TMail::Mail.parse(fixture)
700
- assert_equal "This is the first part.\n\nAttachment: test.pdf\n\n\nAttachment: smime.p7s\n", mail.body
758
+ assert_equal "This is the first part.\n\nAttachment: test.rb\nAttachment: test.pdf\n\n\nAttachment: smime.p7s\n", mail.body
701
759
  end
702
760
 
703
761
  def test_decode_encoded_attachment_filename
@@ -741,9 +799,20 @@ EOF
741
799
  end
742
800
 
743
801
  def test_deliver_with_mail_object
744
- mail = TestMailer::create_headers_with_nonalpha_chars(@recipient)
802
+ mail = TestMailer.create_headers_with_nonalpha_chars(@recipient)
745
803
  assert_nothing_raised { TestMailer.deliver(mail) }
746
804
  assert_equal 1, TestMailer.deliveries.length
747
805
  end
806
+
807
+ def test_multipart_with_template_path_with_dots
808
+ mail = FunkyPathMailer.create_multipart_with_template_path_with_dots(@recipient)
809
+ assert_equal 2, mail.parts.length
810
+ end
811
+
812
+ def test_custom_content_type_attributes
813
+ mail = TestMailer.create_custom_content_type_attributes
814
+ assert_match %r{format=flowed}, mail['content-type'].to_s
815
+ assert_match %r{charset=utf-8}, mail['content-type'].to_s
816
+ end
748
817
  end
749
818
 
metadata CHANGED
@@ -3,11 +3,11 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: actionmailer
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.1.5
7
- date: 2005-12-13 00:00:00 -06:00
6
+ version: 1.2.0
7
+ date: 2006-03-27 00:00:00 -06:00
8
8
  summary: Service layer for easy email delivery and testing.
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: david@loudthinking.com
12
12
  homepage: http://www.rubyonrails.org
13
13
  rubyforge_project: actionmailer
@@ -18,107 +18,115 @@ bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
27
26
  signing_key:
28
27
  cert_chain:
29
28
  authors:
30
- - David Heinemeier Hansson
29
+ - David Heinemeier Hansson
31
30
  files:
32
- - rakefile
33
- - install.rb
34
- - README
35
- - CHANGELOG
36
- - MIT-LICENSE
37
- - lib/action_mailer
38
- - lib/action_mailer.rb
39
- - lib/action_mailer/adv_attr_accessor.rb
40
- - lib/action_mailer/base.rb
41
- - lib/action_mailer/helpers.rb
42
- - lib/action_mailer/mail_helper.rb
43
- - lib/action_mailer/part.rb
44
- - lib/action_mailer/part_container.rb
45
- - lib/action_mailer/quoting.rb
46
- - lib/action_mailer/utils.rb
47
- - lib/action_mailer/vendor
48
- - lib/action_mailer/version.rb
49
- - lib/action_mailer/vendor/text
50
- - lib/action_mailer/vendor/tmail
51
- - lib/action_mailer/vendor/tmail.rb
52
- - lib/action_mailer/vendor/text/format.rb
53
- - lib/action_mailer/vendor/tmail/address.rb
54
- - lib/action_mailer/vendor/tmail/attachments.rb
55
- - lib/action_mailer/vendor/tmail/base64.rb
56
- - lib/action_mailer/vendor/tmail/config.rb
57
- - lib/action_mailer/vendor/tmail/encode.rb
58
- - lib/action_mailer/vendor/tmail/facade.rb
59
- - lib/action_mailer/vendor/tmail/header.rb
60
- - lib/action_mailer/vendor/tmail/info.rb
61
- - lib/action_mailer/vendor/tmail/loader.rb
62
- - lib/action_mailer/vendor/tmail/mail.rb
63
- - lib/action_mailer/vendor/tmail/mailbox.rb
64
- - lib/action_mailer/vendor/tmail/mbox.rb
65
- - lib/action_mailer/vendor/tmail/net.rb
66
- - lib/action_mailer/vendor/tmail/obsolete.rb
67
- - lib/action_mailer/vendor/tmail/parser.rb
68
- - lib/action_mailer/vendor/tmail/port.rb
69
- - lib/action_mailer/vendor/tmail/quoting.rb
70
- - lib/action_mailer/vendor/tmail/scanner.rb
71
- - lib/action_mailer/vendor/tmail/scanner_r.rb
72
- - lib/action_mailer/vendor/tmail/stringio.rb
73
- - lib/action_mailer/vendor/tmail/tmail.rb
74
- - lib/action_mailer/vendor/tmail/utils.rb
75
- - test/fixtures
76
- - test/mail_helper_test.rb
77
- - test/mail_render_test.rb
78
- - test/mail_service_test.rb
79
- - test/quoting_test.rb
80
- - test/tmail_test.rb
81
- - test/fixtures/helper_mailer
82
- - test/fixtures/helpers
83
- - test/fixtures/raw_email
84
- - test/fixtures/raw_email10
85
- - test/fixtures/raw_email11
86
- - test/fixtures/raw_email12
87
- - test/fixtures/raw_email2
88
- - test/fixtures/raw_email3
89
- - test/fixtures/raw_email4
90
- - test/fixtures/raw_email5
91
- - test/fixtures/raw_email6
92
- - test/fixtures/raw_email7
93
- - test/fixtures/raw_email8
94
- - test/fixtures/raw_email9
95
- - test/fixtures/templates
96
- - test/fixtures/test_mailer
97
- - test/fixtures/helper_mailer/use_helper.rhtml
98
- - test/fixtures/helper_mailer/use_helper_method.rhtml
99
- - test/fixtures/helper_mailer/use_mail_helper.rhtml
100
- - test/fixtures/helper_mailer/use_test_helper.rhtml
101
- - test/fixtures/helpers/test_helper.rb
102
- - test/fixtures/templates/signed_up.rhtml
103
- - test/fixtures/test_mailer/implicitly_multipart_example.text.html.rhtml
104
- - test/fixtures/test_mailer/implicitly_multipart_example.text.plain.rhtml
105
- - test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.rhtml
106
- - test/fixtures/test_mailer/signed_up.rhtml
31
+ - rakefile
32
+ - install.rb
33
+ - README
34
+ - CHANGELOG
35
+ - MIT-LICENSE
36
+ - lib/action_mailer
37
+ - lib/action_mailer.rb
38
+ - lib/action_mailer/adv_attr_accessor.rb
39
+ - lib/action_mailer/base.rb
40
+ - lib/action_mailer/helpers.rb
41
+ - lib/action_mailer/mail_helper.rb
42
+ - lib/action_mailer/part.rb
43
+ - lib/action_mailer/part_container.rb
44
+ - lib/action_mailer/quoting.rb
45
+ - lib/action_mailer/utils.rb
46
+ - lib/action_mailer/vendor
47
+ - lib/action_mailer/version.rb
48
+ - lib/action_mailer/vendor/text
49
+ - lib/action_mailer/vendor/tmail
50
+ - lib/action_mailer/vendor/tmail.rb
51
+ - lib/action_mailer/vendor/text/format.rb
52
+ - lib/action_mailer/vendor/tmail/address.rb
53
+ - lib/action_mailer/vendor/tmail/attachments.rb
54
+ - lib/action_mailer/vendor/tmail/base64.rb
55
+ - lib/action_mailer/vendor/tmail/config.rb
56
+ - lib/action_mailer/vendor/tmail/encode.rb
57
+ - lib/action_mailer/vendor/tmail/facade.rb
58
+ - lib/action_mailer/vendor/tmail/header.rb
59
+ - lib/action_mailer/vendor/tmail/info.rb
60
+ - lib/action_mailer/vendor/tmail/loader.rb
61
+ - lib/action_mailer/vendor/tmail/mail.rb
62
+ - lib/action_mailer/vendor/tmail/mailbox.rb
63
+ - lib/action_mailer/vendor/tmail/mbox.rb
64
+ - lib/action_mailer/vendor/tmail/net.rb
65
+ - lib/action_mailer/vendor/tmail/obsolete.rb
66
+ - lib/action_mailer/vendor/tmail/parser.rb
67
+ - lib/action_mailer/vendor/tmail/port.rb
68
+ - lib/action_mailer/vendor/tmail/quoting.rb
69
+ - lib/action_mailer/vendor/tmail/scanner.rb
70
+ - lib/action_mailer/vendor/tmail/scanner_r.rb
71
+ - lib/action_mailer/vendor/tmail/stringio.rb
72
+ - lib/action_mailer/vendor/tmail/tmail.rb
73
+ - lib/action_mailer/vendor/tmail/utils.rb
74
+ - test/fixtures
75
+ - test/mail_helper_test.rb
76
+ - test/mail_render_test.rb
77
+ - test/mail_service_test.rb
78
+ - test/quoting_test.rb
79
+ - test/tmail_test.rb
80
+ - test/fixtures/helper_mailer
81
+ - test/fixtures/helpers
82
+ - test/fixtures/path.with.dots
83
+ - test/fixtures/raw_email
84
+ - test/fixtures/raw_email10
85
+ - test/fixtures/raw_email11
86
+ - test/fixtures/raw_email12
87
+ - test/fixtures/raw_email13
88
+ - test/fixtures/raw_email2
89
+ - test/fixtures/raw_email3
90
+ - test/fixtures/raw_email4
91
+ - test/fixtures/raw_email5
92
+ - test/fixtures/raw_email6
93
+ - test/fixtures/raw_email7
94
+ - test/fixtures/raw_email8
95
+ - test/fixtures/raw_email9
96
+ - test/fixtures/templates
97
+ - test/fixtures/test_mailer
98
+ - test/fixtures/helper_mailer/use_helper.rhtml
99
+ - test/fixtures/helper_mailer/use_helper_method.rhtml
100
+ - test/fixtures/helper_mailer/use_mail_helper.rhtml
101
+ - test/fixtures/helper_mailer/use_test_helper.rhtml
102
+ - test/fixtures/helpers/test_helper.rb
103
+ - test/fixtures/path.with.dots/multipart_with_template_path_with_dots.rhtml
104
+ - test/fixtures/templates/signed_up.rhtml
105
+ - test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml
106
+ - test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak
107
+ - test/fixtures/test_mailer/implicitly_multipart_example.text.html.rhtml
108
+ - test/fixtures/test_mailer/implicitly_multipart_example.text.plain.rhtml
109
+ - test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.rhtml
110
+ - test/fixtures/test_mailer/signed_up.rhtml
107
111
  test_files: []
112
+
108
113
  rdoc_options: []
114
+
109
115
  extra_rdoc_files: []
116
+
110
117
  executables: []
118
+
111
119
  extensions: []
120
+
112
121
  requirements:
113
- - none
122
+ - none
114
123
  dependencies:
115
- - !ruby/object:Gem::Dependency
116
- name: actionpack
117
- version_requirement:
118
- version_requirements: !ruby/object:Gem::Version::Requirement
119
- requirements:
120
- -
121
- - "="
122
- - !ruby/object:Gem::Version
123
- version: 1.11.2
124
- version:
124
+ - !ruby/object:Gem::Dependency
125
+ name: actionpack
126
+ version_requirement:
127
+ version_requirements: !ruby/object:Gem::Version::Requirement
128
+ requirements:
129
+ - - "="
130
+ - !ruby/object:Gem::Version
131
+ version: 1.12.0
132
+ version: