Skip to content

Commit

Permalink
Merge remote branch 'jose/am'
Browse files Browse the repository at this point in the history
  • Loading branch information
Yehuda Katz authored and Yehuda Katz committed Dec 25, 2009
2 parents 2e79ec7 + 9f1c359 commit 8f6da94
Show file tree
Hide file tree
Showing 24 changed files with 113 additions and 1,422 deletions.
5 changes: 4 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ gem "rails", "3.0.pre", :path => "railties"
gem lib, '3.0.pre', :path => lib
end

# AS
gem "i18n", ">= 0.3.0"

# AR
gem "arel", "0.2.pre", :git => "git://github.com/rails/arel.git"
gem "sqlite3-ruby", ">= 1.2.5"
Expand All @@ -32,4 +35,4 @@ if ENV['CI']
end
end

disable_system_gems
disable_system_gems
32 changes: 14 additions & 18 deletions actionmailer/lib/action_mailer/adv_attr_accessor.rb
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
module ActionMailer
module AdvAttrAccessor #:nodoc:
def self.included(base)
base.extend(ClassMethods)
end

module ClassMethods #:nodoc:
def adv_attr_accessor(*names)
names.each do |name|
ivar = "@#{name}"
def adv_attr_accessor(*names)
names.each do |name|
ivar = "@#{name}"

define_method("#{name}=") do |value|
instance_variable_set(ivar, value)
class_eval <<-ACCESSORS, __FILE__, __LINE__ + 1
def #{name}=(value)
#{ivar} = value
end
define_method(name) do |*parameters|
raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1
if parameters.empty?
if instance_variable_names.include?(ivar)
instance_variable_get(ivar)
end
def #{name}(*args)
raise ArgumentError, "expected 0 or 1 parameters" unless args.length <= 1
if args.empty?
#{ivar} if instance_variable_names.include?(#{ivar.inspect})
else
instance_variable_set(ivar, parameters.first)
#{ivar} = args.first
end
end
end
ACCESSORS

self.protected_instance_variables << ivar if self.respond_to?(:protected_instance_variables)
end
end
end
Expand Down
36 changes: 14 additions & 22 deletions actionmailer/lib/action_mailer/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ module ActionMailer #:nodoc:
# bcc ["bcc@example.com", "Order Watcher <watcher@example.com>"]
# from "system@example.com"
# subject "New account information"
# body :account => recipient
#
# @account = recipient
# end
# end
#
Expand All @@ -45,13 +46,6 @@ module ActionMailer #:nodoc:
# address. Setting this is useful when you want delivery notifications sent to a different address than
# the one in <tt>from</tt>.
#
# The <tt>body</tt> method has special behavior. It takes a hash which generates an instance variable
# named after each key in the hash containing the value that that key points to.
#
# So, for example, <tt>body :account => recipient</tt> would result
# in an instance variable <tt>@account</tt> with the value of <tt>recipient</tt> being accessible in the
# view.
#
#
# = Mailer views
#
Expand All @@ -71,7 +65,12 @@ module ActionMailer #:nodoc:
# You can even use Action Pack helpers in these views. For example:
#
# You got a new note!
# <%= truncate(note.body, 25) %>
# <%= truncate(@note.body, 25) %>
#
# If you need to access the subject, from or the recipients in the view, you can do that through mailer object:
#
# You got a new note from <%= mailer.from %>!
# <%= truncate(@note.body, 25) %>
#
#
# = Generating URLs
Expand Down Expand Up @@ -254,14 +253,15 @@ module ActionMailer #:nodoc:
# and appear last in the mime encoded message. You can also pick a different order from inside a method with
# +implicit_parts_order+.
class Base < AbstractController::Base
include AdvAttrAccessor, PartContainer, Quoting, Utils
include PartContainer, Quoting
extend AdvAttrAccessor

include AbstractController::Rendering
include AbstractController::LocalizedCache
include AbstractController::Layouts
include AbstractController::Helpers

helper ActionMailer::MailHelper
helper ActionMailer::MailHelper

include ActionController::UrlWriter
include ActionMailer::DeprecatedBody
Expand Down Expand Up @@ -289,7 +289,7 @@ class Base < AbstractController::Base
@@default_implicit_parts_order = [ "text/html", "text/enriched", "text/plain" ]
cattr_accessor :default_implicit_parts_order

@@protected_instance_variables = []
@@protected_instance_variables = %w(@parts @mail)
cattr_reader :protected_instance_variables

# Specify the BCC addresses for the message
Expand Down Expand Up @@ -454,7 +454,7 @@ def process(method_name, *args) #:nodoc:
:default => method_name.humanize)

# Build the mail object itself
@mail = create_mail
create_mail
end

# Delivers a TMail::Mail object. By default, it delivers the cached mail
Expand Down Expand Up @@ -582,15 +582,7 @@ def create_mail
m.set_content_type(real_content_type, nil, ctype_attrs)
m.body = normalize_new_lines(@parts.first.body)
else
@parts.each do |p|
part = (TMail::Mail === p ? p : p.to_mail(self))
m.parts << part
end

if real_content_type =~ /multipart/
ctype_attrs.delete "charset"
m.set_content_type(real_content_type, nil, ctype_attrs)
end
setup_multiple_parts(m, real_content_type, ctype_attrs)
end

@mail = m
Expand Down
5 changes: 5 additions & 0 deletions actionmailer/lib/action_mailer/mail_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,10 @@ def block_format(text)

formatted
end

# Access the mailer instance.
def mailer #:nodoc:
@controller
end
end
end
15 changes: 4 additions & 11 deletions actionmailer/lib/action_mailer/part.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ module ActionMailer
# and add them to the +parts+ list of the mailer, it is easier
# to use the helper methods in ActionMailer::PartContainer.
class Part
include AdvAttrAccessor, PartContainer, Utils
include PartContainer
extend AdvAttrAccessor

