class ExpressAdmin::Commandable
Public Class Methods
new(defaults = {})
click to toggle source
# File lib/express_admin/commandable.rb, line 3 def initialize(defaults = {}) @defaults = defaults end
Public Instance Methods
call(mapper, options = {})
click to toggle source
# File lib/express_admin/commandable.rb, line 7 def call(mapper, options = {}) options = @defaults.merge(options) modules = [] # this is a big hack to reconstruct the module path for the # controller from the scope context. I wish rails provided # a nice way to get in there and do this but I do not see it # yet... probably because rails does not instantiate require # controllers to exist for the route map to be constructed controller_name = mapper.send(:parent_resource).controller scope = mapper.instance_variable_get(:@scope) while scope.respond_to?(:parent) && scope = scope.parent possible_module = scope.instance_variable_get(:@hash)[:module] break if possible_module.nil? modules << possible_module end modules.compact! modules << controller_name controller_class = nil begin controller_class = "#{modules.join("/").classify.pluralize}Controller".constantize rescue NameError => e # if plural fails, use singular begin controller_class = "#{modules.join("/").classify}Controller".constantize rescue NameError => e2 # if we get here, the first exception wasn't what we thought # it was something else and we should politely let the developer know raise e end end if controller_class.respond_to?(:resource_class) resource_class = controller_class.resource_class if resource_class.respond_to?(:commands) resource_class.commands.each do |action| # post :foo, to: "module/controller#foo" mapper.member do mapper.post action[:name].debang, to: "#{controller_name}##{action[:name].debang}" end end end end end