Sha256: af0aa5b4c262a071437843ff5aa9314be5d4bae397410903d477073dbbc682d6
Contents?: true
Size: 1.18 KB
Versions: 3
Compression:
Stored size: 1.18 KB
Contents
module Airborne module PathMatcher def get_by_path(path, json, &block) type = false parts = path.split('.') parts.each_with_index do |part, index| if part == '*' || part == '?' type = part raise "Expected #{path} to be array got #{json.class} from JSON response" unless json.class == Array if index < parts.length - 1 json.each do |element| sub_path = parts[(index + 1)..(parts.length-1)].join('.') get_by_path(sub_path, element, &block) end return end next end if /^[\d]+(\.[\d]+){0,1}$/ === part part = part.to_i json = json[part] else json = json[part.to_sym] raise "Expected #{path} to be object or array got #{json.class} from JSON response" unless json.class == Array || json.class == Hash end end if type == '*' json.each{|part| yield part} elsif type == '?' item_count = json.length error_count = 0 json.each do |part| begin yield part rescue Exception => e error_count += 1 raise "Expected one object in path #{path} to match provided JSON values" if item_count == error_count end end else yield json end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
airborne-0.0.16 | lib/airborne/path_matcher.rb |
airborne-0.0.15 | lib/airborne/path_matcher.rb |
airborne-0.0.14 | lib/airborne/path_matcher.rb |