Sha256: 7051efe08de6f655cae2f7f4e24d15ac824cb06d8d51fb98aa4fe533af8b2cb1

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

module Econfig
  class Configuration
    attr_accessor :default_write_backend

    def backends
      @backends ||= BackendCollection.new
    end

    def fetch(key)
      key = key.to_s
      backend = backends.backend_for(key)
      if backend
        backend.get(key)
      else
        raise Econfig::NotFound, "configuration key '#{key}' is not set"
      end
    end

    def [](key)
      key = key.to_s
      backend = backends.backend_for(key)
      backend.get(key) if backend
    end

    def []=(backend_name = default_write_backend, key, value)
      raise ArgumentError, "no backend given" unless backend_name
      if backend = backends[backend_name]
        backend.set(key.to_s, value)
      else
        raise KeyError, "#{backend_name} is not set"
      end
    end

    def method_missing(name, *args)
      if respond_to?(name)
        raise ArgumentError, "too many arguments (#{args.length} for 0)" if args.length > 0
        if ::ENV["ECONFIG_PERMISSIVE"].to_s.empty?
          fetch(name)
        else
          self[name]
        end
      else
        super
      end
    end

    def respond_to_missing?(name, *)
      name = name.to_s
      not(name.end_with?("=") or name.end_with?("!") or name.end_with?("?"))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
econfig-2.0.0 lib/econfig/configuration.rb