hash-joiner 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hash-joiner.rb +15 -3
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9cbaeb4ca23cb015638cf7307b80bc430c071b8d
4
- data.tar.gz: fcdb64ee681d08e378ed49a6d206a939ffa80b9c
3
+ metadata.gz: 90c7fec799df022cab292510997f96964ce21130
4
+ data.tar.gz: 7cc754bf27cee1b74e5c848ff58d1d6d63cea0af
5
5
  SHA512:
6
- metadata.gz: a7212cdd3cd7f4f65949667176403f898d0ca0bb1d399370a2ca4977c85093c03409fa77cace2fcd6b0bfd5582ad099748251bcafd30800dc60400d7f8c6cd3b
7
- data.tar.gz: 226291140aafa34dbfae80132eb05ee0f60c8dd454ee6eb25728c5ef087d9ef7de8d77fabc7033cbbff723317d2b14f2981945e2cd269e5e31ba32b5b58dbbad
6
+ metadata.gz: 83424ae89d14838c5aa17ea9691974d8c55df1ebbd63bc5b9a05afa97911ab385e09f267a9e9844d8ded1e1aacb57fcb5d013cfbf958c001c93cf3a1035f2786
7
+ data.tar.gz: fe45b74b525b1a4e5c7e2b1adfe3670097fa4bcf67308ee7b8a89350f253a343c456e2f04c5c5694b57df1aba2ad9aa70b4d0b04bdfbbe65b999f789e4b429df
data/lib/hash-joiner.rb CHANGED
@@ -285,18 +285,30 @@ module HashJoiner
285
285
  # Recursively prunes all empty properties from every element of a
286
286
  # collection.
287
287
  # @param collection [Hash<String>,Array<Hash<String>>] collection to update
288
- # @param array_properties [Array<String>] list of properties to initialize
289
288
  def self.prune_empty_properties(collection)
289
+ prune_empty_properties_helper(collection, {})
290
+ end
291
+
292
+ # Helper of prune_empty_properties that passes a object memoization table to
293
+ # recursive calls. The table prevents infinite recursion when objects
294
+ # contain cross-references to one another.
295
+ # @param collection [Hash<String>,Array<Hash<String>>] collection to update
296
+ # @param collection [Hash<String>] memoization table
297
+ # @return collection
298
+ def self.prune_empty_properties_helper(collection, seen_before)
299
+ return collection if seen_before[collection.object_id]
300
+ seen_before[collection.object_id] = true
290
301
  if collection.instance_of? ::Hash
291
- collection.each_value {|i| prune_empty_properties i}
302
+ collection.each_value {|i| prune_empty_properties_helper i, seen_before}
292
303
  collection.delete_if do |unused_key, value|
293
304
  (value.instance_of? ::Hash or value.instance_of? ::Array or
294
305
  value.instance_of? ::String) and value.empty?
295
306
  end
296
307
  elsif collection.instance_of? ::Array
297
- collection.each {|i| prune_empty_properties i}
308
+ collection.each {|i| prune_empty_properties_helper i, seen_before}
298
309
  collection.delete_if {|i| i.empty?}
299
310
  end
300
311
  collection
301
312
  end
313
+ private_class_method :prune_empty_properties_helper
302
314
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash-joiner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Bland