class PurpleHash

Public Class Methods

new(hash={}) click to toggle source
# File lib/purple_hash.rb, line 8
def initialize(hash={})
  configure_from_hash(hash)
  @__frozen = false
end

Public Instance Methods

[](key) click to toggle source
Calls superclass method
# File lib/purple_hash.rb, line 34
def [](key)
  super(key.to_sym)
end
[]=(key, value) click to toggle source
Calls superclass method
# File lib/purple_hash.rb, line 38
def []=(key, value)
  raise HashFrozen if frozen?

  if value.is_a?(Hash) && !value.is_a?(self.class)
    self[key].configure_from_hash(value)
  else
    super(key.to_sym, value)
  end
end
configure_from_hash(hash) click to toggle source
# File lib/purple_hash.rb, line 24
def configure_from_hash(hash)
  hash.each do |key, value|
    if value.is_a?(Hash)
      self[key].configure_from_hash(value)
    else
      self[key] = value
    end
  end
end
default(key) click to toggle source
# File lib/purple_hash.rb, line 48
def default(key)
  return nil if frozen?
  self[key] = PurpleHash.new
end
default=(*args) click to toggle source
# File lib/purple_hash.rb, line 53
def default=(*args)
  raise RuntimeError, "#{self.class} does not allow changing the default hash value"
end
freeze!() click to toggle source
# File lib/purple_hash.rb, line 13
def freeze!
  self.each do |k, h|
    h.freeze! if h.respond_to?(:freeze!)
  end
  @__frozen = true
end
frozen?() click to toggle source
# File lib/purple_hash.rb, line 20
def frozen?
  @__frozen === true
end