Class: OrderedHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/mongo/util/ordered_hash.rb

Overview

A hash in which the order of keys are preserved.

Under Ruby 1.9 and greater, this class has no added methods because Ruby’s Hash already keeps its keys ordered by order of insertion.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#ordered_keysObject

Returns the value of attribute ordered_keys.



26
27
28
# File 'lib/mongo/util/ordered_hash.rb', line 26

def ordered_keys
  @ordered_keys
end

Instance Method Details

#[]=(key, value) ⇒ Object



32
33
34
35
36
# File 'lib/mongo/util/ordered_hash.rb', line 32

def []=(key, value)
  @ordered_keys ||= []
  @ordered_keys << key unless @ordered_keys.include?(key)
  super(key, value)
end

#clearObject



79
80
81
82
# File 'lib/mongo/util/ordered_hash.rb', line 79

def clear
  super
  @ordered_keys = []
end

#delete(key, &block) ⇒ Object



66
67
68
69
# File 'lib/mongo/util/ordered_hash.rb', line 66

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

#delete_if(&block) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/mongo/util/ordered_hash.rb', line 71

def delete_if(&block)
  self.each { |k,v|
    if yield k, v
      delete(k)
    end
  }
end

#eachObject



38
39
40
41
# File 'lib/mongo/util/ordered_hash.rb', line 38

def each
  @ordered_keys ||= []
  @ordered_keys.each { |k| yield k, self[k] }
end

#inspectObject



60
61
62
63
64
# File 'lib/mongo/util/ordered_hash.rb', line 60

def inspect
  str = '{'
  str << (@ordered_keys || []).collect { |k| "\"#{k}\"=>#{self.[](k).inspect}" }.join(", ")
  str << '}'
end

#keysObject



28
29
30
# File 'lib/mongo/util/ordered_hash.rb', line 28

def keys
  @ordered_keys || []
end

#merge(other) ⇒ Object



47
48
49
50
51
# File 'lib/mongo/util/ordered_hash.rb', line 47

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

#merge!(other) ⇒ Object



53
54
55
56
57
58
# File 'lib/mongo/util/ordered_hash.rb', line 53

def merge!(other)
  @ordered_keys ||= []
  @ordered_keys += other.keys # unordered if not an OrderedHash
  @ordered_keys.uniq!
  super(other)
end

#valuesObject



43
44
45
# File 'lib/mongo/util/ordered_hash.rb', line 43

def values
  collect { |k, v| v }
end