class Wayfarer::Routing::QueryRule
@private
Public Class Methods
new(field_constraints, opts = {}, &proc)
click to toggle source
Calls superclass method
# File lib/wayfarer/routing/query_rule.rb, line 9 def initialize(field_constraints, opts = {}, &proc) @field_constraints = field_constraints super(opts, &proc) end
Private Instance Methods
match!(uri)
click to toggle source
# File lib/wayfarer/routing/query_rule.rb, line 16 def match!(uri) CGI.parse(uri.query).none? do |field, vals| violates?(field, vals) end rescue NoMethodError # `CGI::parse` throws a `NoMethodError` if `uri.query` is an empty # string false end
violates?(field, vals)
click to toggle source
rubocop:disable Lint/AssignmentInCondition
# File lib/wayfarer/routing/query_rule.rb, line 25 def violates?(field, vals) return false unless constraint = @field_constraints[field.to_sym] violates_constraint?(constraint, vals) end
violates_constraint?(constraint, vals)
click to toggle source
rubocop:enable Lint/AssignmentInCondition
# File lib/wayfarer/routing/query_rule.rb, line 31 def violates_constraint?(constraint, vals) case constraint when String then violates_string?(constraint, vals) when Integer then violates_integer?(constraint, vals) when Regexp then violates_regexp?(constraint, vals) when Range then violates_range?(constraint, vals) end end
violates_integer?(int, vals)
click to toggle source
# File lib/wayfarer/routing/query_rule.rb, line 44 def violates_integer?(int, vals) vals.none? do |val| int == Integer(val) end rescue ArgumentError true end
violates_range?(range, vals)
click to toggle source
# File lib/wayfarer/routing/query_rule.rb, line 54 def violates_range?(range, vals) vals.none? { |val| range.include?(val.to_i) } end
violates_regexp?(regexp, vals)
click to toggle source
# File lib/wayfarer/routing/query_rule.rb, line 50 def violates_regexp?(regexp, vals) vals.none? { |val| regexp.match(val) } end
violates_string?(str, vals)
click to toggle source
# File lib/wayfarer/routing/query_rule.rb, line 40 def violates_string?(str, vals) vals.none? { |val| str == val } end