Sha256: d36108256338ac067188dab7a5124fe6d022528899720656db8666eeb6a86a20

Contents?: true

Size: 979 Bytes

Versions: 5

Compression:

Stored size: 979 Bytes

Contents

module Nylas
  # Used to create a hash-like structure which defaults to raising an exception in the event the key to
  # retrieve does not exist.
  class Registry
    # Used to indicate an attempt to retrieve something not yet registered in a registry
    # Includes the list of keys in the registry for debug purposes.
    class MissingKeyError < Error
      def initialize(key, keys)
        super("key #{key} not in #{keys}")
      end
    end
    attr_accessor :registry_data

    extend Forwardable
    def_delegators :registry_data, :keys, :each, :reduce

    def initialize(initial_data = {})
      self.registry_data = initial_data.each.each_with_object({}) do |(key, value), registry|
        registry[key] = value
      end
    end

    def [](key)
      registry_data.fetch(key)
    rescue KeyError
      raise MissingKeyError.new(key, keys)
    end

    def []=(key, value)
      registry_data[key] = value
    end

    def to_h
      registry_data
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
nylas-4.2.1 lib/nylas/registry.rb
nylas-4.0.1 lib/nylas/registry.rb
nylas-4.2.0 lib/nylas/registry.rb
nylas-4.0.0.rc3 lib/nylas/registry.rb
nylas-4.0.0.rc2 lib/nylas/registry.rb