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