lib/attestor/validations/validator.rb in attestor-1.0.0 vs lib/attestor/validations/validator.rb in attestor-2.0.0
- old
+ new
@@ -2,99 +2,40 @@
module Attestor
module Validations
- # Describe a validator for class instances
- #
- # @example
- # validator = Validator.new(:foo, only: :baz)
- #
- # validator.used_in_context? :baz # => true
- # validator.validate object
- #
- # @api private
+ # @private
class Validator
+ include Reporter
- # @!scope class
- # @!method new(name, except: [], only: [])
- # Creates a named item with blacklist or whitelist of contexts
- #
- # @param [#to_sym] name
- # @option [#to_sym, Array<#to_sym>] :except
- # @option [#to_sym, Array<#to_sym>] :only
- #
- # @return [Attestor::Validations::Validator]
-
- # @private
def initialize(name = :invalid, except: nil, only: nil, &block)
@name = name.to_sym
@whitelist = normalize(only)
@blacklist = normalize(except)
@block = block
- generate_id
freeze
end
- # @!attribute [r] name
- # The name of the item
- #
- # @return [Symbol]
- attr_reader :name
+ attr_reader :name, :whitelist, :blacklist, :block
- # Compares an item to another one
- #
- # @param [Object] other
- #
- # @return [Boolean]
- def ==(other)
- other.instance_of?(self.class) ? id.equal?(other.id) : false
- end
-
- # Checks if the item should be used in given context
- #
- # @param [#to_sym] context
- #
- # @return [Boolean]
def used_in_context?(context)
symbol = context.to_sym
whitelisted?(symbol) && !blacklisted?(symbol)
end
- # Validates given object
- #
- # @param [Object] object
- #
- # @raise [Attestor::InvalidError]
- # if object doesn't match validation rule
- #
- # @return [undefined]
- def validate(object)
+ def validate!(object)
block ? object.instance_eval(&block) : object.__send__(name)
end
- protected
-
- # @!attribute [r] id
- # The item's identity
- #
- # @return [String]
- attr_reader :id
-
private
- attr_reader :whitelist, :blacklist, :block
-
def whitelisted?(symbol)
whitelist.empty? || whitelist.include?(symbol)
end
def blacklisted?(symbol)
blacklist.include? symbol
- end
-
- def generate_id
- @id = [name, whitelist, blacklist].hash
end
def normalize(list)
Array(list).map(&:to_sym).uniq
end