mirror of https://github.com/rails/rails
Refactor ActionMailer to not use hide_actions
This commit is contained in:
parent
4131a2d804
commit
79bd92b783
|
@ -26,6 +26,7 @@ $:.unshift(actionpack_path) if File.directory?(actionpack_path) && !$:.include?(
|
||||||
|
|
||||||
require 'abstract_controller'
|
require 'abstract_controller'
|
||||||
require 'action_view'
|
require 'action_view'
|
||||||
|
require 'action_dispatch'
|
||||||
|
|
||||||
# Common Active Support usage in Action Mailer
|
# Common Active Support usage in Action Mailer
|
||||||
require 'active_support/core_ext/class'
|
require 'active_support/core_ext/class'
|
||||||
|
|
|
@ -5,7 +5,6 @@ require 'active_support/core_ext/array/wrap'
|
||||||
require 'active_support/core_ext/object/blank'
|
require 'active_support/core_ext/object/blank'
|
||||||
require 'active_support/core_ext/proc'
|
require 'active_support/core_ext/proc'
|
||||||
require 'action_mailer/log_subscriber'
|
require 'action_mailer/log_subscriber'
|
||||||
require 'action_mailer/hide_actions'
|
|
||||||
|
|
||||||
module ActionMailer #:nodoc:
|
module ActionMailer #:nodoc:
|
||||||
# Action Mailer allows you to send email from your application using a mailer model and views.
|
# 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::Helpers
|
||||||
include AbstractController::Translation
|
include AbstractController::Translation
|
||||||
include AbstractController::AssetPaths
|
include AbstractController::AssetPaths
|
||||||
|
include AbstractController::UrlFor
|
||||||
|
|
||||||
cattr_reader :protected_instance_variables
|
cattr_reader :protected_instance_variables
|
||||||
@@protected_instance_variables = []
|
@@protected_instance_variables = []
|
||||||
|
|
||||||
helper ActionMailer::MailHelper
|
helper ActionMailer::MailHelper
|
||||||
include ActionMailer::OldApi
|
include ActionMailer::OldApi
|
||||||
include ActionMailer::HideActions
|
|
||||||
|
|
||||||
delegate :register_observer, :to => Mail
|
delegate :register_observer, :to => Mail
|
||||||
delegate :register_interceptor, :to => Mail
|
delegate :register_interceptor, :to => Mail
|
||||||
|
@ -364,9 +363,8 @@ module ActionMailer #:nodoc:
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def inherited(klass)
|
def inherited(klass)
|
||||||
klass.with_hiding_actions do
|
|
||||||
super(klass)
|
super(klass)
|
||||||
end
|
klass.class_eval { @action_methods = nil }
|
||||||
end
|
end
|
||||||
|
|
||||||
def mailer_name
|
def mailer_name
|
||||||
|
@ -732,9 +730,6 @@ module ActionMailer #:nodoc:
|
||||||
container.add_part(part)
|
container.add_part(part)
|
||||||
end
|
end
|
||||||
|
|
||||||
class_attribute :default_url_options
|
|
||||||
self.default_url_options = {}
|
|
||||||
|
|
||||||
ActiveSupport.run_load_hooks(:action_mailer, self)
|
ActiveSupport.run_load_hooks(:action_mailer, self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -24,4 +24,5 @@ module AbstractController
|
||||||
autoload :Translation
|
autoload :Translation
|
||||||
autoload :AssetPaths
|
autoload :AssetPaths
|
||||||
autoload :ViewPaths
|
autoload :ViewPaths
|
||||||
|
autoload :UrlFor
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
module AbstractController
|
||||||
|
module UrlFor
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
include ActionDispatch::Routing::UrlFor
|
||||||
|
|
||||||
|
def _routes
|
||||||
|
raise "In order to use #url_for, you must include routing helpers explicitly. " \
|
||||||
|
"For instance, `include Rails.application.routes.url_helpers"
|
||||||
|
end
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
def _routes
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def action_methods
|
||||||
|
@action_methods ||= begin
|
||||||
|
if _routes
|
||||||
|
super - _routes.named_routes.helper_names
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,7 +2,7 @@ module ActionController
|
||||||
module UrlFor
|
module UrlFor
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
include ActionDispatch::Routing::UrlFor
|
include AbstractController::UrlFor
|
||||||
|
|
||||||
def url_options
|
def url_options
|
||||||
options = {}
|
options = {}
|
||||||
|
@ -16,18 +16,5 @@ module ActionController
|
||||||
:_path_segments => request.symbolized_path_parameters
|
:_path_segments => request.symbolized_path_parameters
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def _routes
|
|
||||||
raise "In order to use #url_for, you must include routing helpers explicitly. " \
|
|
||||||
"For instance, `include Rails.application.routes.url_helpers"
|
|
||||||
end
|
|
||||||
|
|
||||||
module ClassMethods
|
|
||||||
def action_methods
|
|
||||||
@action_methods ||= begin
|
|
||||||
super - _routes.named_routes.helper_names
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -337,7 +337,12 @@ module ActionDispatch
|
||||||
# Yes plz - JP
|
# Yes plz - JP
|
||||||
included do
|
included do
|
||||||
routes.install_helpers(self)
|
routes.install_helpers(self)
|
||||||
singleton_class.send(:define_method, :_routes) { @_routes || routes }
|
singleton_class.send(:define_method, :_routes) { routes }
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(*)
|
||||||
|
@_routes = nil
|
||||||
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method(:_routes) { @_routes || routes }
|
define_method(:_routes) { @_routes || routes }
|
||||||
|
|
Loading…
Reference in New Issue