class BSON::OrderedHash

Public Class Methods

[](*args) click to toggle source
# File lib/bson/ordered_hash.rb, line 58
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
new(*a, &b) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 73
def initialize(*a, &b)
  @ordered_keys = []
  super
end

Public Instance Methods

==(other) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 23
def ==(other)
  begin
    case other
    when BSON::OrderedHash
       keys == other.keys && values == other.values
    else
      super
    end
  rescue
    false
  end
end
[]=(key, value) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 87
def []=(key, value)
  unless has_key?(key)
    @ordered_keys << key
  end
  super(key, value)
end
clear() click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 167
def clear
  super
  @ordered_keys = []
end
delete(key, &block) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 141
def delete(key, &block)
  @ordered_keys.delete(key) if @ordered_keys
  super
end
delete_if() { |key, self| ... } click to toggle source
# File lib/bson/ordered_hash.rb, line 146
def delete_if(&block)
  keys.each do |key|
    if yield key, self[key]
      delete(key)
    end
  end
  self
end
dup() click to toggle source
# File lib/bson/ordered_hash.rb, line 127
def dup
  result = OrderedHash.new
  @ordered_keys.each do |key|
    result[key] = self[key]
  end
  result
end
each() { |k, self| ... } click to toggle source
# File lib/bson/ordered_hash.rb, line 94
def each
  @ordered_keys.each { |k| yield k, self[k] }
  self
end
Also aliased as: each_pair
each_pair()
Alias for: each
eql?(o) click to toggle source
# File lib/bson/ordered_hash.rb, line 187
def eql?(o)
  if o.instance_of? BSON::OrderedHash
    self.hash == o.hash
  else
    false
  end
end
extractable_options?() click to toggle source

Allows activesupport Array#extract_options! to extract options when they are instance of BSON::OrderedHash

@return [true, false] true if options can be extracted

# File lib/bson/ordered_hash.rb, line 40
def extractable_options?
  instance_of?(BSON::OrderedHash)
end
hash() click to toggle source
# File lib/bson/ordered_hash.rb, line 178
def hash
  code = 17
  each_pair do |key, value|
    code = 37 * code + key.hash
    code = 37 * code + value.hash
  end
  code & 0x7fffffff
end
initialize_copy(original) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 172
def initialize_copy(original)
  super
  @ordered_keys = original.ordered_keys.dup
end
inspect() click to toggle source
# File lib/bson/ordered_hash.rb, line 135
def inspect
  str = "#<BSON::OrderedHash:0x#{self.object_id.to_s(16)} {"
  str << (@ordered_keys || []).collect { |k| "\"#{k}\"=>#{self.[](k).inspect}" }.join(", ")
  str << '}>'
end
keys() click to toggle source
# File lib/bson/ordered_hash.rb, line 83
def keys
  @ordered_keys.dup
end
merge(other) click to toggle source
# File lib/bson/ordered_hash.rb, line 113
def merge(other)
  oh = self.dup
  oh.merge!(other)
  oh
end
merge!(other) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 119
def merge!(other)
  @ordered_keys += other.keys # unordered if not an BSON::OrderedHash
  @ordered_keys.uniq!
  super(other)
end
Also aliased as: update
reject() { |k, v| ... } click to toggle source
# File lib/bson/ordered_hash.rb, line 44
def reject
  return to_enum(:reject) unless block_given?
  dup.tap {|hash| hash.reject!{|k, v| yield k, v}}
end
reject!() { |k, self| ... } click to toggle source
# File lib/bson/ordered_hash.rb, line 155
def reject!
  return to_enum(:reject!) unless block_given?
  raise "can't modify frozen BSON::OrderedHash" if frozen?
  keys = @ordered_keys.dup
  @ordered_keys.each do |k|
    if yield k, self[k]
      keys.delete(k)
    end
  end
  keys == @ordered_keys ? nil : @ordered_keys = keys
end
replace(other) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 108
def replace(other)
  @ordered_keys.replace(other.keys)
  super
end
select() { |k, v| ... } click to toggle source
# File lib/bson/ordered_hash.rb, line 49
def select
  return to_enum(:select) unless block_given?
  dup.tap {|hash| hash.reject!{|k, v| ! yield k, v}}
end
to_a() click to toggle source
# File lib/bson/ordered_hash.rb, line 100
def to_a
  @ordered_keys.map { |k| [k, self[k]] }
end
update(other)
Alias for: merge!
values() click to toggle source
# File lib/bson/ordered_hash.rb, line 104
def values
  collect { |k, v| v }
end
yaml_initialize(tag, val) click to toggle source
Calls superclass method
# File lib/bson/ordered_hash.rb, line 78
def yaml_initialize(tag, val)
  @ordered_keys = []
  super
end