Sha256: 1ee1f45a9491d0fbe026cc102212169c7311ab9447f6750b38b19cd97dd23f06
Contents?: true
Size: 1.44 KB
Versions: 4
Compression:
Stored size: 1.44 KB
Contents
# frozen_string_literal: true module Invar # A set of configurations class Scope def initialize(data = nil) @data = convert(data) @data.freeze @data_override = {} freeze end # Retrieve the value for the given key # # @param [symbol] key # @raise KeyError if no such key exists. # @see #override def fetch(key) key = key.downcase.to_sym @data_override.fetch(key, @data.fetch(key)) rescue KeyError => e raise KeyError, "#{ e.message }. Known keys are #{ @data.keys.sort.collect { |k| ":#{ k }" }.join(', ') }" end alias / fetch alias [] fetch def pretend(**) raise ::Invar::ImmutableRealityError, ::Invar::ImmutableRealityError::MSG end # Returns a hash representation of this scope and subscopes. # # @return [Hash] a hash representation of this scope def to_h @data.merge(@data_override).to_h.transform_values do |value| case value when Scope value.to_h else value end end end def key?(key_name) to_h.key?(key_name) end private def convert(data) (data || {}).dup.each_with_object({}) do |pair, agg| key, value = pair agg[key] = value.is_a?(Hash) ? Scope.new(value) : value end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
invar-0.6.1 | lib/invar/scope.rb |
invar-0.6.0 | lib/invar/scope.rb |
invar-0.5.1 | lib/invar/scope.rb |
invar-0.5.0 | lib/invar/scope.rb |