hash-joiner 0.0.4 → 0.0.5

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 (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