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

Version Path
admin_it-1.2.5 lib/admin_it/data/object.rb
admin_it-1.2.4 lib/admin_it/data/object.rb
admin_it-1.2.3 lib/admin_it/data/object.rb
admin_it-1.2.2 lib/admin_it/data/object.rb
admin_it-1.2.1 lib/admin_it/data/object.rb
admin_it-1.2.0 lib/admin_it/data/object.rb
admin_it-1.1.0 lib/admin_it/data/object.rb