module ExpressAdmin::StandardActions::ClassMethods

Public Instance Methods

infer_resource_class() click to toggle source
# File lib/express_admin/standard_actions.rb, line 49
def infer_resource_class
  klass = nil
  if self.parent
    klass = self.parent.const_get(resource_name.classify) rescue nil
  end
  klass ||= resource_name.classify.constantize rescue nil
  klass
end
inherited(base) click to toggle source
# File lib/express_admin/standard_actions.rb, line 21
      def inherited(base)
        base.class_eval <<-RUBY
          def #{base.resource_name}_params
            params.require(:#{base.resource_name}).permit!
          end
        RUBY

        base.class_eval do

          class_attribute :resource_class
          self.resource_class = infer_resource_class

          if self.resource_class.respond_to?(:commands)
            self.resource_class.commands.each do |command|
              define_command_method(command[:name].debang, command[:name])
            end
          end
        end
      end
manages(a_resource_class) click to toggle source
# File lib/express_admin/standard_actions.rb, line 41
def manages(a_resource_class)
  self.resource_class = a_resource_class
end
resource_name() click to toggle source
# File lib/express_admin/standard_actions.rb, line 45
def resource_name
  self.to_s.demodulize.gsub(/Controller$/, '').singularize.underscore
end

Protected Instance Methods

define_command_method(action, command) click to toggle source
# File lib/express_admin/standard_actions.rb, line 60
def define_command_method(action, command)
  define_method(action) do
    load_resource
    begin
      resource.send(command)
      respond_to do |format|
        format.html { redirect_to action: show_view }
        format.js { render status: :ok, body: nil } # maybe we should return enough info
                                         #to alter display of available or enabled commands?

      end
    rescue => e
      respond_to do |format|
        format.html {
          flash[:error] = e.to_s
          redirect_to action: show_view
        }
        format.js { render status: :bad_request, body: e.to_s }
      end
    end
  end
end