Module: Depth::Actions
- Included in:
- ComplexHash
- Defined in:
- lib/depth/actions.rb
Instance Method Summary collapse
- #alter(route, key: nil, value: nil) ⇒ Object
-
#base ⇒ Object
:nocov:.
- #delete(route) ⇒ Object
- #find(route) ⇒ Object
-
#set(route, value) ⇒ Object
:nocov:.
Instance Method Details
#alter(route, key: nil, value: nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/depth/actions.rb', line 24 def alter(route, key: nil, value: nil) return set(route, value) if key == nil route = RouteElement.convert_route(route) value = find(route) unless value new_route = (route[0 ... -1] << RouteElement.convert(key)) set(new_route, value) # ensure it exists old_key = route.last.key return unless old_key != key delete(route) end |
#base ⇒ Object
:nocov:
4 5 6 |
# File 'lib/depth/actions.rb', line 4 def base raise NoMethodError.new('should be overridden') end |
#delete(route) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/depth/actions.rb', line 35 def delete(route) route = RouteElement.convert_route(route) traverser = route[0...-1].reduce(Traverser.new(base)) do |t, route_el| t.next(route_el.key) end if traverser.array? traverser.object.delete_at(route.last.key) elsif traverser.hash? traverser.object.delete(route.last.key) end end |
#find(route) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/depth/actions.rb', line 17 def find(route) route = RouteElement.convert_route(route) route.reduce(Traverser.new(base)) { |t, route_el| t.next(route_el.key) }.object end |
#set(route, value) ⇒ Object
:nocov:
9 10 11 12 13 14 15 |
# File 'lib/depth/actions.rb', line 9 def set(route, value) route = RouteElement.convert_route(route) object = route[0 ... -1].reduce(Traverser.new(base)) { |t, route_el| t.next_or_create(route_el.key) { route_el.create } }.object object[route.last.key] = value end |