module AdminIt::ObjectData::Context::ClassMethods

Public Instance Methods

load_fields() click to toggle source
# File lib/admin_it/data/object.rb, line 11
def load_fields
  all = entity_class.instance_methods(false) - Object.instance_methods
  getters = all.select do |m|
    m.to_s =~ /\w\z/ && entity_class.instance_method(m).arity == 0
  end
  setters = all.select do |m|
    m.to_s[-1] == '=' && entity_class.instance_method(m).arity == 1
  end
  fields = getters.map do |m|
    AdminIt::Field.create(
      m,
      entity_class,
      readable: true,
      writable: setters.include?("#{m}=".to_sym)
    )
  end
  setters.reject! { |m| getters.include?(m.to_s[0..-2].to_sym) }
  fields.concat(setters.map do |m|
    name = m.to_s[0..-2].to_sym
    AdminIt::Field.create(
      name,
      entity_class,
      readable: false,
      writable: true
    )
  end)
end