Sha256: a2c6cf8e8111cfeb769486f6345ed6c9e23da752b2f103d14da269d336c68070

Contents?: true

Size: 1.28 KB

Versions: 11

Compression:

Stored size: 1.28 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

11 entries across 11 versions & 1 rubygems

Version Path
admin_it-1.0.11 lib/admin_it/data/object.rb
admin_it-1.0.10 lib/admin_it/data/object.rb
admin_it-1.0.9 lib/admin_it/data/object.rb
admin_it-1.0.8 lib/admin_it/data/object.rb
admin_it-1.0.7 lib/admin_it/data/object.rb
admin_it-1.0.6 lib/admin_it/data/object.rb
admin_it-1.0.5 lib/admin_it/data/object.rb
admin_it-1.0.4 lib/admin_it/data/object.rb
admin_it-1.0.3 lib/admin_it/data/object.rb
admin_it-1.0.2 lib/admin_it/data/object.rb
admin_it-1.0.1 lib/admin_it/data/object.rb