jazor 0.1.3 → 0.1.4

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/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "json"
4
+
5
+ group :development do
6
+ gem "rake"
7
+ gem "rspec"
8
+ end
9
+
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ json (1.6.5)
6
+ rake (0.9.2.2)
7
+ rspec (2.8.0)
8
+ rspec-core (~> 2.8.0)
9
+ rspec-expectations (~> 2.8.0)
10
+ rspec-mocks (~> 2.8.0)
11
+ rspec-core (2.8.0)
12
+ rspec-expectations (2.8.0)
13
+ diff-lcs (~> 1.1.2)
14
+ rspec-mocks (2.8.0)
15
+
16
+ PLATFORMS
17
+ ruby
18
+
19
+ DEPENDENCIES
20
+ json
21
+ rake
22
+ rspec
@@ -0,0 +1,135 @@
1
+ # Jazor
2
+
3
+ Jazor (JSON razor) is a simple command line JSON parsing tool.
4
+
5
+ ## Installation
6
+
7
+ gem install jazor
8
+
9
+ ## Usage
10
+
11
+ jazor [options] [source] [expression ...]
12
+
13
+ ### Options
14
+
15
+ See the **--help** command line option.
16
+
17
+ ### Sources
18
+
19
+ The **source** argument refers to a file, URL or string containing a JSON object.
20
+ Since attempts to implement a full-featured HTTP client within Jazor would have
21
+ been futile, Jazor also accepts input from STDIN. This means if you ever need
22
+ to use an advanced HTTP option that Jazor doesn't implement, you can always use
23
+ a *real* HTTP client (e.g. [cURL](http://curl.haxx.se/)) and simply pipe the
24
+ output to Jazor.
25
+
26
+ ### Expressions
27
+
28
+ Jazor accepts one or more Ruby **expressions** which are simply eval'ed within
29
+ the context of your JSON object. After Jazor parses your JSON input into native
30
+ Ruby data types (Hash, Array, etc.), these expressions are used to slice and
31
+ dice the data any way you want. The results will be "pretty printed" to STDOUT.
32
+
33
+ Note that hash keys can be accessed via standard Ruby (e.g. foo['bar'],
34
+ foo.fetch('bar'), etc.) or Javascript (e.g. foo.bar) syntax.
35
+
36
+ ### Expression Testing
37
+
38
+ Expression testing (**--test**) allows you to test the "truthiness" of your
39
+ expression results. If any expression returns a "falsy" value, Jazor will exit
40
+ with a non-zero return code. This is useful for calling Jazor from within shell
41
+ scripts.
42
+
43
+ ## Examples
44
+
45
+ $ jazor http://github.com/api/v2/json/commits/list/mconigliaro/jazor/master commits.count
46
+ 16
47
+
48
+ $ curl --silent http://github.com/api/v2/json/commits/list/mconigliaro/jazor/master | jazor commits.last.message
49
+ initial commit
50
+
51
+ $ jazor '{ "foo": "abc", "bar": [1, 2, 3] }' 'foo.split(//)'
52
+ ["a", "b", "c"]
53
+
54
+ $ jazor '{ "foo": "abc", "bar": [1, 2, 3] }' 'bar.inject { |memo,obj| memo + obj }'
55
+ 6
56
+
57
+ $ jazor '[1, 2, 3, 4, 5]' 'select(&:even?)'
58
+ [2, 4]
59
+
60
+ $ jazor '[1, 2, 3, 4, 5]' 'select(&:odd?)'
61
+ [1, 3, 5]
62
+
63
+ $ jazor '["a", "b", "c", "d", "e"]' 'self[1..3]'
64
+ ["b", "c", "d"]
65
+
66
+ $ jazor '[1, 2, 3, 4, 5]' "'odds=%s; evens=%s' % [select(&:odd?).join(','), select(&:even?).join(',')]"
67
+ odds=1,3,5; evens=2,4
68
+
69
+ ## Change Log
70
+
71
+ ### 0.1.4 (2012-03-05)
72
+
73
+ * Add --quirks-mode option
74
+ * Update all dependencies
75
+ * Refactoring
76
+
77
+ ### 0.1.3 (2011-12-13)
78
+
79
+ * Handle HTTPS URLs
80
+ * Use .rvmrc and Bundler in project
81
+ * Convert tests from Test::Unit to RSpec
82
+
83
+ ### 0.1.2 (2011-08-24)
84
+
85
+ * Apply sort after evaluating expression
86
+
87
+ ### 0.1.1 (2011-08-24)
88
+
89
+ * Added sort option (Dan Hopkins)
90
+
91
+ ### 0.1.0 (2011-08-23)
92
+
93
+ * Code refactoring
94
+ * Documentation rewrite
95
+ * Changed test option to a switch that operates on all expressions
96
+
97
+ ### 0.0.4 (2011-01-25)
98
+
99
+ * Print help summary on absence of input
100
+ * Bug fixes
101
+
102
+ ### 0.0.3 (2011-01-25)
103
+
104
+ * Bug fixes
105
+
106
+ ### 0.0.2 (2011-01-24)
107
+
108
+ * Initial public release
109
+
110
+ ## Licence
111
+
112
+ Copyright (C) 2012 Michael Paul Thomas Conigliaro
113
+
114
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
115
+ this software and associated documentation files (the "Software"), to deal in
116
+ the Software without restriction, including without limitation the rights to
117
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
118
+ of the Software, and to permit persons to whom the Software is furnished to do
119
+ so, subject to the following conditions:
120
+
121
+ The above copyright notice and this permission notice shall be included in all
122
+ copies or substantial portions of the Software.
123
+
124
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
125
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
126
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
127
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
128
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
129
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
130
+ SOFTWARE.
131
+
132
+ ## Credits
133
+
134
+ * [Michael Paul Thomas Conigliaro](http://conigliaro.org): Original author
135
+ * [Daniel Hopkins](https://github.com/danielhopkins): Sorted output
data/Rakefile CHANGED
@@ -1,15 +1,11 @@
1
- require 'rspec/core/rake_task'
2
-
3
- RSpec::Core::RakeTask.new(:spec)
4
-
5
- task :default => :spec
6
-
7
- desc 'Build the gem'
8
- task :build do
9
- system "gem build *.gemspec"
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:test) do |t|
5
+ t.rspec_opts = [
6
+ "-f doc",
7
+ "-r #{File.expand_path(File.join(File.dirname(__FILE__), "lib", "jazor.rb"))}"
8
+ ]
10
9
  end
11
10
 
12
- desc 'Push the gem'
13
- task :push do
14
- system "gem push *.gem"
15
- end
11
+ task :default => :test
data/bin/jazor CHANGED
@@ -1,57 +1,61 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'fcntl'
4
- require 'optparse'
5
-
6
- $:.push File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
7
- require 'jazor'
3
+ require "fcntl"
4
+ require "optparse"
8
5
 
6
+ $:.push File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
7
+ require "jazor"
9
8
 
10
9
  options = {
10
+ :quirks_mode => false,
11
11
  :test => false,
12
12
  :rest_data => {},
13
13
  :rest_headers => {},
14
- :rest_request => 'GET'
14
+ :rest_request => "GET"
15
15
  }
16
16
 
17
17
  OptionParser.new do |opts|
18
18
  opts.version = Jazor::VERSION
19
19
  opts.banner = "Usage: #{$0} [options] [source] [expression ...]\n\n"
20
20
 
21
- opts.on('-d', '--data NAME=VALUE', 'Data sent with REST request') do |opt|
22
- key, value = opt.split('=')
21
+ opts.on("-d", "--data NAME=VALUE", "Data sent with REST request") do |opt|
22
+ key, value = opt.split("=")
23
23
  options[:rest_data][key.strip] = value.strip
24
24
  end
25
25
 
26
- opts.on('-H', '--header NAME:VALUE', 'Header sent with REST request') do |opt|
27
- key, value = opt.split(':')
26
+ opts.on("-H", "--header NAME:VALUE", "Header sent with REST request") do |opt|
27
+ key, value = opt.split(":")
28
28
  options[:rest_headers][key.strip] = value.strip
29
29
  end
30
30
 
31
- opts.on('-t', '--test', 'Enable expression testing') do |opt|
31
+ opts.on("-t", "--test", "Enable expression testing") do |opt|
32
32
  options[:test] = true
33
33
  end
34
34
 
35
- opts.on('-v', '--verbose', 'Enable verbose logging') do |opt|
35
+ opts.on("-v", "--verbose", "Enable verbose logging") do |opt|
36
36
  Jazor::LOG.level = Logger::DEBUG
37
37
  end
38
38
 
39
- opts.on('-X', '--request REQUEST', 'REST request method (default: %s)' % options[:rest_request]) do |opt|
39
+ opts.on("-X", "--request REQUEST", "REST request method (default: %s)" % options[:rest_request]) do |opt|
40
40
  options[:rest_request] = opt
41
41
  end
42
42
 
43
43
  if Jazor::HAS_ORDERED_HASH
44
- opts.on('-s', '--sort', "Sort output") do
44
+ opts.on("-s", "--sort", "Sort output") do
45
45
  options[:sort] = true
46
46
  end
47
47
  end
48
48
 
49
- opts.on_tail('-h', '--help', 'Show this message') do
49
+ opts.on("-q", "--quirks-mode", 'Enable "quirks mode" for JSON parser') do
50
+ options[:quirks_mode] = true
51
+ end
52
+
53
+ opts.on_tail("-h", "--help", "Show this message") do
50
54
  puts opts.help
51
55
  exit
52
56
  end
53
57
 
54
- opts.on_tail('--version', 'Show version') do
58
+ opts.on_tail("--version", "Show version") do
55
59
  puts "%s %s\n%s <%s>\n%s" % [opts.program_name, opts.version, Jazor::AUTHOR, Jazor::AUTHOR_EMAIL, Jazor::URL]
56
60
  exit
57
61
  end
@@ -62,26 +66,30 @@ OptionParser.new do |opts|
62
66
  end
63
67
  end.parse!
64
68
 
69
+ parse_options = {
70
+ :quirks_mode => options[:quirks_mode]
71
+ }
72
+
65
73
  begin
66
74
 
67
75
  obj = if STDIN.fcntl(Fcntl::F_GETFL, 0) == 0
68
- Jazor::LOG.debug('Reading JSON from STDIN')
69
- Jazor::parse(STDIN.read)
76
+ Jazor::LOG.debug("Reading JSON from STDIN")
77
+ Jazor::parse(STDIN.read, parse_options)
70
78
  elsif !ARGV[0].nil?
71
79
  if ARGV[0] =~ URI::regexp
72
80
  Jazor::LOG.debug("Reading JSON from URI: #{ARGV[0]}")
73
- Jazor::parse(Jazor::RestClient.send(options[:rest_request], ARGV.shift, options[:rest_headers], options[:rest_data]).body)
81
+ Jazor::parse(Jazor::RestClient.send(options[:rest_request], ARGV.shift, options[:rest_headers], options[:rest_data]).body, parse_options)
74
82
  elsif File.readable?(ARGV[0])
75
83
  Jazor::LOG.debug("Reading JSON from file: #{ARGV[0]}")
76
- Jazor::parse(IO.read(ARGV.shift))
84
+ Jazor::parse(IO.read(ARGV.shift), parse_options)
77
85
  else
78
86
  Jazor::LOG.debug("Reading JSON from ARGV: #{ARGV[0]}")
79
- Jazor::parse(ARGV.shift)
87
+ Jazor::parse(ARGV.shift, parse_options)
80
88
  end
81
89
  end
82
90
 
83
91
  (ARGV.length > 0 ? ARGV[0..ARGV.length] : [nil]).each do |expression|
84
- result = expression.nil? ? obj : obj.instance_eval(expression)
92
+ result = Jazor::evaluate(obj, expression)
85
93
 
86
94
  if options[:sort] && result.respond_to?(:sort)
87
95
  result = if result.respond_to?(:keys) && result.respond_to?(:values)
@@ -99,13 +107,17 @@ begin
99
107
  exit(1)
100
108
  end
101
109
  else
102
- puts [Hash, Array].include?(result.class) ? JSON.pretty_generate(result) : result
110
+ if [Hash, Array].include?(result.class)
111
+ puts JSON.pretty_generate(result)
112
+ elsif result.is_a?(String)
113
+ puts "\"#{result}\""
114
+ else
115
+ puts result
116
+ end
103
117
  end
104
118
  end
105
119
 
106
120
  rescue StandardError => e
107
- puts e
108
- puts e.backtrace
109
- Jazor::LOG.error(e.message)
121
+ Jazor::LOG.error(e)
110
122
  exit(1)
111
123
  end
@@ -0,0 +1,23 @@
1
+ $:.push File.expand_path(File.join(File.dirname(__FILE__), "lib"))
2
+ require "jazor"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = Jazor::NAME
6
+ s.version = Jazor::VERSION
7
+ s.authors = Jazor::AUTHOR
8
+ s.email = Jazor::AUTHOR_EMAIL
9
+ s.homepage = Jazor::URL
10
+ s.rubyforge_project = Jazor::NAME
11
+ s.summary = Jazor::DESCRIPTION
12
+ s.description = Jazor::DESCRIPTION
13
+
14
+ s.add_dependency("bundler")
15
+ s.add_dependency("json")
16
+
17
+ s.add_development_dependency("rake")
18
+ s.add_development_dependency("rspec")
19
+
20
+ s.files = ["jazor.gemspec", "Gemfile", "Gemfile.lock", "README.md"] + Dir["bin/*"] + Dir["lib/*.rb"]
21
+ s.test_files = ["Rakefile"] + Dir["spec/*"]
22
+ s.executables = ["jazor"]
23
+ end
@@ -1,45 +1,44 @@
1
- require 'logger'
2
- require 'net/http'
3
- require 'net/https'
4
- require 'pp'
5
- require 'uri'
6
-
7
- require 'rubygems'
8
- require 'json'
1
+ require "rubygems"
2
+ require "bundler/setup"
9
3
 
4
+ require "json"
5
+ require "logger"
6
+ require "net/http"
7
+ require "net/https"
8
+ require "pp"
9
+ require "uri"
10
10
 
11
11
  module Jazor
12
12
 
13
- NAME = 'jazor'
14
- VERSION = '0.1.3'
15
- AUTHOR = 'Michael Paul Thomas Conigliaro'
16
- AUTHOR_EMAIL = 'mike [at] conigliaro [dot] org'
17
- DESCRIPTION = 'Jazor (JSON razor) is a simple command line JSON parsing tool.'
18
- URL = 'http://github.com/mconigliaro/jazor'
13
+ NAME = "jazor"
14
+ VERSION = "0.1.4"
15
+ AUTHOR = "Michael Paul Thomas Conigliaro"
16
+ AUTHOR_EMAIL = "mike [at] conigliaro [dot] org"
17
+ DESCRIPTION = "Jazor (JSON razor) is a simple command line JSON parsing tool."
18
+ URL = "http://github.com/mconigliaro/jazor"
19
19
 
20
20
  LOG = Logger.new(STDOUT)
21
21
  LOG.level = Logger::INFO
22
22
 
23
- HAS_ORDERED_HASH = (RUBY_VERSION.split('.').map(&:to_i) <=> [1, 9, 1]) >= 0
23
+ HAS_ORDERED_HASH = (RUBY_VERSION.split(".").map(&:to_i) <=> [1, 9, 1]) >= 0
24
24
 
25
- def self.parse(input=nil)
26
- # FIXME: https://github.com/flori/json/issues/16
27
- obj = (JSON.parse(input) rescue false) || (Integer(input) rescue false) || (Float(input) rescue false) || String(input)
28
- if obj.is_a?(String)
29
- if obj == 'true'
30
- obj = true
31
- elsif obj == 'false'
32
- obj = false
33
- end
34
- end
25
+ def self.parse(input=nil, options={})
26
+ obj = JSON.parse(input, options)
27
+ Jazor::LOG.debug("Parsed JSON as a #{obj.class}")
35
28
  obj
36
29
  end
37
30
 
31
+ def self.evaluate(obj, expression)
32
+ result = expression.nil? ? obj : obj.instance_eval(expression)
33
+ Jazor::LOG.debug("Expression (#{expression}) returns a #{result.class}")
34
+ result
35
+ end
36
+
38
37
  class RestClient
39
38
  def self.method_missing(method, uri, headers={}, data={})
40
39
  uri_parsed = URI.parse(uri)
41
40
  http = Net::HTTP.new(uri_parsed.host, port=uri_parsed.port)
42
- if uri_parsed.scheme == 'https'
41
+ if uri_parsed.scheme == "https"
43
42
  http.use_ssl = true
44
43
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
45
44
  end
@@ -50,7 +49,7 @@ module Jazor
50
49
 
51
50
  LOG.debug("#{self} #{method.to_s.upcase}: uri=#{File.join(uri_parsed.host, request_uri)} headers=#{headers.to_json} data=#{data.to_json}")
52
51
  response = http.request(request)
53
- LOG.debug("#{self} result: code=#{response.code} body=%s" % response.body.gsub("\r", ' ').gsub("\n", ' '))
52
+ LOG.debug("#{self} result: code=#{response.code} body=%s" % response.body.gsub("\r", " ").gsub("\n", " "))
54
53
 
55
54
  response
56
55
  end
@@ -0,0 +1,67 @@
1
+ describe "Jazor command" do
2
+
3
+ before(:all) do
4
+ @test_url = "http://github.com/api/v2/json/commits/list/mconigliaro/jazor/master"
5
+ @test_file = File.expand_path(File.join(File.dirname(__FILE__), "test.json"))
6
+ @test_hash = JSON.parse(IO.read(@test_file))
7
+ @jazor_bin = File.expand_path(File.join(File.dirname(__FILE__), "..", "bin", "jazor"))
8
+ end
9
+
10
+ it "prints a help summary on absence of input" do
11
+ `#{@jazor_bin}`.should =~ /Usage:/
12
+ end
13
+
14
+ it "parses JSON from STDIN" do
15
+ JSON.parse(`cat #{@test_file} | #{@jazor_bin} -q`).should == @test_hash
16
+ end
17
+
18
+ it "parses JSON from a URL" do
19
+ JSON.parse(`#{@jazor_bin} "#{@test_url}"`).should be_a Hash
20
+ end
21
+
22
+ it "parses JSON from a file" do
23
+ JSON.parse(`#{@jazor_bin} #{@test_file}`).should == @test_hash
24
+ end
25
+
26
+ it "parses JSON from ARGV" do
27
+ JSON.parse(`#{@jazor_bin} '#{IO.read(@test_file)}'`).should == @test_hash
28
+ end
29
+
30
+ it "parses true/false values in quirks mode" do
31
+ [true, false].each do |obj|
32
+ eval(`#{@jazor_bin} -q "#{obj}"`).should == obj
33
+ end
34
+ end
35
+
36
+ it "exits with non-zero status on invalid JSON" do
37
+ `#{@jazor_bin} invalid`
38
+ $?.should_not == 0
39
+ end
40
+
41
+ it "parses JSON from a file with an expression" do
42
+ JSON.parse(`#{@jazor_bin} #{@test_file} test_Array`).should == @test_hash["test_Array"]
43
+ %w{String Integer Float TrueClass FalseClass}.each do |t|
44
+ eval(`#{@jazor_bin} #{@test_file} test_#{t}`).should == @test_hash["test_#{t}"]
45
+ end
46
+ eval(`#{@jazor_bin} #{@test_file} dontexist`).should be_nil
47
+ end
48
+
49
+ it "parses JSON from a file with tests" do
50
+ `#{@jazor_bin} -t #{@test_file} "test_Integer==123"`.should =~ /passed/
51
+ `#{@jazor_bin} -t #{@test_file} "test_Integer==1234"`.should =~ /failed/
52
+ end
53
+
54
+ it "sorts output" do
55
+ if Jazor::HAS_ORDERED_HASH
56
+ {
57
+ "[3, 2, 1]" => [1, 2, 3],
58
+ '["foo", "bar", 1]' => [1, "bar", "foo"],
59
+ '{"foo":1, "bar":2}' => {"bar" => 2, "foo" => 1},
60
+ '{"1":1, "bar":2}' => {"1" => 1, "bar" => 2}
61
+ }.each do |k,v|
62
+ JSON.parse(`#{@jazor_bin} -s '#{k}'`).should == v
63
+ end
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,44 @@
1
+ describe "Jazor lib" do
2
+
3
+ before(:all) do
4
+ @test_file = IO.read(File.expand_path(File.join(File.dirname(__FILE__), "test.json")))
5
+ @test_hash = JSON.parse(@test_file)
6
+ end
7
+
8
+ %w{String Integer Float TrueClass FalseClass Array}.each do |t|
9
+ it "parses #{t} values in the root object" do
10
+ obj = Jazor::parse(@test_file)["test_#{t}"]
11
+ obj.should be_a Kernel.const_get(t)
12
+ obj.should == @test_hash["test_#{t}"]
13
+ end
14
+
15
+ it "evaluates the expression \"test_#{t}\" and returns the correct result" do
16
+ obj = Jazor::evaluate(Jazor::parse(@test_file), "test_#{t}")
17
+ obj.should be_a Kernel.const_get(t)
18
+ obj.should == @test_hash["test_#{t}"]
19
+ end
20
+ end
21
+
22
+ describe "REST client" do
23
+
24
+ it "can issue GET requests over HTTP" do
25
+ response = Jazor::RestClient.get("http://ajax.googleapis.com/ajax/services/search/web")
26
+ response.code.should == "200"
27
+ response.body.should =~ /"responseStatus": 400/
28
+ end
29
+
30
+ it "can issue GET requests over HTTPS" do
31
+ response = Jazor::RestClient.get("https://github.com/api/v2/json/commits/list/mconigliaro/jazor/master")
32
+ response.code.should == "200"
33
+ end
34
+
35
+ it "can issue GET requests over HTTP with a query string" do
36
+ response = Jazor::RestClient.get("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=jazor")
37
+ response.code.should == "200"
38
+ response.body.should =~ /"responseStatus": 200/
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "test_String": "123",
3
+ "test_Integer": 123,
4
+ "test_Float": 0.123,
5
+ "test_TrueClass": true,
6
+ "test_FalseClass": false,
7
+ "test_Array": [1, 2, 3]
8
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jazor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-13 00:00:00.000000000 Z
12
+ date: 2012-03-06 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &2153832180 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2153832180
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: json
16
- requirement: &2151885000 !ruby/object:Gem::Requirement
27
+ requirement: &2153831560 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,7 +32,29 @@ dependencies:
21
32
  version: '0'
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *2151885000
35
+ version_requirements: *2153831560
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &2153830560 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2153830560
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &2153828820 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2153828820
25
58
  description: Jazor (JSON razor) is a simple command line JSON parsing tool.
26
59
  email: mike [at] conigliaro [dot] org
27
60
  executables:
@@ -29,12 +62,16 @@ executables:
29
62
  extensions: []
30
63
  extra_rdoc_files: []
31
64
  files:
32
- - CHANGELOG.rdoc
33
- - LICENSE
34
- - Rakefile
35
- - README.rdoc
65
+ - jazor.gemspec
66
+ - Gemfile
67
+ - Gemfile.lock
68
+ - README.md
36
69
  - bin/jazor
37
70
  - lib/jazor.rb
71
+ - Rakefile
72
+ - spec/jazor_cli_spec.rb
73
+ - spec/jazor_lib_spec.rb
74
+ - spec/test.json
38
75
  homepage: http://github.com/mconigliaro/jazor
39
76
  licenses: []
40
77
  post_install_message:
@@ -47,6 +84,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
47
84
  - - ! '>='
48
85
  - !ruby/object:Gem::Version
49
86
  version: '0'
87
+ segments:
88
+ - 0
89
+ hash: 607493245767784991
50
90
  required_rubygems_version: !ruby/object:Gem::Requirement
51
91
  none: false
52
92
  requirements:
@@ -55,8 +95,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
95
  version: '0'
56
96
  requirements: []
57
97
  rubyforge_project: jazor
58
- rubygems_version: 1.8.10
98
+ rubygems_version: 1.8.17
59
99
  signing_key:
60
100
  specification_version: 3
61
101
  summary: Jazor (JSON razor) is a simple command line JSON parsing tool.
62
- test_files: []
102
+ test_files:
103
+ - Rakefile
104
+ - spec/jazor_cli_spec.rb
105
+ - spec/jazor_lib_spec.rb
106
+ - spec/test.json
@@ -1,34 +0,0 @@
1
- = Change Log
2
-
3
- == 0.1.3 (2011-12-13)
4
-
5
- * Handle HTTPS URLs
6
- * Use .rvmrc and Bundler in project
7
- * Convert tests from Test::Unit to RSpec
8
-
9
- == 0.1.2 (2011-08-24)
10
-
11
- * Apply sort after evaluating expression
12
-
13
- == 0.1.1 (2011-08-24)
14
-
15
- * Added sort option (Dan Hopkins)
16
-
17
- == 0.1.0 (2011-08-23)
18
-
19
- * Code refactoring
20
- * Documentation rewrite
21
- * Changed test option to a switch that operates on all expressions
22
-
23
- == 0.0.4 (2011-01-25)
24
-
25
- * Print help summary on absence of input
26
- * Bug fixes
27
-
28
- == 0.0.3 (2011-01-25)
29
-
30
- * Bug fixes
31
-
32
- == 0.0.2 (2011-01-24)
33
-
34
- * Initial public release
data/LICENSE DELETED
@@ -1,19 +0,0 @@
1
- Copyright (C) 2011 Michael Paul Thomas Conigliaro
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of
4
- this software and associated documentation files (the "Software"), to deal in
5
- the Software without restriction, including without limitation the rights to
6
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
- of the Software, and to permit persons to whom the Software is furnished to do
8
- so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.
@@ -1,75 +0,0 @@
1
- = Jazor
2
-
3
- Jazor (JSON razor) is a simple command line JSON parsing tool.
4
-
5
- == Installation
6
-
7
- gem install jazor
8
-
9
- == Usage
10
-
11
- jazor [options] [source] [expression ...]
12
-
13
- === Options
14
-
15
- See the *--help* command line option.
16
-
17
- === Sources
18
-
19
- The *source* argument refers to a file, URL or string containing a JSON object.
20
- Since attempts to implement a full-featured HTTP client within Jazor would have
21
- been futile, Jazor also accepts input from STDIN. This means if you ever need
22
- to use an advanced HTTP option that Jazor doesn't implement, you can always use
23
- a *real* HTTP client (e.g. {cURL}[http://curl.haxx.se/]) and simply pipe the
24
- output to Jazor.
25
-
26
- === Expressions
27
-
28
- Jazor accepts one or more Ruby *expressions* which are simply eval'ed within
29
- the context of your JSON object. After Jazor parses your JSON input into native
30
- Ruby data types (Hash, Array, etc.), these expressions are used to slice and
31
- dice the data any way you want. The results will be "pretty printed" to STDOUT.
32
-
33
- Note that hash keys can be accessed via standard Ruby (e.g. foo['bar'],
34
- foo.fetch('bar'), etc.) or Javascript (e.g. foo.bar) syntax.
35
-
36
- === Expression Testing
37
-
38
- Expression testing (*--test*) allows you to test the "truthiness" of your
39
- expression results. If any expression returns a "falsy" value, Jazor will exit
40
- with a non-zero return code. This is useful for calling Jazor from within shell
41
- scripts.
42
-
43
- == Examples
44
-
45
- $ jazor http://github.com/api/v2/json/commits/list/mconigliaro/jazor/master commits.count
46
- 16
47
-
48
- $ curl --silent http://github.com/api/v2/json/commits/list/mconigliaro/jazor/master | jazor commits.last.message
49
- initial commit
50
-
51
- $ jazor '{ "foo": "abc", "bar": [1, 2, 3] }' 'foo.split(//)'
52
- ["a", "b", "c"]
53
-
54
- $ jazor '{ "foo": "abc", "bar": [1, 2, 3] }' 'bar.inject { |memo,obj| memo + obj }'
55
- 6
56
-
57
- $ jazor '[1, 2, 3, 4, 5]' 'select(&:even?)'
58
- [2, 4]
59
-
60
- $ jazor '[1, 2, 3, 4, 5]' 'select(&:odd?)'
61
- [1, 3, 5]
62
-
63
- $ jazor '["a", "b", "c", "d", "e"]' 'self[1..3]'
64
- ["b", "c", "d"]
65
-
66
- $ jazor '[1, 2, 3, 4, 5]' "'odds=%s; evens=%s' % [select(&:odd?).join(','), select(&:even?).join(',')]"
67
- odds=1,3,5; evens=2,4
68
-
69
- == Authors
70
-
71
- * Michael Paul Thomas Conigliaro <mike [at] conigliaro [dot] org>
72
-
73
- == Contributers
74
-
75
- * {Daniel Hopkins}[https://github.com/danielhopkins]