class MoStash

Attributes

default_proc[RW]

Public Class Methods

new(init={}, &def_proc) click to toggle source
Calls superclass method
# File lib/mostash/mostash.rb, line 6
def initialize(init={}, &def_proc)
  @default_proc = nil
  if init.is_a? Hash
    __init__ init
    self.send(:default=, init.default) if init.default
    @default_proc = init.default_proc if init.default_proc
  else
    super
  end
  @default_proc = def_proc if block_given?
end
Also aliased as: orig_init

Public Instance Methods

[](key) click to toggle source
# File lib/mostash/mostash.rb, line 40
def [](key)
  __get__ key.to_sym
end
Also aliased as: __get__
[]=(key, value) click to toggle source
# File lib/mostash/mostash.rb, line 35
def []=(key, value)
  __set__ key.to_sym, __adjusted_value__(value)
end
Also aliased as: __set__
__get__(key)
Alias for: []
__set__(key, value)
Alias for: []=
clone() click to toggle source
# File lib/mostash/mostash.rb, line 18
def clone
  Mostash.new(self)
end
Also aliased as: dup
dup()
Alias for: clone
merge(from={}) click to toggle source
# File lib/mostash/mostash.rb, line 55
def merge(from={})
  self.clone.merge! from
end
merge!(from={}) click to toggle source
# File lib/mostash/mostash.rb, line 44
def merge!(from={})
  from.each_pair do |key, value|
    new_value = case value
                when Hash then Mostash.new(self[key] || {}).merge(value)
                else value
                end
    self[key] = new_value
  end
  self
end
method_missing(method_name, *args, &block) click to toggle source
# File lib/mostash/mostash.rb, line 23
def method_missing(method_name, *args, &block)
  #dbg "#{method_name} was sent #{args.inspect}, and block #{block.inspect}"
  return default_proc.call(self, method_name) if default_proc
  if __is_setter__( method_name )
    method_name = method_name.to_s.gsub! '=', ''
    self[method_name] = args.first
  else
    self[method_name]
  end
end
orig_init(init={}, &def_proc)
Alias for: new

Private Instance Methods

__adjusted_value__(value) click to toggle source
# File lib/mostash/mostash.rb, line 66
def __adjusted_value__(value)
  case value
  when Hash then Mostash.new( value )
  when Array then value.map{ |v| __adjusted_value__( v ) }
  else value
  end#.tap { |ret| dbg "calc adj value for #{value.inspect} = #{ret}" }
end
__init__(hash) click to toggle source
# File lib/mostash/mostash.rb, line 60
def __init__(hash)
  hash.each_pair do |key, value|
    self[key] =  __adjusted_value__( value )
  end
end
__is_setter__(method_name) click to toggle source
# File lib/mostash/mostash.rb, line 74
def __is_setter__(method_name)
  method_name.to_s =~ /=$/
end
eigenclass() click to toggle source
# File lib/mostash/mostash.rb, line 78
def eigenclass
  class << self
    self
  end
end