Class: Hanami::Utils::Hash
- Inherits:
-
Object
- Object
- Hanami::Utils::Hash
- Defined in:
- lib/hanami/utils/hash.rb
Overview
Hash on steroids
Constant Summary collapse
- DUPLICATE_LOGIC =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
proc do |value| case value when Hash value.deep_dup when ::Hash Hash.new(value).deep_dup.to_h end end.freeze
Instance Method Summary collapse
-
#==(other) ⇒ TrueClass, FalseClass
(also: #eql?)
Equality.
-
#[](key) ⇒ Object?
Retrieves the value object corresponding to the key object.
-
#[]=(key, value) ⇒ Object
Associates the value given by value with the key given by key.
-
#deep_dup ⇒ Hash
Return a deep copy of the current Hanami::Utils::Hash.
-
#deep_symbolize! ⇒ Hash
Convert in-place all the keys to Symbol instances, nested hashes are converted too.
-
#delete(key) ⇒ Object?
Deletes the key-value pair and returns the value from hsh whose key is equal to key.
-
#hash ⇒ Fixnum
Returns the hash of the internal @hash.
-
#initialize(hash = {}, &blk) ⇒ Hanami::Utils::Hash
constructor
Initialize the hash.
-
#inspect ⇒ String
Returns a string describing the internal @hash.
-
#keys ⇒ Array
Returns a new array populated with the keys from this hash.
-
#method_missing(m, *args, &blk) ⇒ Object
private
Override Ruby’s method_missing in order to provide ::Hash interface.
-
#respond_to_missing?(m, include_private = false) ⇒ Boolean
private
Override Ruby’s respond_to_missing? in order to support ::Hash interface.
-
#stringify! ⇒ Hash
Convert in-place all the keys to Symbol instances, nested hashes are converted too.
-
#symbolize! ⇒ Hash
Convert in-place all the keys to Symbol instances.
-
#to_a ⇒ ::Array
Converts into a nested array of [ key, value ] arrays.
-
#to_h ⇒ ::Hash
(also: #to_hash)
Returns a Ruby Hash as duplicated version of self.
Constructor Details
#initialize(hash = {}, &blk) ⇒ Hanami::Utils::Hash
Initialize the hash
46 47 48 49 |
# File 'lib/hanami/utils/hash.rb', line 46 def initialize(hash = {}, &blk) @hash = hash.to_hash @hash.default_proc = blk end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &blk) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Override Ruby’s method_missing in order to provide ::Hash interface
303 304 305 306 307 308 309 |
# File 'lib/hanami/utils/hash.rb', line 303 def method_missing(m, *args, &blk) raise NoMethodError.new(%(undefined method `#{m}' for #{@hash}:#{self.class})) unless respond_to?(m) h = @hash.__send__(m, *args, &blk) h = self.class.new(h) if h.is_a?(::Hash) h end |
Instance Method Details
#==(other) ⇒ TrueClass, FalseClass Also known as: eql?
Equality
273 274 275 |
# File 'lib/hanami/utils/hash.rb', line 273 def ==(other) @hash == other.to_h end |
#[](key) ⇒ Object?
Retrieves the value object corresponding to the key object.
225 226 227 |
# File 'lib/hanami/utils/hash.rb', line 225 def [](key) @hash[key] end |
#[]=(key, value) ⇒ Object
Associates the value given by value with the key given by key.
237 238 239 |
# File 'lib/hanami/utils/hash.rb', line 237 def []=(key, value) @hash[key] = value end |
#deep_dup ⇒ Hash
Return a deep copy of the current Hanami::Utils::Hash
185 186 187 188 189 |
# File 'lib/hanami/utils/hash.rb', line 185 def deep_dup self.class.new.tap do |result| @hash.each { |k, v| result[k] = Duplicable.dup(v, &DUPLICATE_LOGIC) } end end |
#deep_symbolize! ⇒ Hash
Convert in-place all the keys to Symbol instances, nested hashes are converted too.
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/hanami/utils/hash.rb', line 88 def deep_symbolize! keys.each do |k| v = delete(k) v = self.class.new(v).deep_symbolize! if v.respond_to?(:to_hash) self[k.to_sym] = v end self end |
#delete(key) ⇒ Object?
Deletes the key-value pair and returns the value from hsh whose key is equal to key.
212 213 214 |
# File 'lib/hanami/utils/hash.rb', line 212 def delete(key) @hash.delete(key) end |
#hash ⇒ Fixnum
Returns the hash of the internal @hash
284 285 286 |
# File 'lib/hanami/utils/hash.rb', line 284 def hash @hash.hash end |
#inspect ⇒ String
Returns a string describing the internal @hash
293 294 295 |
# File 'lib/hanami/utils/hash.rb', line 293 def inspect @hash.inspect end |
#keys ⇒ Array
Returns a new array populated with the keys from this hash
198 199 200 |
# File 'lib/hanami/utils/hash.rb', line 198 def keys @hash.keys end |
#respond_to_missing?(m, include_private = false) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Override Ruby’s respond_to_missing? in order to support ::Hash interface
315 316 317 |
# File 'lib/hanami/utils/hash.rb', line 315 def respond_to_missing?(m, include_private = false) @hash.respond_to?(m, include_private) end |
#stringify! ⇒ Hash
Convert in-place all the keys to Symbol instances, nested hashes are converted too.
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/hanami/utils/hash.rb', line 113 def stringify! keys.each do |k| v = delete(k) v = self.class.new(v).stringify! if v.respond_to?(:to_hash) self[k.to_s] = v end self end |
#symbolize! ⇒ Hash
Convert in-place all the keys to Symbol instances.
65 66 67 68 69 70 71 72 |
# File 'lib/hanami/utils/hash.rb', line 65 def symbolize! keys.each do |k| v = delete(k) self[k.to_sym] = v end self end |
#to_a ⇒ ::Array
Converts into a nested array of [ key, value ] arrays.
264 265 266 |
# File 'lib/hanami/utils/hash.rb', line 264 def to_a @hash.to_a end |
#to_h ⇒ ::Hash Also known as: to_hash
Returns a Ruby Hash as duplicated version of self
248 249 250 251 252 253 |
# File 'lib/hanami/utils/hash.rb', line 248 def to_h @hash.each_with_object({}) do |(k, v), result| v = v.to_h if v.respond_to?(:to_hash) result[k] = v end end |