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

Version Path
webtranslateit-safe-0.4.10 lib/web_translate_it/safe/config/node.rb
webtranslateit-safe-0.4.9 lib/web_translate_it/safe/config/node.rb
webtranslateit-safe-0.4.8 lib/web_translate_it/safe/config/node.rb
webtranslateit-safe-0.4.7 lib/web_translate_it/safe/config/node.rb
webtranslateit-safe-0.4.6 lib/web_translate_it/safe/config/node.rb