Class: BSON::OrderedHash
Instance Attribute Summary (collapse)
-
- (Object) ordered_keys
We only need the body of this class if the RUBY_VERSION is before 1.9.
Class Method Summary (collapse)
Instance Method Summary (collapse)
- - (Object) ==(other)
- - (Object) []=(key, value)
- - (Object) clear
- - (Object) clone
- - (Object) delete(key, &block)
- - (Object) delete_if(&block)
- - (Object) dup
- - (Object) each (also: #each_pair)
- - (Boolean) eql?(o)
- - (Object) hash
-
- (OrderedHash) initialize(*a, &b)
constructor
A new instance of OrderedHash.
- - (Object) inspect
- - (Object) keys
- - (Object) merge(other)
- - (Object) merge!(other) (also: #update)
- - (Object) reject(&block)
- - (Object) reject!(&block)
- - (Object) to_a
- - (Object) values
- - (Object) yaml_initialize(tag, val)
Methods inherited from Hash
Constructor Details
- (OrderedHash) initialize(*a, &b)
A new instance of OrderedHash
59 60 61 62 |
# File 'lib/bson/ordered_hash.rb', line 59 def initialize(*a, &b) @ordered_keys = [] super end |
Instance Attribute Details
- (Object) ordered_keys
We only need the body of this class if the RUBY_VERSION is before 1.9
42 43 44 |
# File 'lib/bson/ordered_hash.rb', line 42 def ordered_keys @ordered_keys end |
Class Method Details
+ (Object) [](*args)
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/bson/ordered_hash.rb', line 44 def self.[] *args oh = BSON::OrderedHash.new if Hash === args[0] oh.merge! args[0] elsif (args.size % 2) != 0 raise ArgumentError, "odd number of elements for Hash" else 0.step(args.size - 1, 2) do |key| value = key + 1 oh[args[key]] = args[value] end end oh end |
Instance Method Details
- (Object) ==(other)
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/bson/ordered_hash.rb', line 27 def ==(other) begin case other when BSON::OrderedHash keys == other.keys && values == other.values else super end rescue false end end |
- (Object) []=(key, value)
73 74 75 76 77 78 79 |
# File 'lib/bson/ordered_hash.rb', line 73 def []=(key, value) #@ordered_keys ||= [] unless has_key?(key) @ordered_keys << key end super(key, value) end |
- (Object) clear
157 158 159 160 |
# File 'lib/bson/ordered_hash.rb', line 157 def clear super @ordered_keys = [] end |
- (Object) clone
179 180 181 |
# File 'lib/bson/ordered_hash.rb', line 179 def clone Marshal::load(Marshal.dump(self)) end |
- (Object) delete(key, &block)
127 128 129 130 |
# File 'lib/bson/ordered_hash.rb', line 127 def delete(key, &block) @ordered_keys.delete(key) if @ordered_keys super end |
- (Object) delete_if(&block)
132 133 134 135 136 137 138 |
# File 'lib/bson/ordered_hash.rb', line 132 def delete_if(&block) self.each do |k,v| if yield k, v delete(k) end end end |
- (Object) dup
112 113 114 115 116 117 118 119 |
# File 'lib/bson/ordered_hash.rb', line 112 def dup result = OrderedHash.new #@ordered_keys ||= [] @ordered_keys.each do |key| result[key] = self[key] end result end |
- (Object) each Also known as: each_pair
81 82 83 84 85 |
# File 'lib/bson/ordered_hash.rb', line 81 def each #@ordered_keys ||= [] @ordered_keys.each { |k| yield k, self[k] } self end |
- (Boolean) eql?(o)
171 172 173 174 175 176 177 |
# File 'lib/bson/ordered_hash.rb', line 171 def eql?(o) if o.instance_of? BSON::OrderedHash self.hash == o.hash else false end end |
- (Object) hash
162 163 164 165 166 167 168 169 |
# File 'lib/bson/ordered_hash.rb', line 162 def hash code = 17 each_pair do |key, value| code = 37 * code + key.hash code = 37 * code + value.hash end code & 0x7fffffff end |
- (Object) inspect
121 122 123 124 125 |
# File 'lib/bson/ordered_hash.rb', line 121 def inspect str = '{' str << (@ordered_keys || []).collect { |k| "\"#{k}\"=>#{self.[](k).inspect}" }.join(", ") str << '}' end |
- (Object) keys
69 70 71 |
# File 'lib/bson/ordered_hash.rb', line 69 def keys @ordered_keys# || [] end |
- (Object) merge(other)
97 98 99 100 101 |
# File 'lib/bson/ordered_hash.rb', line 97 def merge(other) oh = self.dup oh.merge!(other) oh end |
- (Object) merge!(other) Also known as: update
103 104 105 106 107 108 |
# File 'lib/bson/ordered_hash.rb', line 103 def merge!(other) #@ordered_keys ||= [] @ordered_keys += other.keys # unordered if not an BSON::OrderedHash @ordered_keys.uniq! super(other) end |
- (Object) reject(&block)
140 141 142 143 144 |
# File 'lib/bson/ordered_hash.rb', line 140 def reject(&block) clone = self.clone return clone unless block_given? clone.delete_if(&block) end |
- (Object) reject!(&block)
146 147 148 149 150 151 152 153 154 155 |
# File 'lib/bson/ordered_hash.rb', line 146 def reject!(&block) changed = false self.each do |k,v| if yield k, v changed = true delete(k) end end changed ? self : nil end |
- (Object) to_a
88 89 90 91 |
# File 'lib/bson/ordered_hash.rb', line 88 def to_a #@ordered_keys ||= [] @ordered_keys.map { |k| [k, self[k]] } end |
- (Object) values
93 94 95 |
# File 'lib/bson/ordered_hash.rb', line 93 def values collect { |k, v| v } end |
- (Object) yaml_initialize(tag, val)
64 65 66 67 |
# File 'lib/bson/ordered_hash.rb', line 64 def yaml_initialize(tag, val) @ordered_keys = [] super end |