Sha256: e4d2997ce34b03159a722f57125fe60f5bc1bc509dfd8a77a3a7b4c38269ddfb

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module RailsAdmin
  module Config
    module Actions
      class State < Base
        RailsAdmin::Config::Actions.register(self)

        # Is the action acting on the root level (Example: /admin/contact)
        register_instance_option :root? do
          false
        end

        register_instance_option :collection? do
          false
        end

        # Is the action on an object scope (Example: /admin/team/1/edit)
        register_instance_option :member? do
          true
        end

        register_instance_option :controller do
          Proc.new do |klass|
            @state_machine_options = ::RailsAdminState::Configuration.new @abstract_model
            if params['id'].present?
              begin
                raise 'event disabled' if @state_machine_options.disabled?(params[:event].to_sym)
                obj = @abstract_model.model.find(params['id'])
                if obj.send("fire_#{params[:attr]}_event".to_sym, params[:event].to_sym)
                  obj.save!
                  flash[:success] = I18n.t('admin.state_machine.event_fired', attr: params[:method], event: params[:event])
                else
                  flash[:error] = obj.errors.full_messages.join(', ')
                end
              rescue Exception => e
                flash[:error] = I18n.t('admin.state_machine.error', err: e.to_s)
              end
            else
              flash[:error] = I18n.t('admin.state_machine.no_id')
            end
            redirect_to :back
          end
        end

        register_instance_option :http_methods do
          [:post]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_admin_state-1.2.0 lib/rails_admin_state/action.rb