module NeoScout::HashDefaultsMixin
Public Class Methods
included(base)
click to toggle source
# File lib/neoscout/tools.rb, line 100 def self.included(base) # defines map_value for mixin target baseclass instances and any subclass instances base.class_exec(base) do |base_class| define_method(:map_value) do |&blk| new_hash = {} each_pair do |k,v| new_hash[k] = if v.kind_of? base_class then v.map_value(&blk) else blk.call(v) end end new_hash end end # defines new_multi_keyed on the mixin's target baseclass # (subclasses the baseclass to override key_descr for instances) def base.new_multi_keyed(*list, &blk) new_class = Class.new(self) (class << new_class ; self end).class_exec(list.shift) do |descr| define_method(:key_descr) { || descr } end if list.empty? then new_class.new(&blk) else new_class.new { |key| self.new_multi_keyed(*list, &blk) } end end end
new(*args, &blk)
click to toggle source
Calls superclass method
# File lib/neoscout/tools.rb, line 78 def initialize(*args, &blk) super *args @default = blk end
Public Instance Methods
[](key)
click to toggle source
Calls superclass method
# File lib/neoscout/tools.rb, line 87 def [](key) if has_key?(key) then super(key) else self[key]=default(key) end end
default(key)
click to toggle source
# File lib/neoscout/tools.rb, line 83 def default(key) @default.call(key) end
key_descr()
click to toggle source
# File lib/neoscout/tools.rb, line 95 def key_descr :key end
lookup(key, default_value = nil)
click to toggle source
# File lib/neoscout/tools.rb, line 91 def lookup(key, default_value = nil) if has_key?(key) then self[key] else self[key]=default_value end end