Class: ImmutableHash

Inherits:
Object
  • Object
show all
Defined in:
lib/values/immutable_hash.rb

Instance Method Summary collapse

Constructor Details

#initialize(key_or_hash = nil, value = nil) ⇒ ImmutableHash

Returns a new instance of ImmutableHash.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/values/immutable_hash.rb', line 4

def initialize key_or_hash = nil,value = nil
  
  @hash = {}
  
  if key_or_hash.is_a?(ImmutableHash)
    @hash = key_or_hash.inner_hash
  elsif key_or_hash.is_a?(Hash)
    if(key_or_hash.frozen?) 
      @hash = key_or_hash
    else
      @hash = key_or_hash.dup
    end
  elsif !key_or_hash.nil?
    @hash[key_or_hash] = value
  end
  
  @hash.freeze
end

Instance Method Details

#-(to_remove) ⇒ Object



47
48
49
# File 'lib/values/immutable_hash.rb', line 47

def - to_remove
  delete to_remove
end

#==(object) ⇒ Object



92
93
94
# File 'lib/values/immutable_hash.rb', line 92

def == object
  eql? object
end

#[](key) ⇒ Object



23
24
25
# File 'lib/values/immutable_hash.rb', line 23

def [] key
  @hash[key]
end

#add(key_or_hash, value = nil) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/values/immutable_hash.rb', line 78

def add key_or_hash,value = nil
  if key_or_hash.is_a?(ImmutableHash) || key_or_hash.is_a?(Hash)
    newHash = @hash.dup
    key_or_hash.keys.each do |key|
      newHash[key] = key_or_hash[key]
    end
    ImmutableHash.new(newHash.freeze)
  else
    newHash = @hash.dup
    newHash[key_or_hash] = value
    ImmutableHash.new newHash.freeze
  end
end

#countObject



39
40
41
# File 'lib/values/immutable_hash.rb', line 39

def count
  @hash.count
end

#delete(*to_remove) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/values/immutable_hash.rb', line 57

def delete *to_remove
  
  newHash = @hash.dup
  
  to_remove.each do |to_remove|
    if to_remove.is_a?(ImmutableHash) || to_remove.is_a?(Hash)
      to_remove.keys.each do |value|
        newHash.delete value if newHash[value] == to_remove[value]
      end
    elsif to_remove.is_a? Array 
      to_remove.each do |value|
        newHash.delete value
      end
    else
      newHash.delete to_remove
    end
  end
  
  ImmutableHash.new newHash.freeze
end

#eachObject



51
52
53
54
55
# File 'lib/values/immutable_hash.rb', line 51

def each
  @hash.each do |key,value|
    yield key,value
  end
end

#eql?(object) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
99
100
101
102
103
104
# File 'lib/values/immutable_hash.rb', line 96

def eql?(object)
  if object.equal?(self)
    true
  elsif !self.class.equal?(object.class)
    false
  else
    self.inner_hash.eql?(object.inner_hash)
  end
end

#hashObject



106
107
108
# File 'lib/values/immutable_hash.rb', line 106

def hash
  @hash.hash
end

#keysObject



31
32
33
# File 'lib/values/immutable_hash.rb', line 31

def keys
  @hash.keys
end

#set(key_or_hash, value = nil) ⇒ Object



27
28
29
# File 'lib/values/immutable_hash.rb', line 27

def set key_or_hash,value = nil
  add key_or_hash,value
end

#sizeObject



43
44
45
# File 'lib/values/immutable_hash.rb', line 43

def size
  @hash.size
end

#valuesObject



35
36
37
# File 'lib/values/immutable_hash.rb', line 35

def values
  @hash.values
end