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