[](key)
click to toggle source
def [](key)
@set.each do |o|
if o.key? key
return o[key]
end
end
v = @defaults[key]
if v.respond_to? :call
v.call
else
v
end
end
[]=(key, val)
click to toggle source
def []=(key, val)
@cur[key] = val
end
all_of(key)
click to toggle source
def all_of(key)
all = []
@set.each do |o|
if v = o[key]
if v.kind_of? Array
all += v
else
all << v
end
end
end
all
end
explain()
click to toggle source
def explain
indent = ""
@set.each do |o|
o.keys.sort.each do |k|
puts "#{indent}#{k}: #{o[k].inspect}"
end
indent = " #{indent}"
end
end
fetch(key, default=nil)
click to toggle source
def fetch(key, default=nil)
val = self[key]
return val if val
default
end
flatten()
click to toggle source
def flatten
options = {}
@set.each do |o|
o.each do |k,v|
options[k] ||= v
end
end
options
end
force_defaults()
click to toggle source
def force_defaults
@defaults.each do |k,v|
if v.respond_to? :call
@defaults[k] = v.call
end
end
end
initialize_copy(other)
click to toggle source
def initialize_copy(other)
@set = @set.map { |o| o.dup }
@cur = @set.last
end
key?(key)
click to toggle source
def key?(key)
@set.each do |o|
if o.key? key
return true
end
end
@default.key? key
end
merge!(o)
click to toggle source
def merge!(o)
o.each do |k,v|
@cur[k]= v
end
end
shift()
click to toggle source
def shift
@cur = {}
@set << @cur
end