class YamlQuery
Constants
- VERSION
Public Class Methods
new(object, options)
click to toggle source
# File lib/yamlquery.rb, line 2 def initialize(object, options) @object = object @options = options tree = parse(@options) yqt = YamlQuery::Transform.new parsed_query = yqt.apply(tree) if options[:debug] pp parsed_query end @keys = parsed_query[:keys] @operator = parsed_query[:operator].to_s @arg = parsed_query[:arg].to_s end
Public Instance Methods
object_search(object = @object, index = 0)
click to toggle source
# File lib/yamlquery.rb, line 16 def object_search(object = @object, index = 0) result_hash = {} object.each do |k, v| if @keys[index] == k or @keys[index] == '*' if @keys.length == index + 1 result_hash[k] = v if compare(v) elsif v.is_a?(Hash) result_hash[k] = object_search(v, index + 1) result_hash.delete(k) if result_hash[k].empty? end # A key shouldn't show up more than once, so we can return # as soon as we find a match if we aren't matching a wildcard. return result_hash unless @keys[index] == '*' end end return result_hash end
Private Instance Methods
assign()
click to toggle source
# File lib/yamlquery.rb, line 64 def assign # not yet implemented end
compare(value)
click to toggle source
# File lib/yamlquery.rb, line 43 def compare(value) case @operator when '' return true when '==' equal?(value) when '!=' notequal?(value) when '!' nil?(value) when '>=' ge?(value) when '<=' le?(value) when '<' lt?(value) when '>' gt?(value) end end
equal?(value)
click to toggle source
# File lib/yamlquery.rb, line 84 def equal?(value) case value when Array, Hash value.include?(@arg) else value == @arg end end
ge?(value)
click to toggle source
# File lib/yamlquery.rb, line 68 def ge?(value) value >= @arg end
gt?(value)
click to toggle source
# File lib/yamlquery.rb, line 80 def gt?(value) value > @arg end
le?(value)
click to toggle source
# File lib/yamlquery.rb, line 72 def le?(value) value <= @arg end
lt?(value)
click to toggle source
# File lib/yamlquery.rb, line 76 def lt?(value) value < @arg end
nil?(value)
click to toggle source
# File lib/yamlquery.rb, line 97 def nil?(value) case value when Array, Hash value.empty? else value.nil? end end
notequal?(value)
click to toggle source
# File lib/yamlquery.rb, line 93 def notequal?(value) value != @arg end
parse(options)
click to toggle source
# File lib/yamlquery.rb, line 36 def parse(options) yqp = YamlQuery::Parser.new(options[:delimiter]) yqp.parse(options[:query]) rescue Parslet::ParseFailed => failure puts failure.cause.ascii_tree end