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.



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

def ordered_keys
  @ordered_keys
end

Instance Method Details

#==(other) ⇒ Object



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

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

#[]=(key, value) ⇒ Object



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

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

#clearObject



85
86
87
88
# File 'lib/mongo/util/ordered_hash.rb', line 85

def clear
  super
  @ordered_keys = []
end

#delete(key, &block) ⇒ Object



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

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

#delete_if(&block) ⇒ Object



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

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

#eachObject



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

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

#inspectObject



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

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

#keysObject



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

def keys
  @ordered_keys || []
end

#merge(other) ⇒ Object



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

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

#merge!(other) ⇒ Object



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

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

#valuesObject



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

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