Sha256: 324bb8f06baf940a7eaa8d10d7f101388a43d2822d426abfbc1a05cbf9a21cb6
Contents?: true
Size: 1.63 KB
Versions: 5
Compression:
Stored size: 1.63 KB
Contents
module WebTranslateIt module Safe module Config class Node attr_reader :parent, :data def initialize(parent = nil, data = {}, &) @parent = parent @data = {} merge(data, &) end def merge(data = {}, &block) builder = Builder.new(self, data) builder.instance_eval(&block) if block self end # looks for the path from this node DOWN. will not delegate to parent def get(*path) key = path.shift value = @data[key.to_s] return value if !value.nil? && path.empty? value&.get(*path) end # recursive find # starts at the node and continues to the parent def find(*path) get(*path) || @parent&.find(*path) end alias [] find def set_multi(key, value) @data[key.to_s] ||= [] @data[key.to_s].push(*value) end def set(key, value) @data[key.to_s] = value end alias []= set def each(&) @data.each(&) end include Enumerable def to_hash @data.keys.each_with_object({}) do |key, res| value = @data[key] res[key] = value.is_a?(Node) ? value.to_hash : value end end def dump(indent = '') @data.each do |key, value| if value.is_a?(Node) puts "#{indent}#{key}:" value.dump("#{indent} ") else puts "#{indent}#{key}: #{value.inspect}" end end end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems