jgrep 1.1.1 → 1.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/bin/jgrep CHANGED
@@ -13,6 +13,9 @@ OptionParser.new do |opts|
13
13
  opts.on("-f", "--flat", "Display non pretty json") do
14
14
  options[:flat] = true
15
15
  end
16
+ opts.on("-v", "--verbose", "Verbose output") do
17
+ JGrep::verbose_on
18
+ end
16
19
 
17
20
  end.parse!
18
21
 
@@ -41,7 +44,7 @@ begin
41
44
 
42
45
  unless options[:field]
43
46
  result = JGrep::jgrep((json), expression)
44
- unless result == "[]"
47
+ unless result == []
45
48
  (options[:flat] == false) ? puts(JSON.pretty_generate(result)) : puts(result.to_json)
46
49
  end
47
50
  else
data/jgrep.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "jgrep"
3
- s.version = "1.1.1"
3
+ s.version = "1.1.2"
4
4
 
5
5
  s.authors = ["P Loubser"]
6
6
  s.date = %q{2011-07-20}
data/lib/jgrep.rb CHANGED
@@ -4,26 +4,48 @@ require 'parser/parser.rb'
4
4
  require 'parser/scanner.rb'
5
5
  require 'rubygems'
6
6
  require 'json'
7
+ require 'pp'
7
8
 
8
9
  module JGrep
10
+ @verbose = false
11
+
12
+ def self.verbose_on
13
+ @verbose = true
14
+ end
9
15
 
10
16
  #Method parses json and returns documents that match the logical expression
11
17
  def self.jgrep(json, expression)
18
+ errors = ""
12
19
  begin
13
20
  call_stack = Parser.new(expression).execution_stack
14
21
  result = []
15
22
  json = JSON.parse(json)
16
23
  json.each do |document|
17
- if eval_statement(document, call_stack)
18
- result << document
24
+ begin
25
+ if eval_statement(document, call_stack)
26
+ result << document
27
+ end
28
+ rescue Exception => e
29
+ if @verbose
30
+ pp document
31
+ STDERR.puts "Error - #{e} \n\n"
32
+ else
33
+ errors = "One or more the json documents could not be parsed. Run jgrep -v for to display documents"
34
+ end
19
35
  end
20
36
  end
37
+
38
+ unless errors == ""
39
+ puts errors
40
+ end
41
+
21
42
  return result
22
43
 
23
44
  rescue JSON::ParserError => e
24
45
  STDERR.puts "Error. Invalid JSON given"
25
46
  exit 1
26
47
  end
48
+
27
49
  end
28
50
 
29
51
  #Correctly format values so we can do the correct type of comparison
@@ -52,6 +74,9 @@ module JGrep
52
74
 
53
75
  key.split(".").each_with_index do |item,i|
54
76
  tmp = tmp[item]
77
+ if tmp.nil?
78
+ return false
79
+ end
55
80
  result = false
56
81
  if tmp.is_a? Array
57
82
  return (is_object_in_array?(tmp, "#{key.split(".")[i+1]}#{op}#{value}"))
@@ -105,6 +130,9 @@ module JGrep
105
130
 
106
131
  field.split(".").each_with_index do |item, i|
107
132
  tmp = tmp[item]
133
+ if tmp.nil?
134
+ return false
135
+ end
108
136
  if tmp.is_a? Array
109
137
  tmp.each do |doc|
110
138
  result = []
@@ -121,7 +149,6 @@ module JGrep
121
149
  left = token[1].split(op[0]).first.split(".").last
122
150
  right = token[1].split(op[0]).last
123
151
  new_statement = left + op[0] + right
124
- # new_statement = token[1].split(/<=|>=|=|<|>/).first.split(".").last + token[1].split(/<=|>=|=|<|>/).last
125
152
  result << has_object?(doc, new_statement)
126
153
  end
127
154
  end
@@ -62,8 +62,7 @@ module JGrep
62
62
  end
63
63
  end
64
64
  rescue NoMethodError => e
65
- pp e
66
- raise "Cannot end statement with 'and', 'or', 'not'"
65
+ raise "Error. Expression cannot be parsed."
67
66
  end
68
67
 
69
68
  private
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 1
9
- version: 1.1.1
8
+ - 2
9
+ version: 1.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - P Loubser