Class: InsertOrderPreservingHash

Inherits:
Hash
  • Object
show all
Includes:
Enumerable
Defined in:
lib/json/ld/extensions.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ InsertOrderPreservingHash

Returns a new instance of InsertOrderPreservingHash.



40
41
42
43
# File 'lib/json/ld/extensions.rb', line 40

def initialize(*args, &block)
  super
  @ordered_keys = []
end

Instance Method Details

#[]=(key, val) ⇒ Object



45
46
47
48
# File 'lib/json/ld/extensions.rb', line 45

def []=(key, val)
  @ordered_keys << key unless has_key? key
  super
end

#clearObject



71
72
73
74
# File 'lib/json/ld/extensions.rb', line 71

def clear
  @ordered_keys.clear
  super
end

#delete(k, &block) ⇒ Object



76
77
78
79
# File 'lib/json/ld/extensions.rb', line 76

def delete(k, &block)
  @ordered_keys.delete(k)
  super
end

#delete_if(&block) ⇒ Object



88
89
90
91
# File 'lib/json/ld/extensions.rb', line 88

def delete_if(&block)
  reject!(&block)
  self
end

#eachObject Also known as: each_pair



50
51
52
# File 'lib/json/ld/extensions.rb', line 50

def each
  @ordered_keys.each {|k| yield(k, super[k])}
end

#each_keyObject



59
60
61
# File 'lib/json/ld/extensions.rb', line 59

def each_key
  @ordered_keys.each {|k| yield k}
end

#each_valueObject



55
56
57
# File 'lib/json/ld/extensions.rb', line 55

def each_value
  @ordered_keys.each {|k| yield(super[k])}
end

#keysObject



63
64
65
# File 'lib/json/ld/extensions.rb', line 63

def keys
  @ordered_keys
end

#merge(other) ⇒ Object



99
100
101
# File 'lib/json/ld/extensions.rb', line 99

def merge(other)
  self.dup.merge!(other)
end

#merge!(other) ⇒ Object



93
94
95
96
97
# File 'lib/json/ld/extensions.rb', line 93

def merge!(other)
  @ordered_keys += other.instance_variable_get(:@ordered_keys) || other.keys
  super
  self
end

#reject!Object



81
82
83
84
85
86
# File 'lib/json/ld/extensions.rb', line 81

def reject!
  del = []
  each_pair {|k,v| del << k if yield k,v}
  del.each {|k| delete k}
  del.empty? ? nil : self
end

#valuesObject



67
68
69
# File 'lib/json/ld/extensions.rb', line 67

def values
  @ordered_keys.map {|k| super[k]}
end