Class: AbAdmin::AbstractResource

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/ab_admin/abstract_resource.rb

Constant Summary collapse

ACTIONS =
[:index, :show, :new, :edit, :create, :update, :destroy, :preview, :batch, :rebuild, :custom_action]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAbstractResource

Returns a new instance of AbstractResource.



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/ab_admin/abstract_resource.rb', line 13

def initialize
  @actions = ACTIONS
  @batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :confirm => I18n.t('admin.delete_confirmation'))]
  @action_items = []
  @disabled_action_items = []
  @default_action_items_for = {}
  @action_items_for = {}
  @parent_resources = []
  @custom_actions = []
  @model = self.class.name.sub('AbAdmin', '').safe_constantize
  add_admin_addition_to_model
end

Instance Attribute Details

#action_itemsObject

Returns the value of attribute action_items.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def action_items
  @action_items
end

#actionsObject

Returns the value of attribute actions.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def actions
  @actions
end

#batch_action_listObject

Returns the value of attribute batch_action_list.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def batch_action_list
  @batch_action_list
end

#custom_actionsObject

Returns the value of attribute custom_actions.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def custom_actions
  @custom_actions
end

#custom_settingsObject

Returns the value of attribute custom_settings.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def custom_settings
  @custom_settings
end

#disabled_action_itemsObject

Returns the value of attribute disabled_action_items.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def disabled_action_items
  @disabled_action_items
end

#exportObject

Returns the value of attribute export.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def export
  @export
end

#formObject

Returns the value of attribute form.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def form
  @form
end

#parent_resourcesObject

Returns the value of attribute parent_resources.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def parent_resources
  @parent_resources
end

#preview_pathObject

Returns the value of attribute preview_path.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def preview_path
  @preview_path
end

#resource_action_itemsObject

Returns the value of attribute resource_action_items.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def resource_action_items
  @resource_action_items
end

#searchObject

Returns the value of attribute search.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def search
  @search
end

#settingsObject

Returns the value of attribute settings.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def settings
  @settings
end

#showObject

Returns the value of attribute show.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def show
  @show
end

#tableObject

Returns the value of attribute table.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def table
  @table
end

#tree_node_rendererObject

Returns the value of attribute tree_node_renderer.



9
10
11
# File 'lib/ab_admin/abstract_resource.rb', line 9

def tree_node_renderer
  @tree_node_renderer
end

Class Method Details

.action_item(*args, &block) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/ab_admin/abstract_resource.rb', line 79

def action_item(*args, &block)
  options = args.extract_options!
  if block_given?
    instance.action_items << AbAdmin::Config::ActionItem.new(options, &block)
  elsif args[1].is_a?(FalseClass)
    instance.disabled_action_items << args[0]
  end
end

.actions(*actions_to_keep) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/ab_admin/abstract_resource.rb', line 56

def actions(*actions_to_keep)
  instance.actions = begin
    options = actions_to_keep.extract_options!
    if options[:except]
      ACTIONS - Array(options[:except]).map(&:to_sym)
    else
      actions_to_keep
    end << :custom_action
  end.map(&:to_sym)
end

.batch_action(name, options = {}, &block) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/ab_admin/abstract_resource.rb', line 71

def batch_action(name, options={}, &block)
  if !options
    instance.batch_action_list.reject!{|a| a.name == name }
  else
    instance.batch_action_list << AbAdmin::Config::BatchAction.new(name, options, &block)
  end
end

.belongs_to(*args) ⇒ Object



100
101
102
103
104
105
# File 'lib/ab_admin/abstract_resource.rb', line 100

def belongs_to(*args)
  options = args.extract_options!
  args.each do |name|
    instance.parent_resources << OpenStruct.new(:name => name, :options => options)
  end
end

.collection_action(name, options = {}, &block) ⇒ Object



111
112
113
# File 'lib/ab_admin/abstract_resource.rb', line 111

def collection_action(name, options={}, &block)
  instance.custom_actions << AbAdmin::Config::CustomAction.new(name, options.merge(:collection => true), &block)
end

.export(options = {}, &block) ⇒ Object



40
41
42
# File 'lib/ab_admin/abstract_resource.rb', line 40

