leenookx-json-mangler 0.1.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -10,6 +10,7 @@ format.
10
10
  == FEATURES/PROBLEMS:
11
11
 
12
12
  * compact Compacts all duplicated branches.
13
+ * extract Allows searching through the JSON data.
13
14
  * prune Allows removal of branches.
14
15
 
15
16
  == SYNOPSIS:
@@ -18,11 +19,13 @@ format.
18
19
 
19
20
  == REQUIREMENTS:
20
21
 
22
+ * cucumber (only for the unit tests)
21
23
  * json
22
24
 
23
25
  == INSTALL:
24
26
 
25
- * sudo gem install
27
+ * [sudo] gem sources -a http://gems.github.com
28
+ * [sudo] gem install leenookx-json-mangler
26
29
 
27
30
  == LICENSE:
28
31
 
data/Rakefile CHANGED
@@ -17,7 +17,6 @@ begin
17
17
  gemspec.description = "JSON data format mangling tools."
18
18
  gemspec.email = "lnookx@googlemail.com"
19
19
  gemspec.homepage = "http://github.com/leenookx/json-mangler"
20
- gemspec.description = "TODO"
21
20
  gemspec.authors = ["lee nookx"]
22
21
  end
23
22
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.1
@@ -1 +1 @@
1
- { "results": {"title": "A test document", "author": "My Name", "published": "1999", "keywords": ["rubbish", "nonsense"]} }
1
+ { "results": {"doc": {"title": "A test document", "author": "My Name", "published": "1999", "keywords": ["rubbish", "nonsense"]} } }
data/json-mangler.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{json-mangler}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["lee nookx"]
12
- s.date = %q{2009-08-30}
13
- s.description = %q{TODO}
12
+ s.date = %q{2009-08-31}
13
+ s.description = %q{JSON data format mangling tools.}
14
14
  s.email = %q{lnookx@googlemail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
@@ -51,11 +51,10 @@ Gem::Specification.new do |s|
51
51
  "lib/json-mangler/json_mangler.rb",
52
52
  "test/test_json_mangler.rb"
53
53
  ]
54
- s.has_rdoc = true
55
54
  s.homepage = %q{http://github.com/leenookx/json-mangler}
56
55
  s.rdoc_options = ["--charset=UTF-8"]
57
56
  s.require_paths = ["lib"]
58
- s.rubygems_version = %q{1.3.1}
57
+ s.rubygems_version = %q{1.3.4}
59
58
  s.summary = %q{JSON data format mangling tools.}
60
59
  s.test_files = [
61
60
  "test/test_json_mangler.rb"
@@ -63,7 +62,7 @@ Gem::Specification.new do |s|
63
62
 
64
63
  if s.respond_to? :specification_version then
65
64
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
66
- s.specification_version = 2
65
+ s.specification_version = 3
67
66
 
68
67
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
69
68
  else
@@ -59,43 +59,68 @@ class JSONExtractor
59
59
  def parse_object
60
60
  if @input.scan(/\{\s*/)
61
61
  output = ""
62
+ start_pos = @input.pos
62
63
  more_pairs = false
63
64
  capture = false
64
65
  while key = parse_string
65
66
  @input.scan(/\s*:\s*/) or error("Expecting object separator")
66
67
 
68
+ # If we're in object matching mode and we've found an object
69
+ # that matches the one we're looking for...
67
70
  if @mode == 1 and key == @searchval
68
71
  capture = true
69
72
  end
70
73
 
71
74
  res = parse_value
72
75
 
76
+ # If we're in data matching mode and the data associated
77
+ # will this object matches what we are looking for...
73
78
  if @mode == 2 and res == @searchval
74
- @current_depth = @capture_depth
75
- @force_capture = true
76
- end
79
+ if @capture_depth > 0
80
+ # Set the 'upward' depth to be captured.
81
+ @current_depth = @capture_depth
77
82
 
78
- if @capture_depth > 0
79
- output << key << ": " << res.to_s
83
+ # Force the capturing of this object.
84
+ @force_capture = true
85
+ else
86
+ capture = true
87
+ end
80
88
  end
81
89
 
82
- if @force_capture or (@mode == 1 and key == @searchval and capture)
83
- if @capture_depth == 0
84
- output << key << ": " << res
85
- end
90
+ if !@force_capture and capture
91
+ @output << key << ": " << res.to_s
92
+
93
+ # We've stopped capturing locally...
86
94
  capture = false
87
- if @current_depth == 0
88
- @output << output
89
- @force_capture = false
90
- else
91
- @current_depth = @current_depth - 1
92
- end
93
95
  end
94
96
 
95
- more_pairs = @input.scan(/\s*,\s*/) or break
97
+ # Handle special case of array match
98
+ if @force_capture
99
+ if @current_depth == -1
100
+ @output << key << ": " << res.to_s
101
+ @force_capture = false
102
+ @current_depth = 0
103
+ end
104
+ end
96
105
 
97
- if @capture_depth > 0
106
+ more_pairs = @input.scan(/\s*,\s*/)
107
+ if more_pairs
98
108
  output << ", "
109
+ else
110
+ if @force_capture and @current_depth == 0
111
+ last_pos = @input.pos
112
+
113
+ cur_pos = start_pos
114
+ @input.pos = cur_pos
115
+ while (cur_pos < last_pos)
116
+ @output << @input.getch
117
+ cur_pos = cur_pos + 1
118
+ end
119
+
120
+ @force_capture = false
121
+ else
122
+ @current_depth = @current_depth - 1
123
+ end
99
124
  end
100
125
  end
101
126
  error("Missing object pair") if more_pairs
@@ -111,6 +136,10 @@ class JSONExtractor
111
136
  more_values = false
112
137
  while contents = parse_value rescue nil
113
138
  array << contents
139
+ if contents == @searchval
140
+ @force_capture = true
141
+ @current_depth = -1
142
+ end
114
143
  more_values = @input.scan(/\s*,\s*/) or break
115
144
  array << ", "
116
145
  end
@@ -130,9 +159,13 @@ class JSONExtractor
130
159
  string << contents
131
160
  end
132
161
  @input.scan(/"/) or error("Unclosed string")
133
- string = string + '"'
134
- if @mode == 2 and string == @searchval
162
+ string << '"'
163
+
164
+ # If we're in data matching mode and this matches the
165
+ # value that we are searching for...
166
+ if @mode == 2 and string == @searchval and @capture_depth > 0
135
167
  @force_capture = true
168
+ @current_depth = @capture_depth
136
169
  end
137
170
  string
138
171
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leenookx-json-mangler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - lee nookx
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-30 00:00:00 -07:00
12
+ date: 2009-08-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: TODO
16
+ description: JSON data format mangling tools.
17
17
  email: lnookx@googlemail.com
18
18
  executables: []
19
19
 
@@ -56,7 +56,7 @@ files:
56
56
  - lib/json-mangler/json_extractor.rb
57
57
  - lib/json-mangler/json_mangler.rb
58
58
  - test/test_json_mangler.rb
59
- has_rdoc: true
59
+ has_rdoc: false
60
60
  homepage: http://github.com/leenookx/json-mangler
61
61
  licenses:
62
62
  post_install_message:
@@ -81,7 +81,7 @@ requirements: []
81
81
  rubyforge_project:
82
82
  rubygems_version: 1.3.5
83
83
  signing_key:
84
- specification_version: 2
84
+ specification_version: 3
85
85
  summary: JSON data format mangling tools.
86
86
  test_files:
87
87
  - test/test_json_mangler.rb