Class: HashDiggable
- Inherits:
-
DumbDelegator
- Object
- DumbDelegator
- HashDiggable
- Defined in:
- lib/MrMurano/variegated/ruby_dig.rb
Instance Method Summary collapse
- #a_diggable_hash? ⇒ Boolean
- #deep_delete(key, *rest) ⇒ Object
- #dig_safe(key, *rest) ⇒ Object
- #fill_safe(value, *path) ⇒ Object
-
#initialize(obj = nil) ⇒ HashDiggable
constructor
A new instance of HashDiggable.
Constructor Details
#initialize(obj = nil) ⇒ HashDiggable
Returns a new instance of HashDiggable.
29 30 31 |
# File 'lib/MrMurano/variegated/ruby_dig.rb', line 29 def initialize(obj=nil) super(obj || {}) end |
Instance Method Details
#a_diggable_hash? ⇒ Boolean
33 34 35 |
# File 'lib/MrMurano/variegated/ruby_dig.rb', line 33 def a_diggable_hash? true end |
#deep_delete(key, *rest) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/MrMurano/variegated/ruby_dig.rb', line 64 def deep_delete(key, *rest) if rest.empty? delete(key) else keys = [key] + rest[0..-2] target = rest[-1] value = dig_safe(*keys) value.delete(target) if value.is_a? ::Hash end end |
#dig_safe(key, *rest) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/MrMurano/variegated/ruby_dig.rb', line 43 def dig_safe(key, *rest) value = self[key] if value.nil? value = self[key] = ::HashDiggable.new else begin value.a_diggable_hash? # Okay! rescue ::NoMethodError => _err value = self[key] = ::HashDiggable.new(value) if value.is_a? ::Hash end end if rest.empty? value else value.dig_safe(*rest) end end |
#fill_safe(value, *path) ⇒ Object
37 38 39 40 41 |
# File 'lib/MrMurano/variegated/ruby_dig.rb', line 37 def fill_safe(value, *path) sub_hash = self sub_hash = dig_safe(*path[0..-2]) if path.length > 1 sub_hash[path[-1]] = value end |