Sha256: 4298b5487de6b518e18cb19868ee27ff509dd2964cbaf027fdbc3a9312b185cc
Contents?: true
Size: 941 Bytes
Versions: 1
Compression:
Stored size: 941 Bytes
Contents
module Alder class Predicate def initialize(fragment) @fragment = fragment end def match(hash) node_match(@fragment, hash) end private 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 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 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
alder-0.1.0 | lib/alder/predicate.rb |