Sha256: c860918fce2f6b8f148c3082de6e894940a92166aa9c1533ba32b970624ee3fa

Contents?: true

Size: 896 Bytes

Versions: 10

Compression:

Stored size: 896 Bytes

Contents

module MassiveRecord
  module ORM
    module Schema
      class InvalidField < ArgumentError; end

      class Fields < Set
        attr_accessor :contained_in

        def add(field)
          field.fields = self
          raise InvalidField.new(field.errors.full_messages.join(". ")) unless field.valid?
          super
        end
        alias_method :<<, :add

        def field_by_name(name)
          name = name.to_s
          detect { |field| field.name == name }
        end

        def attribute_name_taken?(name, check_only_self = false)
          name = name.to_s
          check_only_self || contained_in.nil? ? attribute_names.include?(name) : contained_in.attribute_name_taken?(name) 
        end


        def to_hash
          Hash[collect { |field| [field.name, field] }]
        end

        def attribute_names
          to_hash.keys
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

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