class Twfy::Validation
Public Class Methods
new(params = {}, against = {})
click to toggle source
# File lib/twfy/validation.rb, line 11 def initialize(params = {}, against = {}) @params = params @against = against end
run(params = {}, against = {})
click to toggle source
# File lib/twfy/validation.rb, line 7 def self.run(params = {}, against = {}) new(params, against).check! end
Public Instance Methods
check!()
click to toggle source
# File lib/twfy/validation.rb, line 16 def check! unless missing.empty? raise ServiceArgumentError, "Missing required params #{missing.inspect}" end unless extra.empty? raise ServiceArgumentError, "Unknown params #{extra.inspect}" end check_one_required! end
Private Instance Methods
allowed()
click to toggle source
# File lib/twfy/validation.rb, line 32 def allowed @allowed ||= allowed_with_dependencies end
allowed_with_dependencies()
click to toggle source
# File lib/twfy/validation.rb, line 44 def allowed_with_dependencies base = list(@against[:allow]) dependencies_allowed.each_with_object(base) do |(key, dependent_keys), memo| if provided.include?(key) memo.push(*list(dependent_keys)) end end end
check_one_required!()
click to toggle source
# File lib/twfy/validation.rb, line 69 def check_one_required! count = one_required_count if count if count < 1 raise ServiceArgumentError, "Need exactly one of #{one_required.inspect}" elsif count > 1 raise ServiceArgumentError, "Only one of #{one_required.inspect} allowed" end end end
dependencies_allowed()
click to toggle source
# File lib/twfy/validation.rb, line 40 def dependencies_allowed @dependencies_allowed ||= @against[:allow_dependencies] || {} end
extra()
click to toggle source
# File lib/twfy/validation.rb, line 65 def extra @extra ||= provided - (required + allowed + one_required) end
list(candidate)
click to toggle source
# File lib/twfy/validation.rb, line 57 def list(candidate) Array(candidate).dup.compact end
missing()
click to toggle source
# File lib/twfy/validation.rb, line 61 def missing @missing ||= required - provided end
one_required()
click to toggle source
# File lib/twfy/validation.rb, line 36 def one_required @one_required ||= list(@against[:require_one_of]) end
one_required_count()
click to toggle source
# File lib/twfy/validation.rb, line 80 def one_required_count if one_required.any? provided.select { |item| one_required.include?(item) }.size end end
provided()
click to toggle source
# File lib/twfy/validation.rb, line 53 def provided @provided ||= @params.keys.map(&:to_sym) end
required()
click to toggle source
# File lib/twfy/validation.rb, line 28 def required @required ||= list(@against[:require]) end