diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index bfe435550ba5b26108d199343678d22cc0c5a5ec..043f56ba17a3b3679cc2720a63664aeed97be622 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -296,6 +296,9 @@ class Base @@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 0000000000000000000000000000000000000000..1421e5c9083d676d1e060ef084bdb66509a179b5 --- /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 f57c6f3fb86d9048e782ecc4f4a4fa3d3c0dbe89..7f9540c44b0f9b018844a9ec0846818bb375dc58 100644 --- a/actionmailer/test/mail_service_test.rb +++ b/actionmailer/test/mail_service_test.rb @@ -273,6 +273,13 @@ def return_path 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 8c0067008793b9bcfc7e60dbdefafe2dc1f2edc5..77015ad06b70477a564a934f6e85c15c11f6692b 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -296,9 +296,9 @@ def _evaluate_assigns_and_ivars #: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