cocina_display 2.10.0 → 2.11.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36af44048876757d3340a1c2676f84c20dc38c97b3a1b0c087cb96b6065ce01d
4
- data.tar.gz: 5d667b7070c90910956c104e478e7689ec55dfadea72616c02c642bb2eae4c7e
3
+ metadata.gz: 3cdd3c641ebe565578770ae4f79867ccc886bdaefa17b2bfa966cc17c262c58b
4
+ data.tar.gz: 2d0e16f879c06393a3e74c2e323896384040721c95f73bc2e65fb428c4c9d94a
5
5
  SHA512:
6
- metadata.gz: 152cb7b7a5d46bf69d2a426062c57fdd99c5dbd163983b2bf03ba90741b6ed787bc3375ddb1620f10772f43339ff745e4987bae3b04d4cdddcfff453e474ffc6
7
- data.tar.gz: cccdfab1d7cfa8e859eec1c23a7ea50d691e1dad2e30fcc4af95fe0f17d2e2d7a1209daa1dc09e9968527538570efe2524c8c78ad94bee472106ec470165bf97
6
+ metadata.gz: 98248c3a9f4a68ef0e8fac5261f979702e66c529f086d9287d111d580af06bc517536b5636fb0e5d1ca02588264af17c91e9185630c5f35f287c60af5cc6de77
7
+ data.tar.gz: b6c79b6672639e13f31f446ca239d11434be0ba152656f93bd328ce576271d3e6db6ace9adec9b136d40cd325fce562d0d30317cabf5b4afe37d505962a5e93f
@@ -52,26 +52,31 @@ module CocinaDisplay
52
52
 
53
53
  # Recursively remove empty values from a hash, including nested hashes and arrays.
54
54
  # @param [Hash, String, NilClass] node The object to process
55
+ # @param [Array<String>] preserve_keys Keys that should be kept even if their value is blank
55
56
  # @return [Hash, String] The hash with empty values removed, string if the node you pass in is a string
56
57
  # @example
57
58
  # hash = { "name" => "", "age" => nil, "address => { "city" => "Anytown", "state" => [] } }
58
59
  # # Utils.remove_empty_values(hash)
59
60
  # #=> { "address" => { "city" => "Anytown" } }
60
- def self.deep_compact_blank(node)
61
+ def self.deep_compact_blank(node, preserve_keys: [])
61
62
  return node unless node.is_a?(Hash)
62
63
 
64
+ preserve_keys = preserve_keys.map(&:to_s)
65
+
63
66
  node.each_with_object({}) do |(key, value), output|
67
+ preserve_key = preserve_keys.include?(key.to_s)
68
+
64
69
  case value
65
70
  when Hash
66
- nested = deep_compact_blank(value)
67
- output[key] = nested unless nested.empty?
71
+ nested = deep_compact_blank(value, preserve_keys: preserve_keys)
72
+ output[key] = nested if !nested.empty? || preserve_key
68
73
  when Array
69
- compacted_array = value.map { |v| deep_compact_blank(v) }.compact_blank
70
- output[key] = compacted_array unless compacted_array.empty?
74
+ compacted_array = value.map { |v| deep_compact_blank(v, preserve_keys: preserve_keys) }.compact_blank
75
+ output[key] = compacted_array if !compacted_array.empty? || preserve_key
71
76
  when TrueClass, FalseClass
72
77
  output[key] = value
73
78
  else
74
- output[key] = value if value.present?
79
+ output[key] = value if value.present? || preserve_key
75
80
  end
76
81
  end
77
82
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # :nodoc:
4
4
  module CocinaDisplay
5
- VERSION = "2.10.0" # :nodoc:
5
+ VERSION = "2.11.0" # :nodoc:
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocina_display
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.0
4
+ version: 2.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Budak
@@ -326,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
326
  - !ruby/object:Gem::Version
327
327
  version: '0'
328
328
  requirements: []
329
- rubygems_version: 4.0.15
329
+ rubygems_version: 4.0.6
330
330
  specification_version: 4
331
331
  summary: Helpers for rendering Cocina metadata
332
332
  test_files: []