class Ninja::Hash

Public Class Methods

new(hash) click to toggle source
# File lib/ninja/hash.rb, line 3
def initialize hash
  self.replace hash
  hash.keys.each{|key| define(key) }
end

Public Instance Methods

[]=(key, value) click to toggle source
Calls superclass method
# File lib/ninja/hash.rb, line 8
def []=(key, value)
  super(key, value)
  define(key)
end
get(key, &block) click to toggle source
# File lib/ninja/hash.rb, line 13
def get(key, &block)
  unless value = self.send(key)
    block && block.call
  else
    value
  end
end
method_missing(name, *args) click to toggle source
# File lib/ninja/hash.rb, line 21
def method_missing(name, *args)
  if md = name.to_s.match(/(.+)=\z/)
    define(md[1])
    self.send(name, *args)
  end
  nil
end

Private Instance Methods

define(key) click to toggle source
# File lib/ninja/hash.rb, line 30
def define key
  define_singleton_method(key) {
    value = case key
            when String
              (self[key] || self[key.to_sym])
            else
              (self[key] || self[key.to_s])
            end
    if value.is_a?(::Hash)
      value = Ninja::Hash.new(value)
      self[key] = value
    end
    value
  }

  define_singleton_method("#{key}=") {|value|
    self[key] = value
  }
end