Sha256: 32bea2d2a5bd04cdddb2af0afea5963c7c9fbfe6f6c71acba65329250e7108c0
Contents?: true
Size: 1.62 KB
Versions: 1
Compression:
Stored size: 1.62 KB
Contents
module Depth module Actions #:nocov: def base raise NoMethodError.new('should be overridden') end #:nocov: 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 def find(route, create: false, default: nil) route = RouteElement.convert_route(route) parent = route[0 ... -1].reduce(Traverser.new(base)) { |t, route_el| if create t.next_or_create(route_el.key) { route_el.create } else t.next(route_el.key) end }.object object = parent ? parent[route.last.key] : nil return object unless object.nil? return parent[route.last.key] = default if create && default default end 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 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
depth-0.3.0 | lib/depth/actions.rb |