Class: Hash
Overview
Extension class for Hash
Instance Method Summary collapse
-
#apply_defaults(other_hash) ⇒ Object
Apply other hash values if current value is blank.
-
#apply_defaults!(other_hash) ⇒ Object
Apply in-place other hash values if current value is blank.
-
#cleanup ⇒ Object
Removes all hash entries for which value.empty? is true.
-
#key_strings_to_symbols(options = {}) ⇒ Object
Return new Hash with all keys converted to symbols.
-
#key_strings_to_symbols!(options = {}) ⇒ Object
Convert all keys to symbols.
-
#key_symbols_to_strings(options = {}) ⇒ Object
Return new Hash with all keys converted to strings.
-
#key_symbols_to_strings!(options = {}) ⇒ Object
Convert all keys to strings.
-
#recursive_cleanup ⇒ Object
Removes all hash entries for which value.empty? is true.
-
#recursive_merge(other_hash) ⇒ Object
Merges two hashes, but does so recursively.
-
#recursive_merge!(other_hash) ⇒ Object
Merges two hashes in-place, but does so recursively.
-
#reverse_merge(other_hash) ⇒ Object
Merges two hashes with priority for the first hash.
-
#reverse_merge!(other_hash) ⇒ Object
Merges two hashes in-place with priority for the first hash.
- #stringify_keys ⇒ Object
- #stringify_keys! ⇒ Object
- #symbolize_keys ⇒ Object
- #symbolize_keys! ⇒ Object
- #transform_keys ⇒ Object
- #transform_keys! ⇒ Object
- #transform_values ⇒ Object
- #transform_values! ⇒ Object
Instance Method Details
#apply_defaults(other_hash) ⇒ Object
Apply other hash values if current value is blank
48 49 50 |
# File 'lib/libis/tools/extend/hash.rb', line 48 def apply_defaults(other_hash) self.merge(other_hash) {|_,v, w| v.blank? ? w : v} end |
#apply_defaults!(other_hash) ⇒ Object
Apply in-place other hash values if current value is blank
53 54 55 |
# File 'lib/libis/tools/extend/hash.rb', line 53 def apply_defaults!(other_hash) self.merge!(other_hash) {|_,v, w| v.blank? ? w : v} end |
#cleanup ⇒ Object
Removes all hash entries for which value.empty? is true
5 6 7 |
# File 'lib/libis/tools/extend/hash.rb', line 5 def cleanup self.delete_if { |_,v| v.nil? || (v.respond_to?(:empty?) ? v.empty? : false) } end |
#key_strings_to_symbols(options = {}) ⇒ Object
Return new Hash with all keys converted to symbols.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/libis/tools/extend/hash.rb', line 77 def key_strings_to_symbols( = {}) = {resursive: false, upcase: false, downcase: false}.merge r = Hash.new self.each_pair do |k,v| k = k.to_s if k.kind_of? Symbol if k.kind_of? String k = k.downcase if [:downcase] k = k.upcase if [:upcase] k = k.to_sym end if [:recursive] case v when Hash v = v.key_strings_to_symbols when Array # noinspection RubyResolve v = v.collect { |a| (a.kind_of? Hash) ? a.key_strings_to_symbols() : Marshal.load(Marshal.dump(a)) } else # noinspection RubyResolve v = Marshal.load(Marshal.dump(v)) end end r[k] = v end r end |
#key_strings_to_symbols!(options = {}) ⇒ Object
Convert all keys to symbols. In-place operation.
67 68 69 |
# File 'lib/libis/tools/extend/hash.rb', line 67 def key_strings_to_symbols!( = {}) self.replace self.key_strings_to_symbols end |
#key_symbols_to_strings(options = {}) ⇒ Object
Return new Hash with all keys converted to strings. (see #key_strings_to_symbols)
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/libis/tools/extend/hash.rb', line 128 def key_symbols_to_strings( = {}) = {resursive: false, upcase: false, downcase: false}.merge r = Hash.new self.each_pair do |k,v| k = k.to_sym if k.kind_of? String if k.kind_of? Symbol k = k.to_s k = k.downcase if [:downcase] k = k.upcase if [:upcase] end if [:recursive] case v when Hash v = v.key_symbols_to_strings() when Array # noinspection RubyResolve v = v.collect { |a| (a.kind_of? Hash) ? a.key_symbols_to_strings() : Marshal.load(Marshal.dump(a)) } else # noinspection RubyResolve v = Marshal.load(Marshal.dump(v)) end end r[k] = v end r end |
#key_symbols_to_strings!(options = {}) ⇒ Object
Convert all keys to strings. In-place operation. (@see #key_symbols_to_strings)
121 122 123 |
# File 'lib/libis/tools/extend/hash.rb', line 121 def key_symbols_to_strings!( = {}) self.replace self.key_symbols_to_strings end |
#recursive_cleanup ⇒ Object
Removes all hash entries for which value.empty? is true. Performed recursively.
10 11 12 13 |
# File 'lib/libis/tools/extend/hash.rb', line 10 def recursive_cleanup each { |_, v| v.recursive_cleanup if Array === v || Hash === v } cleanup end |
#recursive_merge(other_hash) ⇒ Object
Merges two hashes, but does so recursively.
16 17 18 19 20 21 22 23 24 |
# File 'lib/libis/tools/extend/hash.rb', line 16 def recursive_merge(other_hash) self.merge(other_hash) do |_, old_val, new_val| if old_val.is_a? Hash old_val.recursive_merge new_val else new_val end end end |
#recursive_merge!(other_hash) ⇒ Object
Merges two hashes in-place, but does so recursively.
27 28 29 30 31 32 33 34 35 |
# File 'lib/libis/tools/extend/hash.rb', line 27 def recursive_merge!(other_hash) self.merge!(other_hash) do |_, old_val, new_val| if old_val.is_a? Hash old_val.recursive_merge new_val else new_val end end end |
#reverse_merge(other_hash) ⇒ Object
Merges two hashes with priority for the first hash
38 39 40 |
# File 'lib/libis/tools/extend/hash.rb', line 38 def reverse_merge(other_hash) self.merge(other_hash) {|_,v, _| v} end |
#reverse_merge!(other_hash) ⇒ Object
Merges two hashes in-place with priority for the first hash
43 44 45 |
# File 'lib/libis/tools/extend/hash.rb', line 43 def reverse_merge!(other_hash) self.merge!(other_hash) {|_,v, _| v} end |
#stringify_keys ⇒ Object
110 111 112 |
# File 'lib/libis/tools/extend/hash.rb', line 110 def stringify_keys self.transform_keys {|k| k.to_s} end |
#stringify_keys! ⇒ Object
114 115 116 |
# File 'lib/libis/tools/extend/hash.rb', line 114 def stringify_keys! self.transform_keys! {|k| k.to_s} end |
#symbolize_keys ⇒ Object
57 58 59 |
# File 'lib/libis/tools/extend/hash.rb', line 57 def symbolize_keys self.transform_keys {|k| k.to_sym} end |
#symbolize_keys! ⇒ Object
61 62 63 |
# File 'lib/libis/tools/extend/hash.rb', line 61 def symbolize_keys! self.transform_keys! {|k| k.to_sym} end |
#transform_keys ⇒ Object
161 162 163 164 165 166 167 |
# File 'lib/libis/tools/extend/hash.rb', line 161 def transform_keys result = {} each_key do |key| result[yield(key)] = self[key] end result end |
#transform_keys! ⇒ Object
169 170 171 172 173 174 |
# File 'lib/libis/tools/extend/hash.rb', line 169 def transform_keys! keys.each do |key| self[yield(key)] = delete(key) end self end |
#transform_values ⇒ Object
176 177 178 179 180 181 182 183 184 |
# File 'lib/libis/tools/extend/hash.rb', line 176 def transform_values return enum_for(:transform_values) { size } unless block_given? return {} if empty? result = self.class.new each do |key, value| result[key] = yield(value) end result end |
#transform_values! ⇒ Object
186 187 188 189 190 191 |
# File 'lib/libis/tools/extend/hash.rb', line 186 def transform_values! return enum_for(:transform_values!) { size } unless block_given? each do |key, value| self[key] = yield(value) end end |