class Configatron::Store
Public Class Methods
new(root_store, name='configatron', attributes={}, path=[])
click to toggle source
# File lib/configatron/store.rb, line 7 def initialize(root_store, name='configatron', attributes={}, path=[]) @root_store = root_store @name = name @attributes = attributes # We could derive @name from @path, though this would break # backwards-compatibility. @path = path @cow = root_store.__cow end
Public Instance Methods
[](key)
click to toggle source
# File lib/configatron/store.rb, line 41 def [](key) val = fetch(key.to_sym) do if @root_store.locked? ::Kernel.raise ::Configatron::UndefinedKeyError.new("Key not found: #{key} (for locked #{self})") end ::Configatron::Store.new(@root_store, "#{@name}.#{key}", {}, @path + [key]) end return val end
__cow()
click to toggle source
# File lib/configatron/store.rb, line 28 def __cow @cow end
__cow_clone()
click to toggle source
# File lib/configatron/store.rb, line 32 def __cow_clone # A temp has started since the last time this was written if @root_store.__cow != @cow self.clone else self end end
clone()
click to toggle source
# File lib/configatron/store.rb, line 19 def clone Store.new( @root_store, @name, @attributes.clone, @path ) end
configure_from_hash(hash)
click to toggle source
# File lib/configatron/store.rb, line 89 def configure_from_hash(hash) hash.each do |key, value| if ::Hash === value self[key].configure_from_hash(value) else store(key, value) end end end
fetch(key, default_value = nil, &block)
click to toggle source
# File lib/configatron/store.rb, line 67 def fetch(key, default_value = nil, &block) key = key.to_sym if key?(key) val = @attributes[key] else if block val = block.call elsif default_value val = default_value end store(key, val) end if ::Configatron::Proc === val val = val.call end return val end
inspect()
click to toggle source
# File lib/configatron/store.rb, line 103 def inspect f_out = [] @attributes.each do |k, v| if ::Configatron::Store === v v.inspect.each_line do |line| if line.match(/\n/) line.each_line do |l| l.strip! f_out << l end else line.strip! f_out << line end end else f_out << "#{@name}.#{k} = #{v.inspect}" end end f_out.compact.sort.join("\n") end
key?(key)
click to toggle source
# File lib/configatron/store.rb, line 85 def key?(key) @attributes.key?(key.to_sym) end
Also aliased as: has_key?
method_missing(name, *args, &block)
click to toggle source
# File lib/configatron/store.rb, line 125 def method_missing(name, *args, &block) do_lookup(name, *args, &block) end
nil?()
click to toggle source
So that we keep backward-compatibility in case people are using nil? to check configatron settings:
# File lib/configatron/store.rb, line 143 def nil? false end
store(key, value)
click to toggle source
# File lib/configatron/store.rb, line 51 def store(key, value) if @root_store.locked? ::Kernel.raise ::Configatron::LockedError.new("Cannot set key #{key} for locked #{self}") end key = key.to_sym if @root_store.__cow != @cow copy = @root_store.__cow_path(@path) # Cow should now match, so this won't recurse. (Note this is # not particularly thread-safe.) copy.store(key, value) else @attributes[key] = value end end
Also aliased as: []=
to_ary()
click to toggle source
So that puts works (it expects the object to respond to #to_ary)
# File lib/configatron/store.rb, line 137 def to_ary nil end
to_h()
click to toggle source
# File lib/configatron/store.rb, line 129 def to_h @attributes.each_with_object({}) do |(k, v), h| v = v.call if ::Configatron::Proc === v h[k] = Store === v ? v.to_h : v end end
Also aliased as: to_hash
to_s()
click to toggle source
# File lib/configatron/store.rb, line 99 def to_s @name end
Private Instance Methods
do_lookup(name, *args) { |self| ... }
click to toggle source
# File lib/configatron/store.rb, line 149 def do_lookup(name, *args, &block) if block yield self[name] else name = name.to_s if /(.+)=$/.match(name) return store($1, args[0]) elsif /(.+)!/.match(name) key = $1 if self.has_key?(key) return self[key] else ::Kernel.raise ::Configatron::UndefinedKeyError.new($1) end else return self[name] end end end