class Pakyow::Verifier
Public Class Methods
formatted_message(message, type:, key:)
click to toggle source
# File lib/pakyow/verifier.rb, line 67 def formatted_message(message, type:, key:) case type when :full "#{key} #{message}" when :presentable "#{Support.inflector.humanize(key)} #{message}" else message end end
new(key = nil, &block)
click to toggle source
# File lib/pakyow/verifier.rb, line 84 def initialize(key = nil, &block) @key = key @types = {} @messages = {} @required_keys = [] @optional_keys = [] @allowable_keys = [] @verifiers_by_key = {} @validator = Validator.new(key) if block instance_eval(&block) end end
Public Instance Methods
call(values, context: nil)
click to toggle source
# File lib/pakyow/verifier.rb, line 128 def call(values, context: nil) values ||= {} if should_sanitize?(values) values = sanitize(values) end result = Result.new if should_validate?(values) result.validation(@validator.call(values, context: context)) end @allowable_keys.each do |allowable_key| if values[allowable_key].nil? if @required_keys.include?(allowable_key) result.error(allowable_key, @messages[allowable_key]) else next end end if verifier_for_key = @verifiers_by_key[allowable_key] Array.ensure(values[allowable_key]).each do |values_for_key| result.nested(allowable_key, verifier_for_key.call(values_for_key, context: context)) end end end result end
optional(key, type = nil, &block)
click to toggle source
# File lib/pakyow/verifier.rb, line 114 def optional(key, type = nil, &block) key = key.to_sym @optional_keys.push(key).uniq! @allowable_keys.push(key).uniq! if type @types[key] = Types.type_for(type) end if block @verifiers_by_key[key] = self.class.new(key, &block) end end
required(key, type = nil, message: "is required", &block)
click to toggle source
# File lib/pakyow/verifier.rb, line 99 def required(key, type = nil, message: "is required", &block) key = key.to_sym @required_keys.push(key).uniq! @allowable_keys.push(key).uniq! @messages[key] = message if type @types[key] = Types.type_for(type) end if block @verifiers_by_key[key] = self.class.new(key, &block) end end
Private Instance Methods
sanitize(values)
click to toggle source
# File lib/pakyow/verifier.rb, line 162 def sanitize(values) values.select! do |key, _| @allowable_keys.include?(key.to_sym) end @allowable_keys.each do |key| key = key.to_sym if values.key?(key) value = values[key] if type = @types[key] value = type[value] end values[key] = value end end values end
should_sanitize?(values)
click to toggle source
# File lib/pakyow/verifier.rb, line 184 def should_sanitize?(values) values.is_a?(Pakyow::Support::IndifferentHash) || values.is_a?(Hash) || values.is_a?(Connection::Params) end
should_validate?(values)
click to toggle source
# File lib/pakyow/verifier.rb, line 188 def should_validate?(values) @validator.any? && !values.nil? end