jgrep 1.3.0.1 → 1.3.1
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/bin/jgrep +76 -42
- data/jgrep.gemspec +2 -2
- data/lib/jgrep.rb +24 -3
- metadata +2 -3
data/bin/jgrep
CHANGED
@@ -3,21 +3,68 @@
|
|
3
3
|
require 'jgrep'
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
options = {:flat => false, :start => nil}
|
6
|
+
@options = {:flat => false, :start => nil}
|
7
|
+
|
8
|
+
def print_json(result)
|
9
|
+
unless @options[:flat]
|
10
|
+
result = result.first if @options[:stream]
|
11
|
+
puts(JSON.pretty_generate(result))
|
12
|
+
else
|
13
|
+
puts(result.first.to_json)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def do_grep(json, expression)
|
18
|
+
unless @options[:field]
|
19
|
+
result = JGrep::jgrep((json), expression, nil, @options[:start])
|
20
|
+
unless result == [] or @options[:quiet] == true
|
21
|
+
print_json(result)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
if @options[:field].is_a? Array
|
25
|
+
JGrep::validate_filters(@options[:field])
|
26
|
+
result = JGrep::jgrep((json), expression, @options[:field], @options[:start])
|
27
|
+
unless result == [] or @options[:quiet] == true
|
28
|
+
print_json(result)
|
29
|
+
end
|
30
|
+
|
31
|
+
else
|
32
|
+
JGrep::validate_filters(@options[:field])
|
33
|
+
result = JGrep::jgrep((json), expression, @options[:field], @options[:start])
|
34
|
+
unless result.first.is_a?(Hash) || result.flatten.first.is_a?(Hash)
|
35
|
+
unless @options[:quiet] == true
|
36
|
+
result.map{|x| puts x unless x.nil?}
|
37
|
+
end
|
38
|
+
else
|
39
|
+
unless @options[:quiet] == true
|
40
|
+
print_json(result)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
7
46
|
|
8
47
|
begin
|
9
48
|
OptionParser.new do |opts|
|
10
49
|
opts.banner = "Usage: jgrep [options] \"expression\""
|
11
50
|
opts.on("-s", "--simple [FIELDS]", "Display only one or more fields from each of the resulting json documents") do |field|
|
12
|
-
|
13
|
-
|
51
|
+
unless field.nil?
|
52
|
+
if (field.split(" ")).size > 1
|
53
|
+
@options[:field] = field.split(" ")
|
54
|
+
else
|
55
|
+
@options[:field] = field
|
56
|
+
end
|
14
57
|
else
|
15
|
-
|
58
|
+
raise "-s flag requires a field value"
|
16
59
|
end
|
17
60
|
end
|
18
61
|
|
19
62
|
opts.on("-c", "--compact", "Display non pretty json") do
|
20
|
-
options[:flat] = true
|
63
|
+
@options[:flat] = true
|
64
|
+
end
|
65
|
+
|
66
|
+
opts.on("-n", "--stream", "Display continuous output from continuous input") do
|
67
|
+
@options[:stream] = true
|
21
68
|
end
|
22
69
|
|
23
70
|
opts.on("-f", "--flatten", "Makes output as flat as possible") do
|
@@ -25,11 +72,11 @@ begin
|
|
25
72
|
end
|
26
73
|
|
27
74
|
opts.on("-i", "--input [FILENAME]", "Specify input file to parse") do |filename|
|
28
|
-
options[:file] = filename
|
75
|
+
@options[:file] = filename
|
29
76
|
end
|
30
77
|
|
31
78
|
opts.on("-q", "--quiet", "Quiet; don't write to stdout. Exit with zero status if match found.") do
|
32
|
-
options[:quiet] = true
|
79
|
+
@options[:quiet] = true
|
33
80
|
end
|
34
81
|
|
35
82
|
opts.on("-v", "--verbose", "Verbose output") do
|
@@ -37,12 +84,16 @@ begin
|
|
37
84
|
end
|
38
85
|
|
39
86
|
opts.on("--start [FIELD]", "Where in the data to start from") do |field|
|
40
|
-
options[:start] = field
|
87
|
+
@options[:start] = field
|
41
88
|
end
|
42
89
|
end.parse!
|
43
90
|
rescue OptionParser::InvalidOption => e
|
44
91
|
puts e.to_s.capitalize
|
45
92
|
exit 1
|
93
|
+
|
94
|
+
rescue Exception => e
|
95
|
+
puts e
|
96
|
+
exit 1
|
46
97
|
end
|
47
98
|
|
48
99
|
begin
|
@@ -58,52 +109,35 @@ begin
|
|
58
109
|
|
59
110
|
expression = "" if expression.nil?
|
60
111
|
|
112
|
+
#Continuously gets if inputstream in constant
|
61
113
|
#Load json from standard input if tty is false
|
62
114
|
#else find and load file from command line arugments
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
115
|
+
|
116
|
+
if @options[:stream]
|
117
|
+
unless STDIN.tty?
|
118
|
+
while json = gets
|
119
|
+
do_grep(json, expression)
|
120
|
+
end
|
68
121
|
else
|
69
122
|
raise "No json input specified"
|
70
123
|
end
|
71
|
-
end
|
72
|
-
|
73
|
-
unless options[:field]
|
74
|
-
result = JGrep::jgrep((json), expression, nil, options[:start])
|
75
|
-
unless result == [] or options[:quiet] == true
|
76
|
-
(options[:flat] == false) ? puts(JSON.pretty_generate(result)) : puts(result.to_json)
|
77
|
-
end
|
78
|
-
if result.length == 0
|
79
|
-
exit 1
|
80
|
-
end
|
81
124
|
else
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
unless result == [] or options[:quiet] == true
|
86
|
-
puts(JSON.pretty_generate(result))
|
87
|
-
end
|
88
|
-
|
125
|
+
unless STDIN.tty?
|
126
|
+
json = STDIN.read
|
127
|
+
do_grep(json, expression)
|
89
128
|
else
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
unless options[:quiet] == true
|
94
|
-
result.map{|x| puts x unless x.nil?}
|
95
|
-
end
|
129
|
+
if @options[:file]
|
130
|
+
json = File.read(@options[:file])
|
131
|
+
do_grep(json, expression)
|
96
132
|
else
|
97
|
-
|
98
|
-
puts(JSON.pretty_generate(result))
|
99
|
-
end
|
100
|
-
end
|
101
|
-
unless result.length > 0
|
102
|
-
exit 1
|
133
|
+
raise "No json input specified"
|
103
134
|
end
|
104
135
|
end
|
105
136
|
end
|
106
137
|
|
138
|
+
rescue Interrupt
|
139
|
+
STDERR.puts "Exiting..."
|
140
|
+
exit 1
|
107
141
|
rescue Exception => e
|
108
142
|
if e.is_a?(SystemExit)
|
109
143
|
exit e.status
|
data/jgrep.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "jgrep"
|
3
|
-
s.version = "1.3.
|
3
|
+
s.version = "1.3.1"
|
4
4
|
|
5
5
|
s.authors = ["P Loubser"]
|
6
|
-
s.date = %q{2011-
|
6
|
+
s.date = %q{2011-12-15}
|
7
7
|
s.default_executable = "jgrep"
|
8
8
|
s.add_dependency('json')
|
9
9
|
s.description = "Compare a list of json documents to a simple logical language and returns matches as output"
|
data/lib/jgrep.rb
CHANGED
@@ -4,12 +4,28 @@ require 'parser/parser.rb'
|
|
4
4
|
require 'parser/scanner.rb'
|
5
5
|
require 'rubygems'
|
6
6
|
require 'json'
|
7
|
-
#require 'yajl/json_gem'
|
8
7
|
|
9
8
|
module JGrep
|
10
9
|
@verbose = false
|
11
10
|
@flatten = false
|
12
11
|
|
12
|
+
class JGrep
|
13
|
+
attr_accessor :value, :expression
|
14
|
+
|
15
|
+
def initialize()
|
16
|
+
@value = ""
|
17
|
+
@expression = ""
|
18
|
+
end
|
19
|
+
|
20
|
+
def match_expression(expression)
|
21
|
+
return !::JGrep.jgrep(@value, expression).empty?
|
22
|
+
end
|
23
|
+
|
24
|
+
def match_value(value)
|
25
|
+
return !::JGrep.jgrep(value, @expression).empty?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
13
29
|
def self.verbose_on
|
14
30
|
@verbose = true
|
15
31
|
end
|
@@ -26,7 +42,11 @@ module JGrep
|
|
26
42
|
errors = ""
|
27
43
|
begin
|
28
44
|
JSON.create_id = nil
|
29
|
-
|
45
|
+
|
46
|
+
if json.class == String
|
47
|
+
json = JSON.parse(json)
|
48
|
+
end
|
49
|
+
|
30
50
|
if json.is_a? Hash
|
31
51
|
json = [json]
|
32
52
|
end
|
@@ -48,7 +68,7 @@ module JGrep
|
|
48
68
|
pp document
|
49
69
|
STDERR.puts "Error - #{e} \n\n"
|
50
70
|
else
|
51
|
-
errors = "One or more the json documents could not be parsed. Run jgrep -v
|
71
|
+
errors = "One or more the json documents could not be parsed. Run jgrep -v to display documents"
|
52
72
|
end
|
53
73
|
end
|
54
74
|
end
|
@@ -72,6 +92,7 @@ module JGrep
|
|
72
92
|
end
|
73
93
|
end
|
74
94
|
|
95
|
+
|
75
96
|
#Convert a specific hash inside a JSON document to an array
|
76
97
|
#Mark is a string in the format foo.bar.baz that points to
|
77
98
|
#the array in the document.
|
metadata
CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 3
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
version: 1.3.
|
9
|
+
version: 1.3.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- P Loubser
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-
|
17
|
+
date: 2011-12-15 00:00:00 +00:00
|
19
18
|
default_executable: jgrep
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|