hash_walker 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -3,7 +3,9 @@
3
3
  [![Build
4
4
  Status](https://secure.travis-ci.org/lloydmeta/hash_walker.png)](http://travis-ci.org/lloydmeta/hash_walker)
5
5
 
6
- A simple gem that allows you to traverse/walk a Hash according to a set of keys (also a hash), passing in a block to perform actions on. This method will yield your block with each value found and the Hash 'path' of the value as arguments
6
+ A simple gem that allows you to traverse/walk a Hash (perhaps obtained from doing JSON::parse on a JSON string) according to a set of keys (also a hash), passing in a block to perform actions. This method will yield your block with each value found and the Hash 'path' of the value as arguments.
7
+
8
+ __Note__ This gem was built on Ruby 1.9.3, but Travis testing tells me its 1.9.2 compatible as well. Your mileage may vary...
7
9
 
8
10
  ## Installing
9
11
 
@@ -19,6 +21,66 @@ Where you want to use the method on your hashes:
19
21
  require 'hash_walker'
20
22
  ```
21
23
 
24
+ ## Usage
25
+
26
+ ```ruby
27
+ require 'hash_walker'
28
+
29
+ my_hash = {
30
+ "a_array" => [1,2,3,4,5],
31
+ "b_hash" => {
32
+ "b_value_string" => 'b value as string',
33
+ "b_value_int" => 420,
34
+ "b_value_bool" => true,
35
+ "b_value_float" => 4.20,
36
+ "b_inner_array" => [
37
+ {
38
+ "content" => 'b_inner_array content 1',
39
+ "b_inner_array_unneeded" => "don't read me!"
40
+ },
41
+ {
42
+ "content" => 'b_inner_array content 2',
43
+ "b_inner_array_unneeded" => "don't read me! 2"
44
+ },
45
+ {
46
+ "content" => 'b_inner_array content 3',
47
+ "b_inner_array_unneeded" => "don't read me! 3"
48
+ },
49
+ {
50
+ "content" => 'b_inner_array content 4',
51
+ "b_inner_array_unneeded" => "don't read me! 3",
52
+ "b_inner_array_inner_hash" => {
53
+ "content" => "really, really hidden...",
54
+ "inner_array" => [3.14159, 2.71828]
55
+ }
56
+ }
57
+ ]
58
+ }
59
+ }
60
+
61
+ keys_to_read = [
62
+ "a_array",
63
+ "b_hash" => [
64
+ "b_value_string",
65
+ "b_value_int",
66
+ "b_value_bool",
67
+ "b_value_float",
68
+ {"b_inner_array" => [
69
+ "content",
70
+ {"b_inner_array_inner_hash" => [
71
+ "content",
72
+ "inner_array"
73
+ ]}
74
+ ]}
75
+ ]
76
+ ]
77
+
78
+ my_hash.each_primitive_value_at(keys_to_read){|value,path|
79
+ puts value, path
80
+ }
81
+ ```
82
+
83
+
22
84
  ## License
23
85
 
24
86
  Copyright (c) 2012 by Lloyd Chan
data/hash_walker.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = %q{hash_walker}
3
- gem.version = "0.0.2"
3
+ gem.version = "0.0.3"
4
4
  gem.date = %q{2012-09-30}
5
5
  gem.authors = ["Lloyd Meta"]
6
6
  gem.email = ["lloydmeta@gmail.com"]
7
7
  gem.homepage = "http://github.com/lloydmeta/hash_walker"
8
- gem.description = %q{A simple gem that allows you to traverse/walk a Hash according to a set of keys (also a hash), passing in a block to perform actions on. This method will yield your block with each value found and the Hash 'path' of the value as arguments}
8
+ gem.description = %q{A simple gem that allows you to traverse/walk a Hash according to a set of keys (also a hash), passing in a block to perform actions. This method will yield your block with each value found and the Hash 'path' of the value as arguments}
9
9
  gem.summary = gem.description
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -15,23 +15,23 @@ module HashWalker
15
15
  if key.is_a?(Hash)
16
16
  # iterate for each key, value in this hash
17
17
  key.each do |k, v|
18
- node_key_value = self["#{k.to_s}"]
18
+ node_key_value = self[k]
19
19
  if node_key_value.is_a?(Array)
20
20
  node_key_value.each_with_index do |value, i|
21
- value.each_primitive_value_at(v, path + ["#{k.to_s}"] + [i], &block)
21
+ value.each_primitive_value_at(v, path + [k] + [i], &block)
22
22
  end
23
23
  else
24
- node_key_value.each_primitive_value_at(v, path + ["#{k.to_s}"], &block) unless node_key_value.nil?
24
+ node_key_value.each_primitive_value_at(v, path + [k], &block) unless node_key_value.nil?
25
25
  end
26
26
  end
27
27
  else
28
- node_key_value = self["#{key.to_s}"]
28
+ node_key_value = self[key]
29
29
  if node_key_value.is_a?(Array)
30
30
  node_key_value.each_with_index do |value, i|
31
- yield value, path + ["#{key.to_s}"] + [i] if block_given?
31
+ yield value, path + [key] + [i] if block_given?
32
32
  end
33
33
  elsif PRIMITIVE_CLASSES_TO_RETURN_VALUES_FOR.any?{|x| node_key_value.is_a?(x)}
34
- yield node_key_value, path + ["#{key.to_s}"] if block_given?
34
+ yield node_key_value, path + [key] if block_given?
35
35
  end
36
36
  end
37
37
  end
@@ -1,136 +1,536 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hash do
4
- subject do
5
- {
6
- "a_array" => [1,2,3,4,5],
7
- "b_hash" => {
8
- "b_value_string" => 'b value as string',
9
- "b_value_int" => 420,
10
- "b_value_bool" => true,
11
- "b_value_float" => 4.20,
12
- "b_inner_array" => [
13
- {
14
- "content" => 'b_inner_array content 1',
15
- "b_inner_array_unneeded" => "don't read me!"
16
- },
17
- {
18
- "content" => 'b_inner_array content 2',
19
- "b_inner_array_unneeded" => "don't read me! 2"
20
- },
21
- {
22
- "content" => 'b_inner_array content 3',
23
- "b_inner_array_unneeded" => "don't read me! 3"
24
- },
25
- {
26
- "content" => 'b_inner_array content 4',
27
- "b_inner_array_unneeded" => "don't read me! 3",
28
- "b_inner_array_inner_hash" => {
29
- "content" => "really, really hidden...",
30
- "inner_array" => [3.14159, 2.71828]
4
+ context 'Simple Example' do
5
+ subject do
6
+ {
7
+ "a_array" => [1,2,3,4,5],
8
+ "b_hash" => {
9
+ "b_value_string" => 'b value as string',
10
+ "b_value_int" => 420,
11
+ "b_value_bool" => true,
12
+ "b_value_float" => 4.20,
13
+ "b_inner_array" => [
14
+ {
15
+ "content" => 'b_inner_array content 1',
16
+ "b_inner_array_unneeded" => "don't read me!"
17
+ },
18
+ {
19
+ "content" => 'b_inner_array content 2',
20
+ "b_inner_array_unneeded" => "don't read me! 2"
21
+ },
22
+ {
23
+ "content" => 'b_inner_array content 3',
24
+ "b_inner_array_unneeded" => "don't read me! 3"
25
+ },
26
+ {
27
+ "content" => 'b_inner_array content 4',
28
+ "b_inner_array_unneeded" => "don't read me! 3",
29
+ "b_inner_array_inner_hash" => {
30
+ "content" => "really, really hidden...",
31
+ "inner_array" => [3.14159, 2.71828]
32
+ }
31
33
  }
32
- }
33
- ]
34
+ ]
35
+ }
34
36
  }
35
- }
36
- end
37
+ end
37
38
 
38
- before(:all) do
39
+ before(:all) do
39
40
 
40
- @keys_to_read_a_array = [
41
- "a_array"
42
- ]
41
+ @keys_to_read_a_array = [
42
+ "a_array"
43
+ ]
43
44
 
44
- @keys_to_read_b_hash_primitives = [
45
- "b_hash" => [
46
- "b_value_string",
47
- "b_value_int",
48
- "b_value_bool",
49
- "b_value_float",
45
+ @keys_to_read_b_hash_primitives = [
46
+ "b_hash" => [
47
+ "b_value_string",
48
+ "b_value_int",
49
+ "b_value_bool",
50
+ "b_value_float",
51
+ ]
50
52
  ]
51
- ]
52
-
53
- @keys_to_read_complete = [
54
- "a_array",
55
- "b_hash" => [
56
- "b_value_string",
57
- "b_value_int",
58
- "b_value_bool",
59
- "b_value_float",
60
- {"b_inner_array" => ["content"]}
53
+
54
+ @keys_to_read_complete = [
55
+ "a_array",
56
+ "b_hash" => [
57
+ "b_value_string",
58
+ "b_value_int",
59
+ "b_value_bool",
60
+ "b_value_float",
61
+ {"b_inner_array" => ["content"]}
62
+ ]
61
63
  ]
62
- ]
63
-
64
- @keys_to_read_REALLY_complete = [
65
- "a_array",
66
- "b_hash" => [
67
- "b_value_string",
68
- "b_value_int",
69
- "b_value_bool",
70
- "b_value_float",
71
- {"b_inner_array" => [
72
- "content",
73
- {"b_inner_array_inner_hash" => [
64
+
65
+ @keys_to_read_REALLY_complete = [
66
+ "a_array",
67
+ "b_hash" => [
68
+ "b_value_string",
69
+ "b_value_int",
70
+ "b_value_bool",
71
+ "b_value_float",
72
+ {"b_inner_array" => [
74
73
  "content",
75
- "inner_array"
74
+ {"b_inner_array_inner_hash" => [
75
+ "content",
76
+ "inner_array"
77
+ ]}
76
78
  ]}
77
- ]}
79
+ ]
78
80
  ]
79
- ]
80
- end
81
+ end
81
82
 
82
- it 'should have the each_primitive_value_at method' do
83
- subject.should respond_to(:each_primitive_value_at)
84
- end
83
+ it 'should have the each_primitive_value_at method' do
84
+ subject.should respond_to(:each_primitive_value_at)
85
+ end
85
86
 
86
- it 'should find 5 values for @keys_to_read_a_array key array' do
87
- values_found = []
88
- subject.each_primitive_value_at(@keys_to_read_a_array){|value,path|
89
- values_found << value
90
- subject['a_array'].should include(value)
91
- path.should include('a_array')
92
- path[1].class.should eq(Fixnum)
93
- }
94
- values_found.size.should eq(5)
95
- end
87
+ it 'should find 5 values for @keys_to_read_a_array key array' do
88
+ values_found = []
89
+ subject.each_primitive_value_at(@keys_to_read_a_array){|value,path|
90
+ values_found << value
91
+ subject['a_array'].should include(value)
92
+ path.should include('a_array')
93
+ path[1].class.should eq(Fixnum)
94
+ }
95
+ values_found.size.should eq(5)
96
+ end
96
97
 
97
- it 'should find 5 values for @keys_to_read_b_hash_primitives key array' do
98
- values_found = []
99
- b_hash_primitives = [
100
- 'b value as string',
101
- 420,
102
- true,
103
- 4.2
104
- ]
105
- subject.each_primitive_value_at(@keys_to_read_b_hash_primitives){|value,path|
106
- values_found << value
107
- b_hash_primitives.should include(value)
108
- path.should include('b_hash')
109
- @keys_to_read_b_hash_primitives[0]['b_hash'].should include(path[1])
110
- }
111
- values_found.size.should eq(4)
112
- end
98
+ it 'should find 5 values for @keys_to_read_b_hash_primitives key array' do
99
+ values_found = []
100
+ b_hash_primitives = [
101
+ 'b value as string',
102
+ 420,
103
+ true,
104
+ 4.2
105
+ ]
106
+ subject.each_primitive_value_at(@keys_to_read_b_hash_primitives){|value,path|
107
+ values_found << value
108
+ b_hash_primitives.should include(value)
109
+ path.should include('b_hash')
110
+ @keys_to_read_b_hash_primitives[0]['b_hash'].should include(path[1])
111
+ }
112
+ values_found.size.should eq(4)
113
+ end
113
114
 
114
- it 'should find 12 values in total for @keys_to_read_complete' do
115
- values_found = []
116
- paths_found = []
117
- subject.each_primitive_value_at(@keys_to_read_complete){|value,path|
118
- values_found << value
119
- paths_found << path
120
- }
121
- values_found.size.should eq(13)
122
- paths_found.size.should eq(13)
115
+ it 'should find 12 values in total for @keys_to_read_complete' do
116
+ values_found = []
117
+ paths_found = []
118
+ subject.each_primitive_value_at(@keys_to_read_complete){|value,path|
119
+ values_found << value
120
+ paths_found << path
121
+ }
122
+ values_found.size.should eq(13)
123
+ paths_found.size.should eq(13)
124
+ end
125
+
126
+ it 'should find 16 values in total for @keys_to_read_REALLY_complete' do
127
+ values_found = []
128
+ paths_found = []
129
+ subject.each_primitive_value_at(@keys_to_read_REALLY_complete){|value,path|
130
+ values_found << value
131
+ paths_found << path
132
+ }
133
+ values_found.size.should eq(16)
134
+ paths_found.size.should eq(16)
135
+ end
123
136
  end
124
137
 
125
- it 'should find 16 values in total for @keys_to_read_REALLY_complete' do
126
- values_found = []
127
- paths_found = []
128
- subject.each_primitive_value_at(@keys_to_read_REALLY_complete){|value,path|
129
- values_found << value
130
- paths_found << path
131
- }
132
- values_found.size.should eq(16)
133
- paths_found.size.should eq(16)
138
+ context 'complicated example' do
139
+ subject do
140
+ {
141
+ "_confidence_factor"=>90,
142
+ "_backup_level"=>4,
143
+ "_id"=>"www.something_here.com",
144
+ "_last_studio_import"=>"2012-04-03T18:19:03.139000",
145
+ "_last_updated"=>"2012-09-19T18:45:55.288000",
146
+ "_manual_article_popular_search"=>[
147
+ {
148
+ "cached_ids"=>[
149
+ {
150
+ "_id"=>"aaaa",
151
+ "summary"=>"aaa ..."
152
+ },
153
+ {
154
+ "_id"=>"bbbb",
155
+ "summary"=>"bbbb...."
156
+ }
157
+ ],
158
+ "start_time"=>"2011-01-01T00:00:00"
159
+ }
160
+ ],
161
+ "_type"=>"document",
162
+ "article_type_id"=>"Professional",
163
+ "asset_meta"=>{
164
+ "count"=>{
165
+ "reference"=>0,
166
+ "reference_link"=>0,
167
+ "resource"=>2,
168
+ "warning"=>0,
169
+ "word_detail"=>955,
170
+ "word_summary"=>224
171
+ }
172
+ },
173
+ "byline"=>"Contributor",
174
+ "children"=>[
175
+
176
+ ],
177
+ "content_rating"=>4,
178
+ "content_type"=>"Features",
179
+ "culture"=>"en-US",
180
+ "dart_zone"=>"holidays",
181
+ "description"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
182
+ "documents"=>[
183
+
184
+ ],
185
+ "image"=>{
186
+ "credit"=>"sjlocke/iStockphoto.com",
187
+ "height"=>565,
188
+ "thumbheight"=>"67",
189
+ "width"=>849
190
+ },
191
+ "introduction"=>{
192
+ "steps"=>[
193
+ {
194
+ "image"=>{
195
+ "credit"=>"sjlocke/iStockphoto.com",
196
+ "height"=>565,
197
+ "thumbheight"=>"67",
198
+ "width"=>849
199
+ },
200
+ "paragraph"=>[
201
+ {
202
+ "content"=>"jklas jfklsj afkl;sj flk;asd."
203
+ },
204
+ {
205
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
206
+ },
207
+ {
208
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
209
+ },
210
+ {
211
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
212
+ },
213
+ {
214
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
215
+ },
216
+ {
217
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
218
+ },
219
+ {
220
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
221
+ }
222
+ ],
223
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
224
+ }
225
+ ]
226
+ },
227
+ "is_ugc"=>false,
228
+ "keywords"=>[
229
+ (0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
230
+ (0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
231
+ (0...50).map{ ('a'..'z').to_a[rand(26)] }.join
232
+ ],
233
+ "last_pub_date"=>"2011-04-08T10:57:56",
234
+ "last_published_date"=>"2012-04-03T16:03:00",
235
+ "last_rcp_import"=>"2012-09-24T00:04:06.116000",
236
+ "level"=>4,
237
+ "pub_date"=>"2011-07-13T00:00:00",
238
+ "publisher_id"=>7447502,
239
+ "quote"=>{
240
+ "steps"=>[
241
+ {
242
+ "paragraph"=>[
243
+ {
244
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
245
+ }
246
+ ],
247
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
248
+ },
249
+ {
250
+ "paragraph"=>[
251
+ {
252
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
253
+ }
254
+ ],
255
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
256
+ }
257
+ ],
258
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
259
+ },
260
+ "references"=>[
261
+
262
+ ],
263
+ "resources"=>[
264
+ {
265
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
266
+ "url"=>"http://www.aap.org/advocacy/releases/octhalloween.cfm"
267
+ },
268
+ {
269
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
270
+ "url"=>"http://www.cdc.gov/family/halloween/"
271
+ }
272
+ ],
273
+ "sections"=>[
274
+ {
275
+ "steps"=>[
276
+ {
277
+ "paragraph"=>[
278
+ {
279
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
280
+ },
281
+ {
282
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
283
+ },
284
+ {
285
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
286
+ },
287
+ {
288
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
289
+ },
290
+ {
291
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
292
+ },
293
+ {
294
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
295
+ }
296
+ ]
297
+ }
298
+ ],
299
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
300
+ },
301
+ {
302
+ "steps"=>[
303
+ {
304
+ "paragraph"=>[
305
+ {
306
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
307
+ },
308
+ {
309
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
310
+ },
311
+ {
312
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
313
+ },
314
+ {
315
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
316
+ },
317
+ {
318
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
319
+ },
320
+ {
321
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
322
+ }
323
+ ]
324
+ }
325
+ ],
326
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
327
+ },
328
+ {
329
+ "steps"=>[
330
+ {
331
+ "paragraph"=>[
332
+ {
333
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
334
+ },
335
+ {
336
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
337
+ },
338
+ {
339
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
340
+ },
341
+ {
342
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
343
+ },
344
+ {
345
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
346
+ }
347
+ ]
348
+ }
349
+ ],
350
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
351
+ },
352
+ {
353
+ "steps"=>[
354
+ {
355
+ "paragraph"=>[
356
+ {
357
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
358
+ },
359
+ {
360
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
361
+ },
362
+ {
363
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
364
+ },
365
+ {
366
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
367
+ },
368
+ {
369
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
370
+ }
371
+ ]
372
+ }
373
+ ],
374
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
375
+ },
376
+ {
377
+ "steps"=>[
378
+ {
379
+ "paragraph"=>[
380
+ {
381
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
382
+ },
383
+ {
384
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
385
+ },
386
+ {
387
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
388
+ }
389
+ ]
390
+ }
391
+ ],
392
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
393
+ },
394
+ {
395
+ "steps"=>[
396
+ {
397
+ "paragraph"=>[
398
+ {
399
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
400
+ },
401
+ {
402
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
403
+ },
404
+ {
405
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
406
+ }
407
+ ]
408
+ }
409
+ ],
410
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
411
+ }
412
+ ],
413
+ "sidebar"=>{
414
+ "steps"=>[
415
+ {
416
+ "paragraph"=>[
417
+ {
418
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
419
+ },
420
+ {
421
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
422
+ },
423
+ {
424
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
425
+ },
426
+ {
427
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
428
+ },
429
+ {
430
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
431
+ },
432
+ {
433
+ "content"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
434
+ }
435
+ ],
436
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
437
+ }
438
+ ],
439
+ "title"=>"Sidebar"
440
+ },
441
+ "subtitle"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
442
+ "summary"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
443
+ "summary_history"=>[
444
+ (0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
445
+ (0...50).map{ ('a'..'z').to_a[rand(26)] }.join
446
+ ],
447
+ "summary_is_first_section"=>true,
448
+ "things_needed"=>[
449
+
450
+ ],
451
+ "tips"=>[
452
+
453
+ ],
454
+ "title"=>(0...50).map{ ('a'..'z').to_a[rand(26)] }.join,
455
+ "title_id"=>6031231226583,
456
+ "title_source_name"=>"ADMIN_SUGGESTED",
457
+ "type"=>"Article",
458
+ "warnings"=>[
459
+
460
+ ],
461
+ "who_can_help"=>nil,
462
+ "writer"=>"www.demandstudios.com/contributor/c77ecbad-49ea-4afc-95be-3978c8033035"
463
+ }
464
+ end
465
+
466
+ describe 'validations' do
467
+ before(:all) do
468
+ @keys_to_read = [
469
+ "content",
470
+ "description",
471
+ "ingredients",
472
+ "keywords",
473
+ {"image" => ["caption"]},
474
+ {"introduction" => [
475
+ "steps" => [
476
+ {"image" => ["caption"]},
477
+ {"paragraph" => ["content"]},
478
+ "title"
479
+ ]
480
+ ]},
481
+ {"quote" => [
482
+ "steps" => [
483
+ {"image" => ["caption"]},
484
+ {"paragraph" => ["content"]},
485
+ "title"
486
+ ]
487
+ ]},
488
+ {"references" => ["title"]},
489
+ {"sections" => [
490
+ "steps" => [
491
+ {"paragraph" => ["content"]},
492
+ {"image" => ["caption"]},
493
+ "title"
494
+ ]
495
+ ]},
496
+ "subtitle",
497
+ "summary",
498
+ "things_needed",
499
+ "tips",
500
+ "title",
501
+ "warnings"
502
+ ]
503
+ end
504
+
505
+ it "should traverse without problems" do
506
+ lambda do
507
+ subject.each_primitive_value_at(@keys_to_read)
508
+ end.should_not raise_error
509
+ end
510
+
511
+ it 'should return me values with proper paths' do
512
+ values_and_paths_found = []
513
+
514
+ subject.each_primitive_value_at(@keys_to_read){|value, path_array|
515
+ path_as_string = path_array.reduce('') {|path_so_far, path_array_element|
516
+ if path_array_element.is_a?(String)
517
+ path_so_far += %Q~["#{path_array_element}"]~
518
+ elsif path_array_element.is_a?(Integer)
519
+ path_so_far += %Q~[#{path_array_element.to_s}]~
520
+ end
521
+ path_so_far
522
+ }
523
+ values_and_paths_found << [value, path_array]
524
+ }
525
+ values_and_paths_found.size.should eq(47)
526
+ values_and_paths_found.each do |value_and_path|
527
+ subject_value_at_path = value_and_path[1].reduce(subject){|value_so_far, step|
528
+ value_so_far = value_so_far[step]
529
+ }
530
+ subject_value_at_path.should eq(value_and_path[0])
531
+ end
532
+ end
533
+ end
134
534
  end
135
535
 
136
536
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_walker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,8 +12,8 @@ cert_chain: []
12
12
  date: 2012-09-30 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple gem that allows you to traverse/walk a Hash according to a set
15
- of keys (also a hash), passing in a block to perform actions on. This method will
16
- yield your block with each value found and the Hash 'path' of the value as arguments
15
+ of keys (also a hash), passing in a block to perform actions. This method will yield
16
+ your block with each value found and the Hash 'path' of the value as arguments
17
17
  email:
18
18
  - lloydmeta@gmail.com
19
19
  executables: []
@@ -55,7 +55,7 @@ rubygems_version: 1.8.24
55
55
  signing_key:
56
56
  specification_version: 3
57
57
  summary: A simple gem that allows you to traverse/walk a Hash according to a set of
58
- keys (also a hash), passing in a block to perform actions on. This method will yield
58
+ keys (also a hash), passing in a block to perform actions. This method will yield
59
59
  your block with each value found and the Hash 'path' of the value as arguments
60
60
  test_files:
61
61
  - spec/hash_walker/hash_walker_spec.rb