From 8fdeff0fa5c4ebf01856b0048dd86f7151fd11ba Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Fri, 30 Jul 2010 08:04:16 +0200 Subject: mounted helpers should be included in ActionMailer --- actionmailer/lib/action_mailer/railtie.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index ce6d8cc5b5..c888e51b93 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -19,8 +19,9 @@ module ActionMailer ActiveSupport.on_load(:action_mailer) do include app.routes.url_helpers + include app.routes.mounted_helpers(:app) options.each { |k,v| send("#{k}=", v) } end end end -end \ No newline at end of file +end -- cgit v1.2.3 From c7664d112fadb313146da33f48d1da318f249927 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Fri, 30 Jul 2010 07:14:48 +0200 Subject: Include application's helpers and router helpers by default, but include engine's ones for controllers inside isolated namespace --- actionmailer/lib/action_mailer/railtie.rb | 2 ++ actionmailer/lib/action_mailer/railties/routes_helpers.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 actionmailer/lib/action_mailer/railties/routes_helpers.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index c888e51b93..26fe125fd8 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -1,5 +1,6 @@ require "action_mailer" require "rails" +require "action_mailer/railties/routes_helpers" module ActionMailer class Railtie < Rails::Railtie @@ -20,6 +21,7 @@ module ActionMailer ActiveSupport.on_load(:action_mailer) do include app.routes.url_helpers include app.routes.mounted_helpers(:app) + extend ::ActionMailer::Railties::RoutesHelpers options.each { |k,v| send("#{k}=", v) } end end diff --git a/actionmailer/lib/action_mailer/railties/routes_helpers.rb b/actionmailer/lib/action_mailer/railties/routes_helpers.rb new file mode 100644 index 0000000000..3464ec38e2 --- /dev/null +++ b/actionmailer/lib/action_mailer/railties/routes_helpers.rb @@ -0,0 +1,12 @@ +module ActionMailer + module Railties + module RoutesHelpers + def inherited(klass) + super(klass) + if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } + klass.send(:include, namespace._railtie.routes.url_helpers) + end + end + end + end +end -- cgit v1.2.3 From 32baa278925c53f8885e94ea1f3d7c228d42c75f Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 2 Aug 2010 16:04:39 +0200 Subject: Include routes helpers only for inherited classes in ActionMailer --- actionmailer/lib/action_mailer/base.rb | 30 +++++--------- actionmailer/lib/action_mailer/hide_actions.rb | 46 ++++++++++++++++++++++ actionmailer/lib/action_mailer/railtie.rb | 3 +- .../lib/action_mailer/railties/routes_helpers.rb | 14 +++++-- 4 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 actionmailer/lib/action_mailer/hide_actions.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 31e1b26afd..d1fb446366 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -5,6 +5,7 @@ require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/object/blank' require 'active_support/core_ext/proc' require 'action_mailer/log_subscriber' +require 'action_mailer/hide_actions' module ActionMailer #:nodoc: # Action Mailer allows you to send email from your application using a mailer model and views. @@ -346,6 +347,7 @@ module ActionMailer #:nodoc: helper ActionMailer::MailHelper include ActionMailer::OldApi + include ActionMailer::HideActions delegate :register_observer, :to => Mail delegate :register_interceptor, :to => Mail @@ -361,6 +363,11 @@ module ActionMailer #:nodoc: }.freeze class << self + def inherited(klass) + klass.with_hiding_actions do + super(klass) + end + end def mailer_name @mailer_name ||= name.underscore @@ -725,27 +732,8 @@ module ActionMailer #:nodoc: container.add_part(part) end - module DeprecatedUrlOptions - def default_url_options - deprecated_url_options - end - - def default_url_options=(val) - deprecated_url_options - end - - def deprecated_url_options - raise "You can no longer call ActionMailer::Base.default_url_options " \ - "directly. You need to set config.action_mailer.default_url_options. " \ - "If you are using ActionMailer standalone, you need to include the " \ - "routing url_helpers directly." - end - end - - # This module will complain if the user tries to set default_url_options - # directly instead of through the config object. In Action Mailer's Railtie, - # we include the router's url_helpers, which will override this module. - extend DeprecatedUrlOptions + class_attribute :default_url_options + self.default_url_options = {} ActiveSupport.run_load_hooks(:action_mailer, self) end diff --git a/actionmailer/lib/action_mailer/hide_actions.rb b/actionmailer/lib/action_mailer/hide_actions.rb new file mode 100644 index 0000000000..876da95c3a --- /dev/null +++ b/actionmailer/lib/action_mailer/hide_actions.rb @@ -0,0 +1,46 @@ +require 'active_support/core_ext/class/attribute' + +module ActionMailer + # ActionController::HideActions adds the ability to prevent public methods on a controller + # to be called as actions. + module HideActions + extend ActiveSupport::Concern + + included do + class_attribute :hidden_actions + self.hidden_actions = Set.new.freeze + end + + private + + module ClassMethods + # Sets all of the actions passed in as hidden actions. + # + # ==== Parameters + # *args<#to_s>:: A list of actions + def hide_action(*args) + self.hidden_actions = hidden_actions.dup.merge(args.map(&:to_s)).freeze + end + + # Run block and add all the new action_methods to hidden_actions. + # This is used in inherited method. + def with_hiding_actions + yield + clear_action_methods! + hide_action(*action_methods) + clear_action_methods! + end + + def clear_action_methods! + @action_methods = nil + end + + # Overrides AbstractController::Base#action_methods to remove any methods + # that are listed as hidden methods. + def action_methods + @action_methods ||= super.reject { |name| hidden_actions.include?(name) } + end + end + end +end + diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index 26fe125fd8..ec0aa5f2e6 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -19,9 +19,8 @@ module ActionMailer options.stylesheets_dir ||= paths.public.stylesheets.to_a.first ActiveSupport.on_load(:action_mailer) do - include app.routes.url_helpers + extend ::ActionMailer::Railties::RoutesHelpers.with(app.routes) include app.routes.mounted_helpers(:app) - extend ::ActionMailer::Railties::RoutesHelpers options.each { |k,v| send("#{k}=", v) } end end diff --git a/actionmailer/lib/action_mailer/railties/routes_helpers.rb b/actionmailer/lib/action_mailer/railties/routes_helpers.rb index 3464ec38e2..b16d581fc6 100644 --- a/actionmailer/lib/action_mailer/railties/routes_helpers.rb +++ b/actionmailer/lib/action_mailer/railties/routes_helpers.rb @@ -1,10 +1,16 @@ module ActionMailer module Railties module RoutesHelpers - def inherited(klass) - super(klass) - if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } - klass.send(:include, namespace._railtie.routes.url_helpers) + def self.with(routes) + Module.new do + define_method(:inherited) do |klass| + super(klass) + if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } + klass.send(:include, namespace._railtie.routes.url_helpers) + else + klass.send(:include, routes.url_helpers) + end + end end end end -- cgit v1.2.3 From 4131a2d804c54960ac70984e7453069fe8688365 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 2 Aug 2010 17:38:44 +0200 Subject: Move ActionController::Railties::RoutesHelpers and ActionMailer::Railties::RoutesHelper to AbstractController::Railties::RoutesHelpers --- actionmailer/lib/action_mailer/railtie.rb | 4 ++-- .../lib/action_mailer/railties/routes_helpers.rb | 18 ------------------ 2 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 actionmailer/lib/action_mailer/railties/routes_helpers.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index ec0aa5f2e6..9468fd03e2 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -1,6 +1,6 @@ require "action_mailer" require "rails" -require "action_mailer/railties/routes_helpers" +require "abstract_controller/railties/routes_helpers" module ActionMailer class Railtie < Rails::Railtie @@ -19,7 +19,7 @@ module ActionMailer options.stylesheets_dir ||= paths.public.stylesheets.to_a.first ActiveSupport.on_load(:action_mailer) do - extend ::ActionMailer::Railties::RoutesHelpers.with(app.routes) + extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) include app.routes.mounted_helpers(:app) options.each { |k,v| send("#{k}=", v) } end diff --git a/actionmailer/lib/action_mailer/railties/routes_helpers.rb b/actionmailer/lib/action_mailer/railties/routes_helpers.rb deleted file mode 100644 index b16d581fc6..0000000000 --- a/actionmailer/lib/action_mailer/railties/routes_helpers.rb +++ /dev/null @@ -1,18 +0,0 @@ -module ActionMailer - module Railties - module RoutesHelpers - def self.with(routes) - Module.new do - define_method(:inherited) do |klass| - super(klass) - if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } - klass.send(:include, namespace._railtie.routes.url_helpers) - else - klass.send(:include, routes.url_helpers) - end - end - end - end - end - end -end -- cgit v1.2.3 From 79bd92b7833d52b74f50259cf8a21f9b05f3e9e3 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 3 Aug 2010 19:36:53 +0200 Subject: Refactor ActionMailer to not use hide_actions --- actionmailer/lib/action_mailer/base.rb | 11 ++---- actionmailer/lib/action_mailer/hide_actions.rb | 46 -------------------------- 2 files changed, 3 insertions(+), 54 deletions(-) delete mode 100644 actionmailer/lib/action_mailer/hide_actions.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index d1fb446366..f7acb36341 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -5,7 +5,6 @@ require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/object/blank' require 'active_support/core_ext/proc' require 'action_mailer/log_subscriber' -require 'action_mailer/hide_actions' module ActionMailer #:nodoc: # Action Mailer allows you to send email from your application using a mailer model and views. @@ -341,13 +340,13 @@ module ActionMailer #:nodoc: include AbstractController::Helpers include AbstractController::Translation include AbstractController::AssetPaths + include AbstractController::UrlFor cattr_reader :protected_instance_variables @@protected_instance_variables = [] helper ActionMailer::MailHelper include ActionMailer::OldApi - include ActionMailer::HideActions delegate :register_observer, :to => Mail delegate :register_interceptor, :to => Mail @@ -364,9 +363,8 @@ module ActionMailer #:nodoc: class << self def inherited(klass) - klass.with_hiding_actions do - super(klass) - end + super(klass) + klass.class_eval { @action_methods = nil } end def mailer_name @@ -732,9 +730,6 @@ module ActionMailer #:nodoc: container.add_part(part) end - class_attribute :default_url_options - self.default_url_options = {} - ActiveSupport.run_load_hooks(:action_mailer, self) end end diff --git a/actionmailer/lib/action_mailer/hide_actions.rb b/actionmailer/lib/action_mailer/hide_actions.rb deleted file mode 100644 index 876da95c3a..0000000000 --- a/actionmailer/lib/action_mailer/hide_actions.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'active_support/core_ext/class/attribute' - -module ActionMailer - # ActionController::HideActions adds the ability to prevent public methods on a controller - # to be called as actions. - module HideActions - extend ActiveSupport::Concern - - included do - class_attribute :hidden_actions - self.hidden_actions = Set.new.freeze - end - - private - - module ClassMethods - # Sets all of the actions passed in as hidden actions. - # - # ==== Parameters - # *args<#to_s>:: A list of actions - def hide_action(*args) - self.hidden_actions = hidden_actions.dup.merge(args.map(&:to_s)).freeze - end - - # Run block and add all the new action_methods to hidden_actions. - # This is used in inherited method. - def with_hiding_actions - yield - clear_action_methods! - hide_action(*action_methods) - clear_action_methods! - end - - def clear_action_methods! - @action_methods = nil - end - - # Overrides AbstractController::Base#action_methods to remove any methods - # that are listed as hidden methods. - def action_methods - @action_methods ||= super.reject { |name| hidden_actions.include?(name) } - end - end - end -end - -- cgit v1.2.3 From 56ef192374f7dc5b21120bbe94cacf852b33be54 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Aug 2010 17:15:34 +0200 Subject: ActionMailer should not depend on ActionDispatch --- actionmailer/lib/action_mailer/base.rb | 3 +-- actionmailer/lib/action_mailer/railtie.rb | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index f7acb36341..b70121d544 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -340,7 +340,6 @@ module ActionMailer #:nodoc: include AbstractController::Helpers include AbstractController::Translation include AbstractController::AssetPaths - include AbstractController::UrlFor cattr_reader :protected_instance_variables @@protected_instance_variables = [] @@ -364,7 +363,7 @@ module ActionMailer #:nodoc: class << self def inherited(klass) super(klass) - klass.class_eval { @action_methods = nil } + klass.clear_action_methods! end def mailer_name diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index 9468fd03e2..a2b00addc9 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -19,6 +19,7 @@ module ActionMailer options.stylesheets_dir ||= paths.public.stylesheets.to_a.first ActiveSupport.on_load(:action_mailer) do + include AbstractController::UrlFor extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) include app.routes.mounted_helpers(:app) options.each { |k,v| send("#{k}=", v) } -- cgit v1.2.3 From d81267727770198f4aa0cefede042c8d0c638c59 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Aug 2010 20:25:21 +0200 Subject: We don't need to clear action_methods on inherited hook as they are cleaned on method_added hook --- actionmailer/lib/action_mailer/base.rb | 5 ----- 1 file changed, 5 deletions(-) (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index b70121d544..6ae3940e6d 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -361,11 +361,6 @@ module ActionMailer #:nodoc: }.freeze class << self - def inherited(klass) - super(klass) - klass.clear_action_methods! - end - def mailer_name @mailer_name ||= name.underscore end -- cgit v1.2.3 From e5af8b7d85abb94f21f4e873c1c267e27be2aad8 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Fri, 6 Aug 2010 16:34:48 +0200 Subject: Moved ActionMailer and ActionController railties options to inherited hook This change is needed, because we must take namespace into account and if controller's/mailer's class is namespaced, engine's paths should be set instead of application's ones. The nice side effect of this is removing unneeded logic in ActionController::Base.inherited - now the helpers_path should be set correctly even for engine's controllers, so helper(:all) will always include correct helpers. --- actionmailer/lib/action_mailer/railtie.rb | 9 +++----- actionmailer/lib/action_mailer/railties/paths.rb | 26 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 actionmailer/lib/action_mailer/railties/paths.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index a2b00addc9..3c1f045e79 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -1,6 +1,7 @@ require "action_mailer" require "rails" require "abstract_controller/railties/routes_helpers" +require "action_mailer/railties/paths" module ActionMailer class Railtie < Rails::Railtie @@ -11,17 +12,13 @@ module ActionMailer end initializer "action_mailer.set_configs" do |app| - paths = app.config.paths options = app.config.action_mailer - options.assets_dir ||= paths.public.to_a.first - options.javascripts_dir ||= paths.public.javascripts.to_a.first - options.stylesheets_dir ||= paths.public.stylesheets.to_a.first - ActiveSupport.on_load(:action_mailer) do include AbstractController::UrlFor - extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) include app.routes.mounted_helpers(:app) + extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) + extend ::ActionMailer::Railties::Paths.with(app) options.each { |k,v| send("#{k}=", v) } end end diff --git a/actionmailer/lib/action_mailer/railties/paths.rb b/actionmailer/lib/action_mailer/railties/paths.rb new file mode 100644 index 0000000000..fa9188be77 --- /dev/null +++ b/actionmailer/lib/action_mailer/railties/paths.rb @@ -0,0 +1,26 @@ +module ActionMailer + module Railties + module Paths + def self.with(_app) + Module.new do + define_method(:inherited) do |klass| + super(klass) + if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } + app = namespace._railtie + else + app = _app + end + + paths = app.config.paths + options = app.config.action_mailer + + options.assets_dir ||= paths.public.to_a.first + options.javascripts_dir ||= paths.public.javascripts.to_a.first + options.stylesheets_dir ||= paths.public.stylesheets.to_a.first + options.each { |k,v| klass.send("#{k}=", v) } + end + end + end + end + end +end -- cgit v1.2.3 From 98ab4ded376c3d04540bdbdfe6dbbf88c0738701 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 23 Aug 2010 18:31:29 +0200 Subject: Set only helpers_path on inherited hook in action_controller/railtie.rb and use helper(:all) just after that --- actionmailer/lib/action_mailer/railtie.rb | 9 +++++--- actionmailer/lib/action_mailer/railties/paths.rb | 26 ------------------------ 2 files changed, 6 insertions(+), 29 deletions(-) delete mode 100644 actionmailer/lib/action_mailer/railties/paths.rb (limited to 'actionmailer/lib/action_mailer') diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb index 3c1f045e79..a2b00addc9 100644 --- a/actionmailer/lib/action_mailer/railtie.rb +++ b/actionmailer/lib/action_mailer/railtie.rb @@ -1,7 +1,6 @@ require "action_mailer" require "rails" require "abstract_controller/railties/routes_helpers" -require "action_mailer/railties/paths" module ActionMailer class Railtie < Rails::Railtie @@ -12,13 +11,17 @@ module ActionMailer end initializer "action_mailer.set_configs" do |app| + paths = app.config.paths options = app.config.action_mailer + options.assets_dir ||= paths.public.to_a.first + options.javascripts_dir ||= paths.public.javascripts.to_a.first + options.stylesheets_dir ||= paths.public.stylesheets.to_a.first + ActiveSupport.on_load(:action_mailer) do include AbstractController::UrlFor - include app.routes.mounted_helpers(:app) extend ::AbstractController::Railties::RoutesHelpers.with(app.routes) - extend ::ActionMailer::Railties::Paths.with(app) + include app.routes.mounted_helpers(:app) options.each { |k,v| send("#{k}=", v) } end end diff --git a/actionmailer/lib/action_mailer/railties/paths.rb b/actionmailer/lib/action_mailer/railties/paths.rb deleted file mode 100644 index fa9188be77..0000000000 --- a/actionmailer/lib/action_mailer/railties/paths.rb +++ /dev/null @@ -1,26 +0,0 @@ -module ActionMailer - module Railties - module Paths - def self.with(_app) - Module.new do - define_method(:inherited) do |klass| - super(klass) - if namespace = klass.parents.detect {|m| m.respond_to?(:_railtie) } - app = namespace._railtie - else - app = _app - end - - paths = app.config.paths - options = app.config.action_mailer - - options.assets_dir ||= paths.public.to_a.first - options.javascripts_dir ||= paths.public.javascripts.to_a.first - options.stylesheets_dir ||= paths.public.stylesheets.to_a.first - options.each { |k,v| klass.send("#{k}=", v) } - end - end - end - end - end -end -- cgit v1.2.3