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.



36
37
38
# File 'lib/mongo/util/ordered_hash.rb', line 36

def ordered_keys
  @ordered_keys
end

Instance Method Details

#==(other) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/mongo/util/ordered_hash.rb', line 23

def ==(other)
  begin
    !other.nil? &&
      keys == other.keys &&
      values == other.values
  rescue
    false
  end
end

#[]=(key, value) ⇒ Object



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

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

#clearObject



89
90
91
92
# File 'lib/mongo/util/ordered_hash.rb', line 89

def clear
  super
  @ordered_keys = []
end

#delete(key, &block) ⇒ Object



76
77
78
79
# File 'lib/mongo/util/ordered_hash.rb', line 76

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

#delete_if(&block) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/mongo/util/ordered_hash.rb', line 81

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

#eachObject



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

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

#inspectObject



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

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

#keysObject



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

def keys
  @ordered_keys || []
end

#merge(other) ⇒ Object



57
58
59
60
61
# File 'lib/mongo/util/ordered_hash.rb', line 57

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

#merge!(other) ⇒ Object



63
64
65
66
67
68
# File 'lib/mongo/util/ordered_hash.rb', line 63

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

#valuesObject



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

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