1 2 3 4 5 6 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
module RailsAdmin
module Config
module Actions
class << self
def all(scope = nil, bindings = {})
if scope.is_a?(Hash)
bindings = scope
scope = :all
end
scope ||= :all
init_actions!
actions = begin
case scope
when :all
@@actions
when :root
@@actions.select(&:root?)
when :collection
@@actions.select(&:collection?)
when :bulkable
@@actions.select(&:bulkable?)
when :member
@@actions.select(&:member?)
end
end
actions = actions.collect { |action| action.with(bindings) }
bindings[:controller] ? actions.select(&:visible?) : actions
end
def find(custom_key, bindings = {})
init_actions!
action = @@actions.detect { |a| a.custom_key == custom_key }.try(:with, bindings)
bindings[:controller] ? (action.try(:visible?) && action || nil) : action
end
def collection(key, parent_class = :base, &block)
add_action key, parent_class, :collection, &block
end
def member(key, parent_class = :base, &block)
add_action key, parent_class, :member, &block
end
def root(key, parent_class = :base, &block)
add_action key, parent_class, :root, &block
end
def add_action(key, parent_class, parent, &block)
a = "RailsAdmin::Config::Actions::#{parent_class.to_s.camelize}".constantize.new
a.instance_eval(%(
#{parent} true
def key
:#{key}
end
))
add_action_custom_key(a, &block)
end
def reset
@@actions = nil
end
def register(name, klass = nil)
if klass.nil? && name.is_a?(Class)
klass = name
name = klass.to_s.demodulize.underscore.to_sym
end
instance_eval %{
def #{name}(&block)
action = #{klass}.new
add_action_custom_key(action, &block)
end
}
end
private
def init_actions!
@@actions ||= [
Dashboard.new,
Index.new,
Show.new,
New.new,
Edit.new,
Export.new,
Delete.new,
BulkDelete.new,
HistoryShow.new,
HistoryIndex.new,
ShowInApp.new,
]
end
def add_action_custom_key(action, &block)
action.instance_eval(&block) if block
@@actions ||= []
if action.custom_key.in?(@@actions.collect(&:custom_key))
fail "Action #{action.custom_key} already exists. Please change its custom key."
else
@@actions << action
end
end
end
end
end
end
require 'rails_admin/config/actions/base'
require 'rails_admin/config/actions/dashboard'
require 'rails_admin/config/actions/index'
require 'rails_admin/config/actions/show'
require 'rails_admin/config/actions/show_in_app'
require 'rails_admin/config/actions/history_show'
require 'rails_admin/config/actions/history_index'
require 'rails_admin/config/actions/new'
require 'rails_admin/config/actions/edit'
require 'rails_admin/config/actions/export'
require 'rails_admin/config/actions/delete'
require 'rails_admin/config/actions/bulk_delete'
|