lib/confuse/namespace.rb in confuse-0.1.8 vs lib/confuse/namespace.rb in confuse-1.0.0

- old
+ new

@@ -1,75 +1,22 @@ -require 'confuse/config_item' +# coding: utf-8 module Confuse # A {Namespace} is a container to keep configuration data seperate from the # rest of the config. class Namespace + attr_reader :items - attr_reader :items, :supress_warnings_flag, :strict_flag - def initialize(&block) @items = {} - @supress_warnings_flag = false - @strict_flag = false - instance_eval(&block) + block.call(self) if block_given? end - def define(name, &block) - @items[name] = ConfigItem.new(name, &block) + def add_item(name, opts = {}) + @items[name] = Item.new(name, opts) end - def supress_warnings - @supress_warnings_flag = true - end - - def strict - @strict_flag = true - end - - def [](key, config = nil) - value = (i = get_item(key)) && i.value - if value.respond_to?(:call) && !config.nil? - value.call(config) - else - value - end - end - - def []=(key, value) - item = get_item(key) || create_new_key(key, value) - item && item.value = value - end - - def keys - @items.keys - end - - def create_new_key(key, value) - if @supress_warnings_flag - puts "Warning: config includes unknown option '#{key}'" - end - @items[key] = ConfigItem.new(key, &nil) unless @strict_flag - end - - def get_item(key) + def [](key) @items[key] end - - def merge!(namespace) - @strict_flag = namespace.strict - @supress_warnings_flag = namespace.supress_warnings - @items.merge! namespace.clone.items - end - - def clone - c = super - items = @items.reduce({}) do |m, (k, v)| - m[k] = v.clone - m - end - c.instance_variable_set(:"@items", items) - c - end - end end