def export(options={}, &block)
  instance.export = ::AbAdmin::Config::Export.new(options, &block)
end

.form(options = {}, &block) ⇒ Object



44
45
46
# File 'lib/ab_admin/abstract_resource.rb', line 44

def form(options={}, &block)
  instance.form = ::AbAdmin::Config::Form.new(options, &block)
end

.member_action(name, options = {}, &block) ⇒ Object



107
108
109
# File 'lib/ab_admin/abstract_resource.rb', line 107

def member_action(name, options={}, &block)
  instance.custom_actions << AbAdmin::Config::CustomAction.new(name, options, &block)
end

.preview_path(value = nil, &block) ⇒ Object



52
53
54
# File 'lib/ab_admin/abstract_resource.rb', line 52

def preview_path(value=nil, &block)
  instance.preview_path = block_given? ? block : value
end

.resource_action_item(options = {}, &block) ⇒ Object



92
93
94
# File 'lib/ab_admin/abstract_resource.rb', line 92

def resource_action_item(options={}, &block)
  instance.resource_action_items << AbAdmin::Config::ActionItem.new(options, &block)
end

.resource_action_items(*actions) ⇒ Object



88
89
90
# File 'lib/ab_admin/abstract_resource.rb', line 88

def resource_action_items(*actions)
  instance.resource_action_items = actions + instance.resource_action_items.find_all { |a| a.is_a?(AbAdmin::Config::ActionItem) }
end

.search(options = {}, &block) ⇒ Object



36
37
38
# File 'lib/ab_admin/abstract_resource.rb', line 36

def search(options={}, &block)
  instance.search = AbAdmin::Config::Search.new(options, &block)
end

.settings(value) ⇒ Object



67
68
69
# File 'lib/ab_admin/abstract_resource.rb', line 67

def settings(value)
  instance.custom_settings = value
end

.show(options = {}, &block) ⇒ Object



48
49
50
# File 'lib/ab_admin/abstract_resource.rb', line 48

def show(options={}, &block)
  instance.show = ::AbAdmin::Config::Show.new(options, &block)
end

.table(options = {}, &block) ⇒ Object



32
33
34
# File 'lib/ab_admin/abstract_resource.rb', line 32

def table(options={}, &block)
  instance.table = AbAdmin::Config::Table.new(options, &block)
end

.tree(&block) ⇒ Object



96
97
98
# File 'lib/ab_admin/abstract_resource.rb', line 96

def tree(&block)
  instance.tree_node_renderer = block
end

Instance Method Details

#action_items_for(action) ⇒ Object



125
126
127
# File 'lib/ab_admin/abstract_resource.rb', line 125

def action_items_for(action)
  @action_items_for[action] ||= action_items.find_all{|i| i.for_action?(action) }
end

#add_admin_addition_to_modelObject



26
27
28
29
# File 'lib/ab_admin/abstract_resource.rb', line 26

def add_admin_addition_to_model
  return unless @model
  @model.send(:include, AbAdmin::Concerns::AdminAddition) unless @model.included_modules.include?(AbAdmin::Concerns::AdminAddition)
end

#allow_action?(action) ⇒ Boolean

Returns:

  • (Boolean)


120
121
122
123
# File 'lib/ab_admin/abstract_resource.rb', line 120

def allow_action?(action)
  return true unless actions
  actions.include?(action.to_sym)
end

#custom_action_for(name, context) ⇒ Object



142
143
144
145
146
# File 'lib/ab_admin/abstract_resource.rb', line 142

def custom_action_for(name, context)
  custom_action = @custom_actions.detect { |a| a.name == name.to_sym }
  raise "No allowed custom action found #{name}" if !custom_action || !custom_action.for_context?(context)
  custom_action
end

#default_action_items_for(action, for_resource) ⇒ Object



129
130
131
132
133
134
135
136
# File 'lib/ab_admin/abstract_resource.rb', line 129

def default_action_items_for(action, for_resource)
  @default_action_items_for[action] ||= begin
    base = [:new]
    base += [:edit, :show, :destroy, :preview] if for_resource
    disabled = action == :new ? [] : [action]
    (base - disabled - @disabled_action_items) & @actions
  end
end