Sha256: 996d68ba31e725f6f56f4966cf87ac72d82a1cff976d09adfc54e48e72ba51bc

Contents?: true

Size: 1.06 KB

Versions: 13

Compression:

Stored size: 1.06 KB

Contents

module Mongoid
  module Validations

    # Validates that the specified collections do or do not match a certain
    # size.
    #
    # @example Set up the collection size validator.
    #
    #   class Person
    #     include Mongoid::Document
    #     has_many :addresses
    #
    #     validates_collection_size_of :addresses, in: 1..10
    #   end
    class CollectionSizeValidator < Mongoid::Validatable::LengthValidator

      def validate_each_with_collection(record, attribute, value)
        value = collection_to_size(record, attribute)

        self.validate_each_without_collection(record, attribute, value)
      end

      alias_method_chain :validate_each, :collection

      private

      def collection_to_size(record, attribute)
        relation = record.relations[attribute.to_s]

        source = case relation.macro
        when :embeds_many, :has_many
          record.send(attribute)
        when :has_and_belongs_to_many
          record.send(relation.key.to_sym)
        end

        OpenStruct.new(length: source.try(:size) || 0)
      end

    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
custom_fields-2.8.0 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.7.0 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.7.0.rc1 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.6.0 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.5.0 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.5.0.rc1 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc8 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc7 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc6 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc5 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc4 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc3 lib/custom_fields/extensions/mongoid/validations/collection_size.rb
custom_fields-2.4.0.rc2 lib/custom_fields/extensions/mongoid/validations/collection_size.rb