Sha256: 4e6b81d2fd9da3fa0090b5388ca0f1a444089ed6131328a10aad55f9d5f9dc7f
Contents?: true
Size: 1.2 KB
Versions: 7
Compression:
Stored size: 1.2 KB
Contents
# frozen_string_literal: true module Nocode module Util # A hash-like object which ensures all keys are strings. class Dictionary extend Forwardable NEWLINE_CHAR = "\n" class << self def ensure(value) if value.is_a?(self) value else new(value) end end end attr_reader :values def_delegators :values, :empty? def initialize(values = {}) @values = {} (values || {}).each { |k, v| assign(k, v) } freeze end def delete(key) tap { values.delete(keyify(key)) } end def []=(key, value) tap { values[keyify(key)] = value } end def [](key) values[keyify(key)] end def dig(*keys) top_level = keyify(keys.first) keys = [top_level] + keys[1..] values.dig(*keys) end def key?(key) values.key?(keyify(key)) end def to_s values.map { |k, v| "#{k}: #{v}" }.join(NEWLINE_CHAR) end private def assign(key, value) values[keyify(key)] = value end def keyify(value) value.to_s end end end end
Version data entries
7 entries across 7 versions & 1 rubygems