Class: PurpleHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/purple_hash.rb

Defined Under Namespace

Classes: HashFrozen

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}) ⇒ PurpleHash

Returns a new instance of PurpleHash.



8
9
10
11
# File 'lib/purple_hash.rb', line 8

def initialize(hash={})
  configure_from_hash(hash)
  @__frozen = false
end

Instance Method Details

#[](key) ⇒ Object



34
35
36
# File 'lib/purple_hash.rb', line 34

def [](key)
  super(key.to_sym)
end

#[]=(key, value) ⇒ Object

Raises:



38
39
40
41
42
43
44
45
46
# 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) ⇒ Object



24
25
26
27
28
29
30
31
32
# 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) ⇒ Object



48
49
50
51
# File 'lib/purple_hash.rb', line 48

def default(key)
  return nil if frozen?
  self[key] = PurpleHash.new
end

#default=(*args) ⇒ Object

Raises:

  • (RuntimeError)


53
54
55
# File 'lib/purple_hash.rb', line 53

def default=(*args)
  raise RuntimeError, "#{self.class} does not allow changing the default hash value"
end

#freeze!Object



13
14
15
16
17
18
# 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?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/purple_hash.rb', line 20

def frozen?
  @__frozen === true
end