class Adminable::FieldCollector

Attributes

all[R]

@return [Array] fields from activerecord model

model[R]

@return [ActiveRecord::Base] activerecord model class @example

Adminable::Fields::Collection.new(User).model
# => User(id: integer, email: string, password_hash: string)

Public Class Methods

new(model) click to toggle source

@param model [ActiveRecord::Base] activerecord model class

# File lib/adminable/field_collector.rb, line 13
def initialize(model)
  @model = model
  @all ||= columns + associations
end

Public Instance Methods

associations() click to toggle source

Collects fields from model associations @return [Array]

# File lib/adminable/field_collector.rb, line 30
def associations
  @associations ||= [].tap do |fields|
    @model.reflect_on_all_associations.each do |association|
      fields << resolve(association.macro, association.name)
    end
  end
end
columns() click to toggle source

Collects fields from model columns @return [Array]

# File lib/adminable/field_collector.rb, line 20
def columns
  @columns ||= [].tap do |fields|
    @model.columns.reject { |a| a.name.match(/_id$/) }.each do |column|
      fields << resolve(column.type, column.name)
    end
  end
end

Private Instance Methods

required?(name) click to toggle source
# File lib/adminable/field_collector.rb, line 45
def required?(name)
  @model.validators_on(name).any? do |validator|
    validator.class == ActiveRecord::Validations::PresenceValidator
  end
end
resolve(type, name) click to toggle source
# File lib/adminable/field_collector.rb, line 40
def resolve(type, name)
  class_name = "adminable/fields/#{type}".classify
  "#{class_name}.new(:#{name})"
end