lib/jsonpath.rb in jsonpath-1.0.3 vs lib/jsonpath.rb in jsonpath-1.0.4
- old
+ new
@@ -8,34 +8,36 @@
require 'jsonpath/parser'
# JsonPath: initializes the class with a given JsonPath and parses that path
# into a token array.
class JsonPath
- PATH_ALL = '$..*'.freeze
+ PATH_ALL = '$..*'
attr_accessor :path
def initialize(path, opts = {})
@opts = opts
scanner = StringScanner.new(path.strip)
@path = []
until scanner.eos?
- if token = scanner.scan(/\$\B|@\B|\*|\.\./)
+ if (token = scanner.scan(/\$\B|@\B|\*|\.\./))
@path << token
- elsif token = scanner.scan(/[\$@a-zA-Z0-9:{}_-]+/)
+ elsif (token = scanner.scan(/[$@a-zA-Z0-9:{}_-]+/))
@path << "['#{token}']"
- elsif token = scanner.scan(/'(.*?)'/)
+ elsif (token = scanner.scan(/'(.*?)'/))
@path << "[#{token}]"
- elsif token = scanner.scan(/\[/)
+ elsif (token = scanner.scan(/\[/))
@path << find_matching_brackets(token, scanner)
- elsif token = scanner.scan(/\]/)
+ elsif (token = scanner.scan(/\]/))
raise ArgumentError, 'unmatched closing bracket'
+ elsif (token = scanner.scan(/\(.*\)/))
+ @path << token
elsif scanner.scan(/\./)
nil
- elsif token = scanner.scan(/[><=] \d+/)
+ elsif (token = scanner.scan(/[><=] \d+/))
@path.last << token
- elsif token = scanner.scan(/./)
+ elsif (token = scanner.scan(/./))
begin
@path.last << token
rescue RuntimeError
raise ArgumentError, "character '#{token}' not supported in query"
end
@@ -44,16 +46,16 @@
end
def find_matching_brackets(token, scanner)
count = 1
until count.zero?
- if t = scanner.scan(/\[/)
+ if (t = scanner.scan(/\[/))
token << t
count += 1
- elsif t = scanner.scan(/\]/)
+ elsif (t = scanner.scan(/\]/))
token << t
count -= 1
- elsif t = scanner.scan(/[^\[\]]+/)
+ elsif (t = scanner.scan(/[^\[\]]+/))
token << t
elsif scanner.eos?
raise ArgumentError, 'unclosed bracket'
end
end