hashlib 0.0.33 → 0.0.34

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.
Files changed (2) hide show
  1. data/lib/hashlib.rb +25 -17
  2. metadata +2 -2
data/lib/hashlib.rb CHANGED
@@ -118,8 +118,13 @@ class Hash
118
118
 
119
119
  # arrayify all paths
120
120
  path = [*path]
121
-
122
121
  key = path.first.to_s
122
+
123
+ if key =~ /^([^\]]+)\[(\d+)\]$/
124
+ key = $1
125
+ index = $2.to_i
126
+ end
127
+
123
128
  rest = path[1..-1]
124
129
 
125
130
  # stringify the key we're processing
@@ -135,13 +140,11 @@ class Hash
135
140
  end
136
141
  else
137
142
  if self[key].is_a?(Array) and self[key].first.is_a?(Hash)
138
- # set only on specific array items
139
- if options[:index]
140
- [*options[:index]].each do |i|
141
- self[key][i].rset(rest, value, options.reject{|k|
142
- k == :index
143
- }) unless self[key][i].nil?
144
- end
143
+ # set only on a specific array item
144
+ # key will be in the form key[0], key[1], key[n]
145
+ #
146
+ if not index.nil?
147
+ self[key][index].rset(rest, value, options) unless self[key][index].nil?
145
148
 
146
149
  # set path on all array items
147
150
  else
@@ -219,29 +222,34 @@ class Hash
219
222
  }), &block)
220
223
 
221
224
  elsif v.is_a?(Array) and v.first.is_a?(Hash)
222
- v.each_index do |i|
223
- if v[i].is_a?(Hash)
225
+ v.each.with_index do |vv,i|
226
+ if vv.is_a?(Hash)
227
+ pp = path[0..-2]+["#{path[-1]}[#{i}]"]
228
+
224
229
  if options[:intermediate] === true
225
- yield(k.to_s, v[i], path, dhm, i)
230
+ yield(k.to_s, vv, pp, dhm)
226
231
  end
227
232
 
228
- v[i].each_recurse(options.merge({
229
- :path => path,
230
- :index => i,
233
+ vv.each_recurse(options.merge({
234
+ :path => pp,
231
235
  :dhm => dhm
232
236
  }), &block)
233
237
  end
234
238
  end
235
239
 
236
240
  else
237
- rv = yield(k.to_s, v, path, dhm, options[:index])
241
+ yield(k.to_s, v, path, dhm)
238
242
  end
239
243
 
240
244
  h
241
245
  end
242
246
 
243
- # apply any pending operations accumulated from the inject() loop and return
244
- return dhm.apply()
247
+ if options[:dhm].nil?
248
+ # apply any pending operations accumulated from the inject() loop and return
249
+ return dhm.apply()
250
+ else
251
+ return rv
252
+ end
245
253
  end
246
254
 
247
255
  def compact()
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33
4
+ version: 0.0.34
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -40,7 +40,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
40
  version: '0'
41
41
  requirements: []
42
42
  rubyforge_project:
43
- rubygems_version: 1.8.23
43
+ rubygems_version: 1.8.11
44
44
  signing_key:
45
45
  specification_version: 3
46
46
  summary: Useful utility methods for working with Ruby hashes