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