class Alder::Predicate
Public Class Methods
new(fragment)
click to toggle source
# File lib/alder/predicate.rb, line 3 def initialize(fragment) @fragment = fragment end
Public Instance Methods
match(hash)
click to toggle source
# File lib/alder/predicate.rb, line 7 def match(hash) node_match(@fragment, hash) end
Private Instance Methods
key_match(key, hash)
click to toggle source
# File lib/alder/predicate.rb, line 23 def key_match(key, hash) matches = [] if key.is_a?(Regexp) hash.each do |k, v| matches << k if key =~ k end else matches << key if hash.has_key?(key) end matches end
node_match(fragment, hash)
click to toggle source
# File lib/alder/predicate.rb, line 13 def node_match(fragment, hash) fragment.all? do |f_key, f_value| keys = key_match(f_key, hash) next false if keys.empty? values = value_match(f_value, keys, hash) !values.empty? end end
value_match(value, keys, hash)
click to toggle source
# File lib/alder/predicate.rb, line 35 def value_match(value, keys, hash) matches = [] keys.each do |k| v = hash[k] if value == :_ || value == v matches << v elsif v.is_a?(Hash) && node_match(value, v) matches << v end end matches end