class AdminIt::Resource

Constants

COLLECTIONS
CONTEXTS
SINGLE

Attributes

entity_class[R]
menu[R]
name[R]
plural[R]

Public Class Methods

new( name, entity_class = nil, menu: true, destroyable: true, auto_filters: true ) click to toggle source
# File lib/admin_it/resource.rb, line 72
def initialize(
  name,
  entity_class = nil,
  menu: true,
  destroyable: true,
  auto_filters: true
)
  name = name.ensure_symbol!
  @name, @entity_class = name, entity_class
  if @entity_class.nil?
    begin
      @entity_class = Object.const_get(name.to_s.camelize) # !PORTABLE
    rescue NameError
      raise ArgumentError, "Can't find entity class for #{name}"
    end
  end

  import_data_module

  run_callbacks :initialize do
    @fields = Hash[default_fields.map { |f| [f.field_name, f] }]

    @filters =
      if auto_filters
        Hash[default_filters.map { |f| [f.filter_name, f] }]
      else
        {}
      end

    @contexts = Hash[default_contexts.map { |c| [c.context_name, c] }]

    @menu = menu == true
    @destroyable = destroyable == true
    @plural = name.to_s.pluralize # !POTABLE
    @default_context = nil
  end
end

Public Instance Methods

[](name) click to toggle source
# File lib/admin_it/resource.rb, line 118
def [](name)
  context(name)
end
collection(&block) click to toggle source
# File lib/admin_it/resource.rb, line 33
def collection(&block)
  return unless block_given?
  hash = dsl_get(:contexts, {})
  hash.select { |_, c| c.collection? }.each { |_, c| c.dsl_eval(&block) }
end
collection_path() click to toggle source
# File lib/admin_it/resource.rb, line 147
def collection_path
  AdminIt::Engine.routes.url_helpers.send("#{plural}_path")
end
collections() click to toggle source
# File lib/admin_it/resource.rb, line 155
def collections
  contexts.select { |c| c.collection? }
end
confirm_destroy?() click to toggle source
# File lib/admin_it/resource.rb, line 110
def confirm_destroy?
  @confirm_destroy.nil? ? @confirm_destroy = true : @confirm_destroy == true
end
context(name) click to toggle source
# File lib/admin_it/resource.rb, line 122
def context(name)
  @contexts[name.ensure_symbol]
end
contexts() click to toggle source
# File lib/admin_it/resource.rb, line 126
def contexts
  @contexts.values
end
contexts_names() click to toggle source
# File lib/admin_it/resource.rb, line 139
def contexts_names
  @contexts.map(&:context_name)
end
default_context(value = nil) click to toggle source
# File lib/admin_it/resource.rb, line 130
def default_context(value = nil)
  return @default_context unless @default_context.nil?
  if collections.size > 0
    @default_context = collections.first.context_name
  elsif singles.size > 0
    @default_context = singles.first.context_name
  end
end
define_controller() click to toggle source
# File lib/admin_it/resource.rb, line 163
def define_controller
  c_name = "#{name.to_s.camelize}Controller" # !PORTABLE
  resource = self
  c_class = Class.new(AdminIt.config.controller) do
    @resource = resource
    include AdminIt::Controller

    resource.contexts.each do |_context|
      define_method(_context.context_name) { load_context(_context) }

      if _context < SavableSingleContext
        define_method _context.save_action do
          load_context(_context) { context.save_entity }
        end
      end
    end

    if resource.destroyable?
      define_method :destroy do
        load_context(resource[:show]) { context.destroy_entity }
      end
    end
  end
  AdminIt.const_set(c_name, c_class)
  contexts.each { |c| c.controller_class = c_class }
end
destroyable?() click to toggle source
# File lib/admin_it/resource.rb, line 114
def destroyable?
  @destroyable.nil? ? @destroyable = true : @destroyable == true
end
display_name() click to toggle source
# File lib/admin_it/resource.rb, line 143
def display_name
  @display_name ||= i18n_display_name || default_display_name
end
single(&block) click to toggle source
# File lib/admin_it/resource.rb, line 39
def single(&block)
  return unless block_given?
  hash = dsl_get(:contexts, {})
  hash.select { |_, c| c.single? }.each { |_, c| c.dsl_eval(&block) }
end
single_path(entity) click to toggle source
# File lib/admin_it/resource.rb, line 151
def single_path(entity)
  AdminIt::Engine.routes.url_helpers.send("#{name}_path", entity)
end
singles() click to toggle source
# File lib/admin_it/resource.rb, line 159
def singles
  contexts.select { |c| c.single? }
end

Protected Instance Methods

i18n_display_name() click to toggle source
# File lib/admin_it/resource.rb, line 213
def i18n_display_name
  I18n
    .t!("admin_it.resources.#{name}.display_name.plural")
    .split(' ')
    .map { |s| s.mb_chars.capitalize }
    .join(' ')
rescue I18n::MissingTranslationData
  nil
end
sanitize_entity_class() click to toggle source
# File lib/admin_it/resource.rb, line 196
def sanitize_entity_class
  @entity_class = @name.to_s.camelize if @entity_class.nil? # !PORTABLE
  if @entity_class.is_a?(Symbol)
    @entity_class = @entity_class.to_s.camelize # !PORTABLE
  end
  if @entity_class.is_a?(String)
    begin
      @entity_class = Object.const_get(@entity_class)
    rescue NameError
      @entity_class = Object
    end
  end
  unless @entity_class.is_a?(Class)
    fail ArgumentError, 'Wrong entity class'
  end
end

Private Instance Methods

import_data_module() click to toggle source
# File lib/admin_it/resource.rb, line 225
def import_data_module
  data_module = AdminIt.data_module(entity_class)
  return unless data_module.is_a?(Module)
  resource_module = data_module.const_get(:Resource)
  extend(resource_module) if resource_module.is_a?(Module)
rescue NameError
  nil
end