simple-json 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -84,7 +84,33 @@ class SimpleJSON
84
84
  if v.nil? || v == true || v == false
85
85
  r_data
86
86
  else
87
- v.to_a.inject(Hash.new) { |mem,obj| mem[obj[0]] = r_data[obj[0]]; mem }
87
+ v.to_a.inject(Hash.new) do |mem,obj|
88
+ if obj[1].nil? || obj[1] == true || obj[1] == false
89
+ mem[obj[0]] = r_data[obj[0]]
90
+ elsif obj[1].is_a?(Integer)
91
+ mem[obj[0]] = r_data[obj[0]][obj[1]]
92
+ elsif obj[1] == 'first'
93
+ mem[obj[0]] = r_data[obj[0]].first
94
+ elsif obj[1] == 'last'
95
+ mem[obj[0]] = r_data[obj[0]].last
96
+ elsif obj[1] =~ /^([^\.]+)(\.\.\.*)([^\.]+)$/
97
+ one = $1.to_i; three = $3.to_i
98
+ if one.is_a?(Integer) and three.is_a?(Integer)
99
+ if $2 == '..'
100
+ mem[obj[0]] = r_data[obj[0]][one..three]
101
+ elsif $2 == '...'
102
+ mem[obj[0]] = r_data[obj[0]][one...three]
103
+ else
104
+ mem[obj[0]] = {'error' => "Bad slice syntax, you wrote: < #{$2} >, should have been < .. > or < ... >."}
105
+ end
106
+ else
107
+ mem[obj[0]] = {'error' => "Bad slice syntax, must be 2 integers with dots in between... i.e. < 11..14 >"}
108
+ end
109
+ else
110
+ mem[obj[0]] = {'error' => "Unknown key fetching syntax: #{obj[1].inspect}"}
111
+ end
112
+ mem
113
+ end
88
114
  end
89
115
  end
90
116
 
@@ -129,7 +129,88 @@ class TestSimpleJSONDB < Test::Unit::TestCase
129
129
  assert(o_data[query][@@id].size == 2)
130
130
  end
131
131
 
132
- def test_13_delete
132
+ def test_13_get_array_item
133
+ o_data = JSON.parse( SimpleJSON.rack_mock(:add, JSON.generate({@@id => {'list' => 'item1'}}))[2])
134
+ assert(o_data[@@id] == true,'add more again?')
135
+ o_data = JSON.parse( SimpleJSON.rack_mock(:add, JSON.generate({@@id => {'list' => 'item2'}}))[2])
136
+ assert(o_data[@@id] == true,'add more again?')
137
+ o_data = JSON.parse( SimpleJSON.rack_mock(:add, JSON.generate({@@id => {'list' => 'item3'}}))[2])
138
+ assert(o_data[@@id] == true,'add more again?')
139
+ o_data = JSON.parse( SimpleJSON.rack_mock(:add, JSON.generate({@@id => {'list' => 'item4'}}))[2])
140
+ assert(o_data[@@id] == true,'add more again?')
141
+
142
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 0}}))[2])
143
+ assert(o_data.is_a?(Hash))
144
+ assert(o_data.include?(@@id))
145
+ assert(o_data[@@id].include?('list'))
146
+ assert(o_data[@@id]['list'] == 'item1')
147
+
148
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 1}}))[2])
149
+ assert(o_data[@@id]['list'] == 'item2')
150
+
151
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 2}}))[2])
152
+ assert(o_data[@@id]['list'] == 'item3')
153
+
154
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 3}}))[2])
155
+ assert(o_data[@@id]['list'] == 'item4')
156
+
157
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 'first'}}))[2])
158
+ assert(o_data[@@id]['list'] == 'item1')
159
+
160
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => 'last'}}))[2])
161
+ assert(o_data[@@id]['list'] == 'item4')
162
+
163
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => '2..-1'}}))[2])
164
+ assert(o_data[@@id]['list'].is_a?(Array))
165
+ assert(o_data[@@id]['list'].size == 2)
166
+ assert(o_data[@@id]['list'][0] == 'item3')
167
+ assert(o_data[@@id]['list'][1] == 'item4')
168
+
169
+ o_data = JSON.parse( SimpleJSON.rack_mock(:get, JSON.generate({@@id => {'list' => '0...2'}}))[2])
170
+ assert(o_data[@@id]['list'].size == 2)
171
+ assert(o_data[@@id]['list'][0] == 'item1')
172
+ assert(o_data[@@id]['list'][1] == 'item2')
173
+ end
174
+
175
+ def test_14_query_array_item
176
+ query = "['name' = '#{@@id}']"
177
+
178
+ t_data = {query => {'list' => 0}}
179
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
180
+ assert(o_data[query][@@id]['list'] == 'item1')
181
+
182
+ t_data = {query => {'list' => 1}}
183
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
184
+ assert(o_data[query][@@id]['list'] == 'item2')
185
+
186
+ t_data = {query => {'list' => 2}}
187
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
188
+ assert(o_data[query][@@id]['list'] == 'item3')
189
+
190
+ t_data = {query => {'list' => 3}}
191
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
192
+ assert(o_data[query][@@id]['list'] == 'item4')
193
+
194
+ t_data = {query => {'list' => 'first'}}
195
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
196
+ assert(o_data[query][@@id]['list'] == 'item1')
197
+
198
+ t_data = {query => {'list' => 'last'}}
199
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
200
+ assert(o_data[query][@@id]['list'] == 'item4')
201
+
202
+ t_data = {query => {'list' => '2..-1'}}
203
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
204
+ assert(o_data[query][@@id]['list'][0] == 'item3')
205
+ assert(o_data[query][@@id]['list'][1] == 'item4')
206
+
207
+ t_data = {query => {'list' => '0...2'}}
208
+ o_data = JSON.parse( SimpleJSON.rack_mock(:query, JSON.generate(t_data))[2])
209
+ assert(o_data[query][@@id]['list'][0] == 'item1')
210
+ assert(o_data[query][@@id]['list'][1] == 'item2')
211
+ end
212
+
213
+ def test_20_delete
133
214
  o_data = JSON.parse( SimpleJSON.rack_mock(:delete, JSON.generate({@@id => nil}))[2])
134
215
  assert(o_data.is_a?(Hash))
135
216
  assert(o_data.size == 1)
@@ -144,7 +225,7 @@ class TestSimpleJSONDB < Test::Unit::TestCase
144
225
  assert(o_data[@@id].empty?)
145
226
  end
146
227
 
147
- def test_14_other_config
228
+ def test_21_other_config
148
229
  domain = 'other_test_domain'
149
230
  o_data = JSON.parse( SimpleJSON.rack_mock(:delete, JSON.generate({@@id => nil}), {'AMAZON_DOMAIN' => domain})[2])
150
231
  assert(@@sdb.list_domains[0].include?(domain), 'other domain')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis-Philippe Perron