Sha256: ea401dc5cdd763c62d906654e25bd8260fd0ece92bf0654a67fd85a5bba75612
Contents?: true
Size: 1.3 KB
Versions: 7
Compression:
Stored size: 1.3 KB
Contents
module AdminIt module ObjectData # module Context def self.included(base) base.extend(ClassMethods) end # module ClassMethods 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 end end # module Field protected def read_value(entity) entity.send(name) end def write_value(entity, value) entity.send("#{name}=", value) end end end end
Version data entries
7 entries across 7 versions & 1 rubygems