class RailsAdminConfiguratorBase

More at github.com/sferik/rails_admin/wiki/Base-configuration

Attributes

models_order_first[RW]

properties

models_order_last[RW]

Public Class Methods

new() click to toggle source

methods

# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 16
def initialize
  Ability.rails_admin_config = self

  @models_names        = []
  @models_names_sorted = []

  @models_order_first  = []
  @models_order_middle = []
  @models_order_last   = []

  @models_groups = []

  @config = nil
end

Public Instance Methods

add_models_names(items) click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 32
def add_models_names(items)
  @models_names += items

  nil
end
configure() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 39
def configure
  RailsAdmin.config do |config|
    @config = config

    @config.included_models += @models_names

    init_model_groups

    configure_auth
    configure_actions
    configure_models
    configure_view
  end

  nil
end
get_models_can_manage_for(role) click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 214
def get_models_can_manage_for(role)
  result = []

  case role
    when EAdminUserRole::EAUR_ADMIN
      result = @models_names.dup
      result.map! { |name| get_class_by_name(name) }
    when EAdminUserRole::EAUR_TRANSLATOR
      result = [LocalizationBase]
    else
      #do nothing
  end

  result
end
try_configure_admin_for(context, model_class, fields, method_name) click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 200
def try_configure_admin_for(context, model_class, fields, method_name)
  return unless model_class.respond_to?(method_name)

  fields.each do |model_field|

    field_name = model_field.to_sym

    model_class.send(method_name, context, field_name)
  end

  nil
end

Protected Instance Methods

configure_actions() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 94
def configure_actions
  @config.actions do
    dashboard do
      statistics false
    end

    index
    new
    # export
    # history_show
    bulk_delete
    show
    edit
    delete
    show_in_app
  end

  nil
end
configure_auth() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 79
def configure_auth
  # == CanCanCan ==
  @config.authorize_with :cancan

  # == Devise ==
  @config.authenticate_with do
    warden.authenticate! scope: :admin_user
  end

  @config.current_user_method(&:current_admin_user)

  nil
end
configure_model(model_class, fields_for_list, fields_for_edit, fields_for_show) click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 146
def configure_model(model_class, fields_for_list, fields_for_edit, fields_for_show)
  models_names_sorted = @models_names_sorted
  model_group         = get_group_name(model_class)

  configurator = self

  @config.model(model_class.to_s) do
    if model_class.instance_methods.include?(:admin_object_title)
      object_label_method { :admin_object_title }
    end

    navigation_label(model_group)
    weight models_names_sorted.index(model_group) || 0

    #configure list
    list do
      model_class.filters_for_admin_list(self) if model_class.respond_to?(:filters_for_admin_list)
      model_class.sort_by_for_admin_list(self) if model_class.respond_to?(:sort_by_for_admin_list)

      configurator.try_configure_admin_for(self, model_class, fields_for_list, :configure_admin_list)

      #init scopes
      scopes_list = model_class.scopes.keys.dup

      scopes_list.delete(:page)

      if scopes_list.size > 0
        #add scopes 'all' at first tab
        scopes_list = [nil] + scopes_list

        scopes(scopes_list)
      end
    end

    edit { configurator.try_configure_admin_for(self, model_class, fields_for_edit, :configure_admin_edit) }
    show { configurator.try_configure_admin_for(self, model_class, fields_for_show, :configure_admin_show) }

  end
end
configure_models() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 115
def configure_models
  # setup models
  @config.included_models.each do |model|
    model_class = get_class_by_name(model)
    model_class.init_scopes if model_class.respond_to?(:init_scopes)


    model_fields    = model_class.attribute_names
    model_relations = model_class.relations.keys

    fields_for_list = model_fields + model_relations
    fields_for_edit = model_fields
    fields_for_show = model_fields + model_relations

    configure_model(model_class, fields_for_list, fields_for_edit, fields_for_show)
  end

  nil
end
configure_view() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 136
def configure_view
  @config.show_gravatar          = false
  @config.total_columns_width    = 1000
  @config.default_items_per_page = 100
  @config.compact_show_view      = false

  nil
end

Private Instance Methods

get_group_name(model_class) click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 187
def get_group_name(model_class)
  result = ''

  if model_class.methods.include?(:admin_group)
    result = model_class.admin_group
  else
    result = model_class.to_s.underscore.split('_').first
  end

  result
end
init_model_groups() click to toggle source
# File lib/mrpin/config/initializers/05_rails_admin_configurator.rb, line 57
def init_model_groups
  # calc models order
  @config.included_models.each do |model_name|
    model_class = get_class_by_name(model_name)

    group_name = get_group_name(model_class)

    @models_groups << group_name
  end

  @models_groups.uniq!

  @models_order_middle = @models_groups - @models_order_first - @models_order_last

  @models_order_middle.sort!

  @models_names_sorted = @models_order_first + @models_order_middle + @models_order_last

  nil
end