lib/attestor/validations/validator.rb
# encoding: utf-8
module Attestor
module Validations
# @private
class Validator
include Reporter
def initialize(name = :invalid, except: nil, only: nil, &block)
@name = name.to_sym
@whitelist = normalize(only)
@blacklist = normalize(except)
@block = block
freeze
end
attr_reader :name, :whitelist, :blacklist, :block
def used_in_context?(context)
symbol = context.to_sym
whitelisted?(symbol) && !blacklisted?(symbol)
end
def validate!(object)
block ? object.instance_eval(&block) : object.__send__(name)
end
private
def whitelisted?(symbol)
whitelist.empty? || whitelist.include?(symbol)
end
def blacklisted?(symbol)
blacklist.include? symbol
end
def normalize(list)
Array(list).map(&:to_sym).uniq
end
end # class Validator
end # module Validations
end # module Attestor