class RademadeAdmin::Model::Info::Fields

Attributes

data_adapter[R]
model_configuration[R]

Public Class Methods

new(data_adapter, model_configuration, relations, uploaders) click to toggle source

Initialize

@param data_adapter [RademadeAdmin::Model::Adapter::Data] @param model_configuration [RademadeAdmin::Model::Configuration] @param relations [RademadeAdmin::Model::Info::Relations] @param uploaders [RademadeAdmin::Model::Info::Uploaders]

# File lib/rademade_admin/model/info/fields.rb, line 18
def initialize(data_adapter, model_configuration, relations, uploaders)
  @data_adapter = data_adapter
  @model_configuration = model_configuration
  @relations = relations
  @uploaders = uploaders
end

Public Instance Methods

data_items() click to toggle source
# File lib/rademade_admin/model/info/fields.rb, line 25
def data_items
  @data_items ||= build_items
end

Protected Instance Methods

build_items() click to toggle source
# File lib/rademade_admin/model/info/fields.rb, line 35
def build_items
  data_items = RademadeAdmin::Model::Info::DataItems.new
  used_relations = []

  # TODO extract sub - methods
  @data_adapter.fields.each do |_, field|
    relation = field.relation_name.nil? ? nil : @data_adapter.relation(field.relation_name)
    used_relations << field.relation_name if relation
    data_item = item_initializer.new(field, relation).auto
    data_items.add_data_item( data_item )
  end

  @data_adapter.relations.each do |_, relation|
    unless used_relations.include? relation.name
      data_items.add_data_item( item_initializer.new(nil, relation).from_relation )
    end
  end

  @model_configuration.all_field_names.each do |field_name|
    unless data_items.has_field?(field_name)
      data_items.add_data_item( item_initializer.new(nil, nil).build(field_name, nil) )
    end
  end

  configure_items(data_items)

  data_items
end
configure_item(data_item) click to toggle source

@param [RademadeAdmin::Model::Info::DataItem]

# File lib/rademade_admin/model/info/fields.rb, line 70
def configure_item(data_item)

  # TODO extract sub methods

  name = data_item.name

  data_item.has_uploader = @uploaders.has_uploader?(name)
  data_item.order_column = nil unless @data_adapter.columns.include?(data_item.order_column)

  @model_configuration.field_labels.find(name) do |label_data|
    data_item.label = label_data.label
  end

  @model_configuration.form_fields.find_with_index(name) do |form_field_data, index|
    data_item.form_params = form_field_data.params
    data_item.in_form = true
    data_item.form_position = index
  end

  @model_configuration.list_fields.find_with_index(name) do |data, index|
    data_item.in_list = true
    data_item.list_preview_accessor = data.preview_accessor
    data_item.list_preview_handler = data.preview_handler
    data_item.list_position = index
  end

  @model_configuration.csv_fields.find_with_index(name) do |data, index|
    data_item.in_csv = true
    data_item.csv_preview_accessor = data.preview_accessor
    data_item.csv_preview_handler = data.preview_handler
    data_item.csv_position = index
  end

  data_item
end
configure_items(data_items) click to toggle source
# File lib/rademade_admin/model/info/fields.rb, line 64
def configure_items(data_items)
  data_items.each { |item| configure_item(item) }

end
item_initializer() click to toggle source
# File lib/rademade_admin/model/info/fields.rb, line 31
def item_initializer
  RademadeAdmin::Model::Info::DataItem::Initializer
end