From 28bf2fa03886e3ea7d873375239395b91b8e530e Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sun, 28 Sep 2008 12:31:45 -0500 Subject: Protect body ivar from being clobbered by the mailer template assigns --- actionmailer/lib/action_mailer/base.rb | 3 +++ actionmailer/test/fixtures/test_mailer/body_ivar.erb | 2 ++ actionmailer/test/mail_service_test.rb | 12 ++++++++++++ actionpack/lib/action_view/base.rb | 4 ++-- 4 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 actionmailer/test/fixtures/test_mailer/body_ivar.erb diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index bfe435550b..043f56ba17 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -296,6 +296,9 @@ module ActionMailer #:nodoc: @@default_implicit_parts_order = [ "text/html", "text/enriched", "text/plain" ] cattr_accessor :default_implicit_parts_order + cattr_reader :protected_instance_variables + @@protected_instance_variables = %w(@body) + # Specify the BCC addresses for the message adv_attr_accessor :bcc diff --git a/actionmailer/test/fixtures/test_mailer/body_ivar.erb b/actionmailer/test/fixtures/test_mailer/body_ivar.erb new file mode 100644 index 0000000000..1421e5c908 --- /dev/null +++ b/actionmailer/test/fixtures/test_mailer/body_ivar.erb @@ -0,0 +1,2 @@ +body: <%= @body %> +bar: <%= @bar %> \ No newline at end of file diff --git a/actionmailer/test/mail_service_test.rb b/actionmailer/test/mail_service_test.rb index f57c6f3fb8..7f9540c44b 100644 --- a/actionmailer/test/mail_service_test.rb +++ b/actionmailer/test/mail_service_test.rb @@ -273,6 +273,13 @@ class TestMailer < ActionMailer::Base headers "return-path" => "another@somewhere.test" end + def body_ivar(recipient) + recipients recipient + subject "Body as a local variable" + from "test@example.com" + body :body => "foo", :bar => "baz" + end + class <}, MockSMTP.deliveries[0][0] end + + def test_body_is_stored_as_an_ivar + mail = TestMailer.create_body_ivar(@recipient) + assert_equal "body: foo\nbar: baz", mail.body + end end end # uses_mocha diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 8c00670087..77015ad06b 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -296,9 +296,9 @@ module ActionView #:nodoc: @assigns.each { |key, value| instance_variable_set("@#{key}", value) } if @controller - variables = @controller.instance_variables + variables = @controller.instance_variable_names variables -= @controller.protected_instance_variables if @controller.respond_to?(:protected_instance_variables) - variables.each {|name| instance_variable_set(name, @controller.instance_variable_get(name)) } + variables.each { |name| instance_variable_set(name, @controller.instance_variable_get(name)) } end @assigns_added = true -- cgit v1.2.3