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, :history]

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
25
# File 'lib/ab_admin/abstract_resource.rb', line 13

def initialize
  @actions = ACTIONS
  @custom_settings = {}
  @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

Returns the value of attribute modal_form.



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

def modal_form
  @modal_form
end

#modelObject

Returns the value of attribute model.



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

def model
  @model
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

#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



91
92
93
94
95
96
97
98
# File 'lib/ab_admin/abstract_resource.rb', line 91

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



61
62
63
64
65
66
67
68
69
70
# File 'lib/ab_admin/abstract_resource.rb', line 61

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



83
84
85
86
87
88
89
# File 'lib/ab_admin/abstract_resource.rb', line 83

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

.belongs_to(*args) ⇒ Object



112
113
114
115
116
117
# File 'lib/ab_admin/abstract_resource.rb', line 112

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



123
124
125
# File 'lib/ab_admin/abstract_resource.rb', line 123

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

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



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

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

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



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

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

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



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

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


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

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

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



57
58
59
# File 'lib/ab_admin/abstract_resource.rb', line 57

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

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



104
105
106
# File 'lib/ab_admin/abstract_resource.rb', line 104

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

.resource_action_items(*actions) ⇒ Object



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

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



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

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

.settings(value) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'lib/ab_admin/abstract_resource.rb', line 72

def settings(value)
  instance.custom_settings = value
  if instance.custom_settings[:history]
    instance.custom_settings[:history] = {} unless instance.custom_settings[:history].is_a?(Hash)
    instance.model.send(:include, AbAdmin::Concerns::HasTracking) unless instance.has_module?(AbAdmin::Concerns::HasTracking)
  end
  if instance.custom_settings[:comments]
    instance.custom_settings[:comments] = {} unless instance.custom_settings[:comments].is_a?(Hash)
  end
end

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



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

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

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



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

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

.tree(&block) ⇒ Object



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

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

Instance Method Details

#action_items_for(action) ⇒ Object



137
138
139
# File 'lib/ab_admin/abstract_resource.rb', line 137

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

#add_admin_addition_to_modelObject



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

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

#allow_action?(action) ⇒ Boolean

Returns:

  • (Boolean)


132
133
134
135
# File 'lib/ab_admin/abstract_resource.rb', line 132

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

#custom_action_for(name, context) ⇒ Object



157
158
159
160
161
# File 'lib/ab_admin/abstract_resource.rb', line 157

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



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/ab_admin/abstract_resource.rb', line 141

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

#has_module?(module_constant) ⇒ Boolean

Returns:

  • (Boolean)


163
164
165
# File 'lib/ab_admin/abstract_resource.rb', line 163

def has_module?(module_constant)
  model.included_modules.include?(module_constant)
end