lib/attestor/validations/validators.rb in attestor-1.0.0 vs lib/attestor/validations/validators.rb in attestor-2.0.0
- old
+ new
@@ -2,75 +2,47 @@
module Attestor
module Validations
- # The collection of validations used by class instances
- #
- # @api private
+ # @private
class Validators
include Enumerable
+ include Reporter
- # @!scope class
- # @!method new(items = [])
- # Creates an immutable collection with optional list of items
- #
- # @param [Array<Attestor::Validators::Validator>] items
- #
- # @return [Attestor::Validators]
-
- # @private
def initialize(*items)
@items = items.flatten
freeze
end
- # Iterates through the collection
- #
- # @yield the block
- # @yieldparam [Attestor::Validators::Validator] item
- # items from the collection
- #
- # @return [Enumerator]
def each
block_given? ? items.each { |item| yield(item) } : to_enum
end
- # Returns validators used in given context
- #
- # @param [#to_sym] context
- #
- # @return [Attestor::Validators]
def set(context)
- validators = select { |item| item.used_in_context? context }
-
- self.class.new(validators)
+ self.class.new select { |item| item.used_in_context? context }
end
- # Returns validators updated by a new validator with given args
- #
- # @param [Array] args
- #
- # @return [Attestor::Validators]
def add_validator(*args, &block)
- add_item Validator, *args, &block
+ self.class.new items, Validator.new(*args, &block)
end
- # Returns validators updated by a new validator with given args
- #
- # @param [Array] args
- #
- # @return [Attestor::Validators]
def add_delegator(*args, &block)
- add_item Delegator, *args, &block
+ self.class.new items, Delegator.new(*args, &block)
end
+ def validate!(object)
+ results = errors(object)
+ return if results.empty?
+ fail InvalidError.new object, results.map(&:messages).flatten
+ end
+
private
attr_reader :items
- def add_item(type, *args, &block)
- self.class.new items, type.new(*args, &block)
+ def errors(object)
+ map { |validator| validator.validate(object) }.select(&:invalid?)
end
end # class Validators
end # module Validations