lib/confuse/config.rb in confuse-0.1.8 vs lib/confuse/config.rb in confuse-1.0.0
- old
+ new
@@ -1,48 +1,37 @@
-require 'confuse/config_mixin'
-require 'confuse/dsl'
+# coding: utf-8
module Confuse
- # The default module used for configuration.
- module Config
- extend ConfigMixin
- end
+ class Config
+ def initialize(definition, source)
+ @definition = definition
+ @source = source
+ end
- # Super class for configuration in order to have multiple instances.
- class ConfigBase
- include ConfigMixin
- extend DSL
+ def respond_to?(name)
+ @definition.defines?(name) || super
+ end
- def namespaces
- @namespaces ||= {}
+ def method_missing(name, *_args)
+ self[name] if respond_to?(name)
end
- def initialize(options = {})
- load_namespaces(self.class.namespaces.clone)
- paths = options[:paths] || []
- if paths.flatten.empty?
- read_files(self.class.config_path.flatten)
- else
- read_files(paths.flatten)
- end
- options[:conf].tap { |conf| conf && mixin_config!(conf) }
+ def [](name)
+ namespace, key = @definition.namespace_and_key(name)
+ lookup(namespace, key)
end
- def config
- self
+ def lookup(namespace, key)
+ @source[namespace, key] || @definition.default(namespace, key)
end
- def self.params_hash
- namespaces.reduce({}) do |memo, (name, namespace)|
- namespace.keys.each do |key|
- item = namespace.get_item(key)
- memo[:"#{name}_#{key}"] = {
- :type => item.type,
- :doc => item.description,
- :default => item.default_value }
+ # check items have a value. Will raise Undefined error if a required item
+ # has no value.
+ def check
+ @definition.namespaces.each do |(namespace, ns)|
+ ns.items.each do |key, _|
+ lookup(namespace, key)
end
- memo
end
end
-
end
end