jsonpath 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +12 -6
- data/VERSION +1 -1
- data/jsonpath.gemspec +2 -2
- data/lib/jsonpath.rb +29 -11
- data/lib/jsonpath/enumerable.rb +3 -2
- data/spec/jsonpath_spec.rb +5 -0
- metadata +3 -3
    
        data/Rakefile
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 1 | 
             
            require 'rake/testtask'
         | 
| 2 2 |  | 
| 3 | 
            +
            #desc "Build it up"
         | 
| 4 | 
            +
            #task :build do
         | 
| 5 | 
            +
            #  sh "rex --independent -o lib/jsonpath/grammar.rex.rb lib/grammar/grammar.rex"
         | 
| 6 | 
            +
            #  sh "racc -v -O parser.output -o lib/jsonpath/grammar.y.rb lib/grammar/grammar.y"
         | 
| 7 | 
            +
            #end
         | 
| 8 | 
            +
             | 
| 3 9 | 
             
            begin
         | 
| 4 10 | 
             
              require 'jeweler'
         | 
| 5 11 | 
             
              Jeweler::Tasks.new do |s|
         | 
| @@ -34,9 +40,9 @@ Spec::Rake::SpecTask.new do |t| | |
| 34 40 | 
             
              t.spec_files = FileList['spec/*.rb']
         | 
| 35 41 | 
             
            end
         | 
| 36 42 |  | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            +
            require 'rake/testtask'
         | 
| 44 | 
            +
            Rake::TestTask.new(:test) do |test|
         | 
| 45 | 
            +
              test.libs << 'lib' << 'test'
         | 
| 46 | 
            +
              test.pattern = 'test/**/*_test.rb'
         | 
| 47 | 
            +
              test.verbose = true
         | 
| 48 | 
            +
            end
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.1. | 
| 1 | 
            +
            0.1.2
         | 
    
        data/jsonpath.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{jsonpath}
         | 
| 8 | 
            -
              s.version = "0.1. | 
| 8 | 
            +
              s.version = "0.1.2"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Joshua Hull"]
         | 
| 12 | 
            -
              s.date = %q{2010- | 
| 12 | 
            +
              s.date = %q{2010-04-27}
         | 
| 13 13 | 
             
              s.description = %q{Ruby implementation of http://goessner.net/articles/JsonPath/}
         | 
| 14 14 | 
             
              s.email = %q{joshbuddy@gmail.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
    
        data/lib/jsonpath.rb
    CHANGED
    
    | @@ -1,7 +1,5 @@ | |
| 1 1 | 
             
            require 'strscan'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
            $LOAD_PATH.add_current
         | 
| 2 | 
            +
            $LOAD_PATH << File.expand_path(File.basename(__FILE__))
         | 
| 5 3 |  | 
| 6 4 | 
             
            require File.join('jsonpath', 'enumerable')
         | 
| 7 5 |  | 
| @@ -14,15 +12,35 @@ class JsonPath | |
| 14 12 | 
             
                @path = []
         | 
| 15 13 | 
             
                bracket_count = 0
         | 
| 16 14 | 
             
                while not scanner.eos?
         | 
| 17 | 
            -
                  token = scanner. | 
| 18 | 
            -
             | 
| 19 | 
            -
                   | 
| 20 | 
            -
                     | 
| 21 | 
            -
                   | 
| 15 | 
            +
                  if token = scanner.scan(/\$/)
         | 
| 16 | 
            +
                    @path << token
         | 
| 17 | 
            +
                  elsif token = scanner.scan(/@/)
         | 
| 18 | 
            +
                    @path << token
         | 
| 19 | 
            +
                  elsif token = scanner.scan(/[a-zA-Z]+/)
         | 
| 22 20 | 
             
                    @path << "['#{token}']"
         | 
| 23 | 
            -
                   | 
| 24 | 
            -
                     | 
| 25 | 
            -
             | 
| 21 | 
            +
                  elsif token = scanner.scan(/'(.*?)'/)
         | 
| 22 | 
            +
                    @path << "[#{token}]"
         | 
| 23 | 
            +
                  elsif token = scanner.scan(/\[/)
         | 
| 24 | 
            +
                    count = 1
         | 
| 25 | 
            +
                    while !count.zero?
         | 
| 26 | 
            +
                      if t = scanner.scan(/\[/)
         | 
| 27 | 
            +
                        token << t
         | 
| 28 | 
            +
                        count += 1
         | 
| 29 | 
            +
                      elsif t = scanner.scan(/\]/)
         | 
| 30 | 
            +
                        token << t
         | 
| 31 | 
            +
                        count -= 1
         | 
| 32 | 
            +
                      elsif t = scanner.scan(/[^\[\]]*/)
         | 
| 33 | 
            +
                        token << t
         | 
| 34 | 
            +
                      end
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                    @path << token
         | 
| 37 | 
            +
                  elsif token = scanner.scan(/\.\./)
         | 
| 38 | 
            +
                    @path << token
         | 
| 39 | 
            +
                  elsif scanner.scan(/\./)
         | 
| 40 | 
            +
                  elsif token = scanner.scan(/\*/)
         | 
| 41 | 
            +
                    @path << token
         | 
| 42 | 
            +
                  elsif token = scanner.scan(/./)
         | 
| 43 | 
            +
                    @path.last << token
         | 
| 26 44 | 
             
                  end
         | 
| 27 45 | 
             
                end
         | 
| 28 46 | 
             
              end
         | 
    
        data/lib/jsonpath/enumerable.rb
    CHANGED
    
    | @@ -12,7 +12,7 @@ class JsonPath | |
| 12 12 | 
             
                  else
         | 
| 13 13 | 
             
                    case expr = @path[pos]
         | 
| 14 14 | 
             
                    when '*', '..'
         | 
| 15 | 
            -
                      each(node, pos + 1, &blk) | 
| 15 | 
            +
                      each(node, pos + 1, &blk)
         | 
| 16 16 | 
             
                    when '$'
         | 
| 17 17 | 
             
                      each(node, pos + 1, &blk) if node == @object
         | 
| 18 18 | 
             
                    when '@'
         | 
| @@ -42,7 +42,8 @@ class JsonPath | |
| 42 42 | 
             
                        end
         | 
| 43 43 | 
             
                      end
         | 
| 44 44 | 
             
                    else
         | 
| 45 | 
            -
                       | 
| 45 | 
            +
                      #p "#{node.inspect} ---> node #{@path[pos]}"
         | 
| 46 | 
            +
                      blk.call(node) if pos == (@path.size - 1) && node && eval("node #{@path[pos]}")
         | 
| 46 47 | 
             
                    end
         | 
| 47 48 |  | 
| 48 49 | 
             
                    if pos > 0 && @path[pos-1] == '..'
         | 
    
        data/spec/jsonpath_spec.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 7 | 
             
              - 1
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0.1. | 
| 8 | 
            +
              - 2
         | 
| 9 | 
            +
              version: 0.1.2
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Joshua Hull
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2010- | 
| 17 | 
            +
            date: 2010-04-27 00:00:00 -04:00
         | 
| 18 18 | 
             
            default_executable: 
         | 
| 19 19 | 
             
            dependencies: []
         | 
| 20 20 |  |