Class: ExpressAdmin::Commandable
- Inherits:
-
Object
- Object
- ExpressAdmin::Commandable
- Defined in:
- lib/express_admin/commandable.rb
Instance Method Summary collapse
- #call(mapper, options = {}) ⇒ Object
-
#initialize(defaults = {}) ⇒ Commandable
constructor
A new instance of Commandable.
Constructor Details
#initialize(defaults = {}) ⇒ Commandable
Returns a new instance of Commandable.
3 4 5 |
# File 'lib/express_admin/commandable.rb', line 3 def initialize(defaults = {}) @defaults = defaults end |
Instance Method Details
#call(mapper, options = {}) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/express_admin/commandable.rb', line 7 def call(mapper, = {}) = @defaults.merge() 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 |