diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2013-01-25 04:23:06 -0800 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2013-01-25 04:23:06 -0800 |
commit | 01341e3e432f0602891fe226ed1f2d079f590327 (patch) | |
tree | c946af83d94e061c93124733dd8d2efc40956429 | |
parent | 9826823e665e612f0a166da6b2f8e5007183400b (diff) | |
parent | 57bfbc249e2af753163788d07ac7a658b4f5484a (diff) | |
download | rails-01341e3e432f0602891fe226ed1f2d079f590327.tar.gz rails-01341e3e432f0602891fe226ed1f2d079f590327.tar.bz2 rails-01341e3e432f0602891fe226ed1f2d079f590327.zip |
Merge pull request #9046 from exviva/actionmailer_subject_interpolations
Allow passing interpolations to #default_i18n_subject in mailers
-rw-r--r-- | actionmailer/CHANGELOG.md | 19 | ||||
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 5 | ||||
-rw-r--r-- | actionmailer/test/base_test.rb | 6 | ||||
-rw-r--r-- | actionmailer/test/mailers/base_mailer.rb | 4 |
4 files changed, 31 insertions, 3 deletions
diff --git a/actionmailer/CHANGELOG.md b/actionmailer/CHANGELOG.md index 43bfa536c1..7e57fb39f3 100644 --- a/actionmailer/CHANGELOG.md +++ b/actionmailer/CHANGELOG.md @@ -1,6 +1,23 @@ ## Rails 4.0.0 (unreleased) ## -* Eager loading made to use relation's in_clause_length instead of host's one. +* Allow passing interpolations to `#default_i18n_subject`, e.g.: + + # config/locales/en.yml + en: + user_mailer: + welcome: + subject: 'Hello, %{username}' + + # app/mailers/user_mailer.rb + class UserMailer < ActionMailer::Base + def welcome(user) + mail(subject: default_i18n_subject(username: user.name)) + end + end + + *Olek Janiszewski* + +* Eager loading made to use relation's `in_clause_length` instead of host's one. Fix #8474 *Boris Staal* diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 9ba606c045..c4d2950abd 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -726,9 +726,10 @@ module ActionMailer # Translates the +subject+ using Rails I18n class under <tt>[mailer_scope, action_name]</tt> scope. # If it does not find a translation for the +subject+ under the specified scope it will default to a # humanized version of the <tt>action_name</tt>. - def default_i18n_subject #:nodoc: + # If the subject has interpolations, you can pass them through the +interpolations+ parameter. + def default_i18n_subject(interpolations = {}) mailer_scope = self.class.mailer_name.tr('/', '.') - I18n.t(:subject, scope: [mailer_scope, action_name], default: action_name.humanize) + I18n.t(:subject, interpolations.merge(scope: [mailer_scope, action_name], default: action_name.humanize)) end def collect_responses(headers) #:nodoc: diff --git a/actionmailer/test/base_test.rb b/actionmailer/test/base_test.rb index b06c465380..b9c56c540d 100644 --- a/actionmailer/test/base_test.rb +++ b/actionmailer/test/base_test.rb @@ -209,6 +209,12 @@ class BaseTest < ActiveSupport::TestCase assert_equal "New Subject!", email.subject end + test 'default subject can have interpolations' do + I18n.backend.store_translations('en', base_mailer: {with_subject_interpolations: {subject: 'Will the real %{rapper_or_impersonator} please stand up?'}}) + email = BaseMailer.with_subject_interpolations + assert_equal 'Will the real Slim Shady please stand up?', email.subject + end + test "translations are scoped properly" do I18n.backend.store_translations('en', base_mailer: {email_with_translations: {greet_user: "Hello %{name}!"}}) email = BaseMailer.email_with_translations diff --git a/actionmailer/test/mailers/base_mailer.rb b/actionmailer/test/mailers/base_mailer.rb index 8fca6177bd..504ca36483 100644 --- a/actionmailer/test/mailers/base_mailer.rb +++ b/actionmailer/test/mailers/base_mailer.rb @@ -123,4 +123,8 @@ class BaseMailer < ActionMailer::Base mail(:template_name => "welcome") nil end + + def with_subject_interpolations + mail(subject: default_i18n_subject(rapper_or_impersonator: 'Slim Shady'), body: '') + end end |