Sha256: 8161af707a84b6953bf11a2ecdc241d51cd91039a85837744054a28db4b828c2

Contents?: true

Size: 1.53 KB

Versions: 9

Compression:

Stored size: 1.53 KB

Contents

module MassiveRecord
  module ORM
    module Schema
      #
      # Common methods both shared with table interface and field interface.
      # Methods are to be included as ClassMethods, and where they are to be
      # included must provide a schema_source(). Currently it is expected to
      # be a set of Schema::ColumnFamilies or a set of Schema::Fields, but
      # I guess as long as it responds to to_hash and attribute_names you are fine.
      #
      module CommonInterface
        extend ActiveSupport::Concern

        module ClassMethods
          #
          # Returns a hash where attribute names are keys and it's field
          # is the value.
          #
          def attributes_schema
            schema_source.present? ? schema_source.to_hash : {}
          end

          #
          # Returns an array of known attributes based on all fields found
          # in schema source
          #
          def known_attribute_names
            schema_source.present? ? schema_source.attribute_names : []
          end


          #
          # Returns a hash with attribute name as keys, default values read from field as value.
          #
          def default_attributes_from_schema
            Hash[attributes_schema.collect { |attribute_name, field| 
              [attribute_name, field.default]
            }]
          end
        end

        def attributes_schema
          self.class.attributes_schema
        end

        def known_attribute_names
          self.class.known_attribute_names
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
massive_record-0.2.2 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.2.rc2 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.2.rc1 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.1 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.1.rc1 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.0 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.0.beta2 lib/massive_record/orm/schema/common_interface.rb
massive_record-0.2.0.beta lib/massive_record/orm/schema/common_interface.rb
massive_record-0.1.1 lib/massive_record/orm/schema/common_interface.rb