# Represents the body of the part, as a string. This should not be a
# Hash (like ActionMailer::Base), but if you want a template to be rendered
Expand Down Expand Up @@ -82,16 +83,8 @@ def to_mail(defaults)
@parts.unshift Part.new(:charset => charset, :body => @body, :content_type => 'text/plain')
@body = nil
end

@parts.each do |p|
prt = (TMail::Mail === p ? p : p.to_mail(defaults))
part.parts << prt
end

if real_content_type =~ /multipart/
ctype_attrs.delete 'charset'
part.set_content_type(real_content_type, nil, ctype_attrs)
end

setup_multiple_parts(part, real_content_type, ctype_attrs)
end

headers.each { |k,v| part[k] = v }
Expand Down
20 changes: 18 additions & 2 deletions actionmailer/lib/action_mailer/part_container.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,24 @@ def attachment(params, &block)
end

private

def parse_content_type(defaults=nil)

def normalize_new_lines(text) #:nodoc:
text.to_s.gsub(/\r\n?/, "\n")
end

def setup_multiple_parts(mailer, real_content_type, ctype_attrs) #:nodoc:
@parts.each do |p|
part = (TMail::Mail === p ? p : p.to_mail(self))
mailer.parts << part
end

if real_content_type =~ /multipart/
ctype_attrs.delete "charset"
mailer.set_content_type(real_content_type, nil, ctype_attrs)
end
end

def parse_content_type(defaults=nil) #:nodoc:
if content_type.blank?
return defaults ?
[ defaults.content_type, { 'charset' => defaults.charset } ] :
Expand Down
7 changes: 0 additions & 7 deletions actionmailer/lib/action_mailer/utils.rb

This file was deleted.

32 changes: 25 additions & 7 deletions actionmailer/test/adv_attr_test.rb
Original file line number Diff line number Diff line change
@@ -1,18 +1,36 @@
require 'abstract_unit'
require 'action_mailer/adv_attr_accessor'

class AdvAttrTest < Test::Unit::TestCase
class AdvAttrTest < ActiveSupport::TestCase
class Person
include ActionMailer::AdvAttrAccessor
cattr_reader :protected_instance_variables
@@protected_instance_variables = []

extend ActionMailer::AdvAttrAccessor
adv_attr_accessor :name
end

def setup
@person = Person.new
end

def test_adv_attr
bob = Person.new
assert_nil bob.name
bob.name 'Bob'
assert_equal 'Bob', bob.name
assert_nil @person.name
@person.name 'Bob'
assert_equal 'Bob', @person.name
end

def test_adv_attr_writer
assert_nil @person.name
@person.name = 'Bob'
assert_equal 'Bob', @person.name
end

def test_raise_an_error_with_multiple_args
assert_raise(ArgumentError) { @person.name('x', 'y') }
end

assert_raise(ArgumentError) {bob.name 'x', 'y'}
def test_ivar_is_added_to_protected_instnace_variables
assert Person.protected_instance_variables.include?('@name')
end
end
25 changes: 21 additions & 4 deletions actionmailer/test/mail_render_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,20 @@ def included_subtemplate(recipient)
from "tester@example.com"
end

def included_old_subtemplate(recipient)
def mailer_accessor(recipient)
recipients recipient
subject "Including another template in the one being rendered"
subject "Mailer Accessor"
from "tester@example.com"

@world = "Earth"
render :inline => "Hello, <%= render \"subtemplate\" %>"
render :inline => "Look, <%= mailer.subject %>!"
end

def no_instance_variable(recipient)
recipients recipient
subject "No Instance Variable"
from "tester@example.com"

render :inline => "Look, subject.nil? is <%= @subject.nil? %>!"
end

def initialize_defaults(method_name)
Expand Down Expand Up @@ -108,6 +115,16 @@ def test_included_subtemplate
mail = RenderMailer.deliver_included_subtemplate(@recipient)
assert_equal "Hey Ho, let's go!", mail.body.strip
end

def test_mailer_accessor
mail = RenderMailer.deliver_mailer_accessor(@recipient)
assert_equal "Look, Mailer Accessor!", mail.body.strip
end

def test_no_instance_variable
mail = RenderMailer.deliver_no_instance_variable(@recipient)
assert_equal "Look, subject.nil? is true!", mail.body.strip
end
end

class FirstSecondHelperTest < Test::Unit::TestCase
Expand Down
2 changes: 1 addition & 1 deletion activesupport/lib/active_support/vendor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def ActiveSupport.requirable?(file)
$LOAD_PATH.any? { |p| Dir.glob("#{p}/#{file}.*").any? }
end

[%w(builder 2.1.2), %w(i18n 0.1.3), %w(memcache-client 1.7.5), %w(tzinfo 0.3.15)].each do |lib, version|
[%w(builder 2.1.2), %w(memcache-client 1.7.5), %w(tzinfo 0.3.15)].each do |lib, version|
# If the lib is not already requirable
unless ActiveSupport.requirable? lib
# Try to activate a gem ~> satisfying the requested version first.
Expand Down
20 changes: 0 additions & 20 deletions activesupport/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE

This file was deleted.

20 changes: 0 additions & 20 deletions activesupport/lib/active_support/vendor/i18n-0.1.3/README.textile

This file was deleted.

5 changes: 0 additions & 5 deletions activesupport/lib/active_support/vendor/i18n-0.1.3/Rakefile

This file was deleted.

27 changes: 0 additions & 27 deletions activesupport/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec

This file was deleted.

Loading

0 comments on commit 8f6da94

Please sign in to comment.