namespaced the OrderedHash class
This commit is contained in:
parent
7b89523315
commit
ed76126a12
|
@ -532,7 +532,7 @@ static void write_doc(buffer_t buffer, VALUE hash, VALUE check_keys, VALUE move_
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have to check for an OrderedHash and handle that specially
|
// we have to check for an OrderedHash and handle that specially
|
||||||
if (strcmp(rb_obj_classname(hash), "OrderedHash") == 0) {
|
if (strcmp(rb_obj_classname(hash), "BSON::OrderedHash") == 0) {
|
||||||
VALUE keys = rb_funcall(hash, rb_intern("keys"), 0);
|
VALUE keys = rb_funcall(hash, rb_intern("keys"), 0);
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < RARRAY_LEN(keys); i++) {
|
for(i = 0; i < RARRAY_LEN(keys); i++) {
|
||||||
|
@ -909,7 +909,7 @@ void Init_cbson() {
|
||||||
InvalidStringEncoding = rb_const_get(bson, rb_intern("InvalidStringEncoding"));
|
InvalidStringEncoding = rb_const_get(bson, rb_intern("InvalidStringEncoding"));
|
||||||
InvalidDocument = rb_const_get(bson, rb_intern("InvalidDocument"));
|
InvalidDocument = rb_const_get(bson, rb_intern("InvalidDocument"));
|
||||||
rb_require("bson/ordered_hash");
|
rb_require("bson/ordered_hash");
|
||||||
OrderedHash = rb_const_get(rb_cObject, rb_intern("OrderedHash"));
|
OrderedHash = rb_const_get(bson, rb_intern("OrderedHash"));
|
||||||
|
|
||||||
CBson = rb_define_module("CBson");
|
CBson = rb_define_module("CBson");
|
||||||
ext_version = rb_str_new2(VERSION);
|
ext_version = rb_str_new2(VERSION);
|
||||||
|
|
|
@ -182,7 +182,7 @@ module BSON
|
||||||
end
|
end
|
||||||
@buf.rewind
|
@buf.rewind
|
||||||
@buf.get_int # eat message size
|
@buf.get_int # eat message size
|
||||||
doc = OrderedHash.new
|
doc = BSON::OrderedHash.new
|
||||||
while @buf.more?
|
while @buf.more?
|
||||||
type = @buf.get
|
type = @buf.get
|
||||||
case type
|
case type
|
||||||
|
@ -383,7 +383,7 @@ module BSON
|
||||||
end
|
end
|
||||||
|
|
||||||
def serialize_dbref_element(buf, key, val)
|
def serialize_dbref_element(buf, key, val)
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh['$ref'] = val.namespace
|
oh['$ref'] = val.namespace
|
||||||
oh['$id'] = val.object_id
|
oh['$id'] = val.object_id
|
||||||
serialize_object_element(buf, key, oh, false)
|
serialize_object_element(buf, key, oh, false)
|
||||||
|
@ -450,7 +450,7 @@ module BSON
|
||||||
|
|
||||||
def serialize_array_element(buf, key, val, check_keys)
|
def serialize_array_element(buf, key, val, check_keys)
|
||||||
# Turn array into hash with integer indices as keys
|
# Turn array into hash with integer indices as keys
|
||||||
h = OrderedHash.new
|
h = BSON::OrderedHash.new
|
||||||
i = 0
|
i = 0
|
||||||
val.each { |v| h[i] = v; i += 1 }
|
val.each { |v| h[i] = v; i += 1 }
|
||||||
serialize_object_element(buf, key, h, check_keys, ARRAY)
|
serialize_object_element(buf, key, h, check_keys, ARRAY)
|
||||||
|
|
|
@ -18,123 +18,125 @@
|
||||||
#
|
#
|
||||||
# Under Ruby 1.9 and greater, this class has no added methods because Ruby's
|
# 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.
|
# Hash already keeps its keys ordered by order of insertion.
|
||||||
class OrderedHash < Hash
|
module BSON
|
||||||
|
class OrderedHash < Hash
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
begin
|
begin
|
||||||
!other.nil? &&
|
!other.nil? &&
|
||||||
keys == other.keys &&
|
keys == other.keys &&
|
||||||
values == other.values
|
values == other.values
|
||||||
rescue
|
rescue
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# We only need the body of this class if the RUBY_VERSION is before 1.9
|
|
||||||
if RUBY_VERSION < '1.9'
|
|
||||||
attr_accessor :ordered_keys
|
|
||||||
|
|
||||||
def self.[] *args
|
|
||||||
oh = 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
|
|
||||||
|
|
||||||
def initialize(*a, &b)
|
|
||||||
super
|
|
||||||
@ordered_keys = []
|
|
||||||
end
|
|
||||||
|
|
||||||
def keys
|
|
||||||
@ordered_keys || []
|
|
||||||
end
|
|
||||||
|
|
||||||
def []=(key, value)
|
|
||||||
@ordered_keys ||= []
|
|
||||||
@ordered_keys << key unless @ordered_keys.include?(key)
|
|
||||||
super(key, value)
|
|
||||||
end
|
|
||||||
|
|
||||||
def each
|
|
||||||
@ordered_keys ||= []
|
|
||||||
@ordered_keys.each { |k| yield k, self[k] }
|
|
||||||
self
|
|
||||||
end
|
|
||||||
alias :each_pair :each
|
|
||||||
|
|
||||||
def to_a
|
|
||||||
@ordered_keys ||= []
|
|
||||||
@ordered_keys.map { |k| [k, self[k]] }
|
|
||||||
end
|
|
||||||
|
|
||||||
def values
|
|
||||||
collect { |k, v| v }
|
|
||||||
end
|
|
||||||
|
|
||||||
def merge(other)
|
|
||||||
oh = self.dup
|
|
||||||
oh.merge!(other)
|
|
||||||
oh
|
|
||||||
end
|
|
||||||
|
|
||||||
def merge!(other)
|
|
||||||
@ordered_keys ||= []
|
|
||||||
@ordered_keys += other.keys # unordered if not an OrderedHash
|
|
||||||
@ordered_keys.uniq!
|
|
||||||
super(other)
|
|
||||||
end
|
|
||||||
|
|
||||||
alias :update :merge!
|
|
||||||
|
|
||||||
def inspect
|
|
||||||
str = '{'
|
|
||||||
str << (@ordered_keys || []).collect { |k| "\"#{k}\"=>#{self.[](k).inspect}" }.join(", ")
|
|
||||||
str << '}'
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete(key, &block)
|
|
||||||
@ordered_keys.delete(key) if @ordered_keys
|
|
||||||
super
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_if(&block)
|
|
||||||
self.each { |k,v|
|
|
||||||
if yield k, v
|
|
||||||
delete(k)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def clear
|
|
||||||
super
|
|
||||||
@ordered_keys = []
|
|
||||||
end
|
|
||||||
|
|
||||||
def hash
|
|
||||||
code = 17
|
|
||||||
each_pair do |key, value|
|
|
||||||
code = 37 * code + key.hash
|
|
||||||
code = 37 * code + value.hash
|
|
||||||
end
|
|
||||||
code & 0x7fffffff
|
|
||||||
end
|
|
||||||
|
|
||||||
def eql?(o)
|
|
||||||
if o.instance_of? OrderedHash
|
|
||||||
self.hash == o.hash
|
|
||||||
else
|
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# We only need the body of this class if the RUBY_VERSION is before 1.9
|
||||||
|
if RUBY_VERSION < '1.9'
|
||||||
|
attr_accessor :ordered_keys
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
def initialize(*a, &b)
|
||||||
|
super
|
||||||
|
@ordered_keys = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def keys
|
||||||
|
@ordered_keys || []
|
||||||
|
end
|
||||||
|
|
||||||
|
def []=(key, value)
|
||||||
|
@ordered_keys ||= []
|
||||||
|
@ordered_keys << key unless @ordered_keys.include?(key)
|
||||||
|
super(key, value)
|
||||||
|
end
|
||||||
|
|
||||||
|
def each
|
||||||
|
@ordered_keys ||= []
|
||||||
|
@ordered_keys.each { |k| yield k, self[k] }
|
||||||
|
self
|
||||||
|
end
|
||||||
|
alias :each_pair :each
|
||||||
|
|
||||||
|
def to_a
|
||||||
|
@ordered_keys ||= []
|
||||||
|
@ordered_keys.map { |k| [k, self[k]] }
|
||||||
|
end
|
||||||
|
|
||||||
|
def values
|
||||||
|
collect { |k, v| v }
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge(other)
|
||||||
|
oh = self.dup
|
||||||
|
oh.merge!(other)
|
||||||
|
oh
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge!(other)
|
||||||
|
@ordered_keys ||= []
|
||||||
|
@ordered_keys += other.keys # unordered if not an BSON::OrderedHash
|
||||||
|
@ordered_keys.uniq!
|
||||||
|
super(other)
|
||||||
|
end
|
||||||
|
|
||||||
|
alias :update :merge!
|
||||||
|
|
||||||
|
def inspect
|
||||||
|
str = '{'
|
||||||
|
str << (@ordered_keys || []).collect { |k| "\"#{k}\"=>#{self.[](k).inspect}" }.join(", ")
|
||||||
|
str << '}'
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete(key, &block)
|
||||||
|
@ordered_keys.delete(key) if @ordered_keys
|
||||||
|
super
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_if(&block)
|
||||||
|
self.each { |k,v|
|
||||||
|
if yield k, v
|
||||||
|
delete(k)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def clear
|
||||||
|
super
|
||||||
|
@ordered_keys = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def hash
|
||||||
|
code = 17
|
||||||
|
each_pair do |key, value|
|
||||||
|
code = 37 * code + key.hash
|
||||||
|
code = 37 * code + value.hash
|
||||||
|
end
|
||||||
|
code & 0x7fffffff
|
||||||
|
end
|
||||||
|
|
||||||
|
def eql?(o)
|
||||||
|
if o.instance_of? BSON::OrderedHash
|
||||||
|
self.hash == o.hash
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -373,7 +373,7 @@ module Mongo
|
||||||
# @core indexes create_index-instance_method
|
# @core indexes create_index-instance_method
|
||||||
def create_index(spec, opts={})
|
def create_index(spec, opts={})
|
||||||
opts.assert_valid_keys(:min, :max, :background, :unique, :dropDups)
|
opts.assert_valid_keys(:min, :max, :background, :unique, :dropDups)
|
||||||
field_spec = OrderedHash.new
|
field_spec = BSON::OrderedHash.new
|
||||||
if spec.is_a?(String) || spec.is_a?(Symbol)
|
if spec.is_a?(String) || spec.is_a?(Symbol)
|
||||||
field_spec[spec.to_s] = 1
|
field_spec[spec.to_s] = 1
|
||||||
elsif spec.is_a?(Array) && spec.all? {|field| field.is_a?(Array) }
|
elsif spec.is_a?(Array) && spec.all? {|field| field.is_a?(Array) }
|
||||||
|
@ -445,7 +445,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @core findandmodify find_and_modify-instance_method
|
# @core findandmodify find_and_modify-instance_method
|
||||||
def find_and_modify(opts={})
|
def find_and_modify(opts={})
|
||||||
cmd = OrderedHash.new
|
cmd = BSON::OrderedHash.new
|
||||||
cmd[:findandmodify] = @name
|
cmd[:findandmodify] = @name
|
||||||
cmd.merge!(opts)
|
cmd.merge!(opts)
|
||||||
cmd[:sort] = Mongo::Support.format_order_clause(opts[:sort]) if opts[:sort]
|
cmd[:sort] = Mongo::Support.format_order_clause(opts[:sort]) if opts[:sort]
|
||||||
|
@ -478,7 +478,7 @@ module Mongo
|
||||||
map = BSON::Code.new(map) unless map.is_a?(BSON::Code)
|
map = BSON::Code.new(map) unless map.is_a?(BSON::Code)
|
||||||
reduce = BSON::Code.new(reduce) unless reduce.is_a?(BSON::Code)
|
reduce = BSON::Code.new(reduce) unless reduce.is_a?(BSON::Code)
|
||||||
|
|
||||||
hash = OrderedHash.new
|
hash = BSON::OrderedHash.new
|
||||||
hash['mapreduce'] = self.name
|
hash['mapreduce'] = self.name
|
||||||
hash['map'] = map
|
hash['map'] = map
|
||||||
hash['reduce'] = reduce
|
hash['reduce'] = reduce
|
||||||
|
@ -570,7 +570,7 @@ module Mongo
|
||||||
# @return [Array] an array of distinct values.
|
# @return [Array] an array of distinct values.
|
||||||
def distinct(key, query=nil)
|
def distinct(key, query=nil)
|
||||||
raise MongoArgumentError unless [String, Symbol].include?(key.class)
|
raise MongoArgumentError unless [String, Symbol].include?(key.class)
|
||||||
command = OrderedHash.new
|
command = BSON::OrderedHash.new
|
||||||
command[:distinct] = @name
|
command[:distinct] = @name
|
||||||
command[:key] = key.to_s
|
command[:key] = key.to_s
|
||||||
command[:query] = query
|
command[:query] = query
|
||||||
|
@ -652,7 +652,7 @@ module Mongo
|
||||||
when nil
|
when nil
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
h = OrderedHash.new
|
h = BSON::OrderedHash.new
|
||||||
hint.to_a.each { |k| h[k] = 1 }
|
hint.to_a.each { |k| h[k] = 1 }
|
||||||
h
|
h
|
||||||
end
|
end
|
||||||
|
|
|
@ -269,7 +269,7 @@ module Mongo
|
||||||
# @param [String] username username for authentication against from_db (>=1.3.x).
|
# @param [String] username username for authentication against from_db (>=1.3.x).
|
||||||
# @param [String] password password for authentication against from_db (>=1.3.x).
|
# @param [String] password password for authentication against from_db (>=1.3.x).
|
||||||
def copy_database(from, to, from_host="localhost", username=nil, password=nil)
|
def copy_database(from, to, from_host="localhost", username=nil, password=nil)
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:copydb] = 1
|
oh[:copydb] = 1
|
||||||
oh[:fromhost] = from_host
|
oh[:fromhost] = from_host
|
||||||
oh[:fromdb] = from
|
oh[:fromdb] = from
|
||||||
|
@ -278,7 +278,7 @@ module Mongo
|
||||||
unless username && password
|
unless username && password
|
||||||
raise MongoArgumentError, "Both username and password must be supplied for authentication."
|
raise MongoArgumentError, "Both username and password must be supplied for authentication."
|
||||||
end
|
end
|
||||||
nonce_cmd = OrderedHash.new
|
nonce_cmd = BSON::OrderedHash.new
|
||||||
nonce_cmd[:copydbgetnonce] = 1
|
nonce_cmd[:copydbgetnonce] = 1
|
||||||
nonce_cmd[:fromhost] = from_host
|
nonce_cmd[:fromhost] = from_host
|
||||||
result = self["admin"].command(nonce_cmd, true, true)
|
result = self["admin"].command(nonce_cmd, true, true)
|
||||||
|
@ -659,7 +659,7 @@ module Mongo
|
||||||
BSON::BSON_RUBY.serialize_cstr(message, "#{db_name}.$cmd")
|
BSON::BSON_RUBY.serialize_cstr(message, "#{db_name}.$cmd")
|
||||||
message.put_int(0)
|
message.put_int(0)
|
||||||
message.put_int(-1)
|
message.put_int(-1)
|
||||||
cmd = OrderedHash.new
|
cmd = BSON::OrderedHash.new
|
||||||
cmd[:getlasterror] = 1
|
cmd[:getlasterror] = 1
|
||||||
if opts.is_a?(Hash)
|
if opts.is_a?(Hash)
|
||||||
opts.assert_valid_keys(:w, :wtimeout, :fsync)
|
opts.assert_valid_keys(:w, :wtimeout, :fsync)
|
||||||
|
|
|
@ -94,7 +94,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @raise [OperationFailure] on a database error.
|
# @raise [OperationFailure] on a database error.
|
||||||
def count
|
def count
|
||||||
command = OrderedHash["count", @collection.name,
|
command = BSON::OrderedHash["count", @collection.name,
|
||||||
"query", @selector,
|
"query", @selector,
|
||||||
"fields", @fields]
|
"fields", @fields]
|
||||||
response = @db.command(command)
|
response = @db.command(command)
|
||||||
|
@ -366,7 +366,7 @@ module Mongo
|
||||||
|
|
||||||
def construct_query_spec
|
def construct_query_spec
|
||||||
return @selector if @selector.has_key?('$query')
|
return @selector if @selector.has_key?('$query')
|
||||||
spec = OrderedHash.new
|
spec = BSON::OrderedHash.new
|
||||||
spec['$query'] = @selector
|
spec['$query'] = @selector
|
||||||
spec['$orderby'] = Mongo::Support.format_order_clause(@order) if @order
|
spec['$orderby'] = Mongo::Support.format_order_clause(@order) if @order
|
||||||
spec['$hint'] = @hint if @hint && @hint.length > 0
|
spec['$hint'] = @hint if @hint && @hint.length > 0
|
||||||
|
|
|
@ -89,7 +89,7 @@ module Mongo
|
||||||
raise "error retrieving nonce: #{doc}" unless ok?(doc)
|
raise "error retrieving nonce: #{doc}" unless ok?(doc)
|
||||||
nonce = doc['nonce']
|
nonce = doc['nonce']
|
||||||
|
|
||||||
auth = OrderedHash.new
|
auth = BSON::OrderedHash.new
|
||||||
auth['authenticate'] = 1
|
auth['authenticate'] = 1
|
||||||
auth['user'] = username
|
auth['user'] = username
|
||||||
auth['nonce'] = nonce
|
auth['nonce'] = nonce
|
||||||
|
@ -212,7 +212,7 @@ module Mongo
|
||||||
end
|
end
|
||||||
|
|
||||||
# Create a new collection.
|
# Create a new collection.
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:create] = name
|
oh[:create] = name
|
||||||
doc = command(oh.merge(options || {}))
|
doc = command(oh.merge(options || {}))
|
||||||
ok = doc['ok']
|
ok = doc['ok']
|
||||||
|
@ -255,7 +255,7 @@ module Mongo
|
||||||
# error has occurred.
|
# error has occurred.
|
||||||
def error(opts={})
|
def error(opts={})
|
||||||
opts.assert_valid_keys(:w, :wtimeout, :fsync)
|
opts.assert_valid_keys(:w, :wtimeout, :fsync)
|
||||||
cmd = OrderedHash.new
|
cmd = BSON::OrderedHash.new
|
||||||
cmd[:getlasterror] = 1
|
cmd[:getlasterror] = 1
|
||||||
cmd.merge!(opts) unless opts.empty?
|
cmd.merge!(opts) unless opts.empty?
|
||||||
doc = command(cmd)
|
doc = command(cmd)
|
||||||
|
@ -337,7 +337,7 @@ module Mongo
|
||||||
code = BSON::Code.new(code)
|
code = BSON::Code.new(code)
|
||||||
end
|
end
|
||||||
|
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:$eval] = code
|
oh[:$eval] = code
|
||||||
oh[:args] = args
|
oh[:args] = args
|
||||||
doc = command(oh)
|
doc = command(oh)
|
||||||
|
@ -354,7 +354,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @raise MongoDBError if there's an error renaming the collection.
|
# @raise MongoDBError if there's an error renaming the collection.
|
||||||
def rename_collection(from, to)
|
def rename_collection(from, to)
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:renameCollection] = "#{@name}.#{from}"
|
oh[:renameCollection] = "#{@name}.#{from}"
|
||||||
oh[:to] = "#{@name}.#{to}"
|
oh[:to] = "#{@name}.#{to}"
|
||||||
doc = command(oh, true)
|
doc = command(oh, true)
|
||||||
|
@ -371,7 +371,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @raise MongoDBError if there's an error renaming the collection.
|
# @raise MongoDBError if there's an error renaming the collection.
|
||||||
def drop_index(collection_name, index_name)
|
def drop_index(collection_name, index_name)
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:deleteIndexes] = collection_name
|
oh[:deleteIndexes] = collection_name
|
||||||
oh[:index] = index_name
|
oh[:index] = index_name
|
||||||
doc = command(oh)
|
doc = command(oh)
|
||||||
|
@ -502,7 +502,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @core profiling profiling_level-instance_method
|
# @core profiling profiling_level-instance_method
|
||||||
def profiling_level
|
def profiling_level
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:profile] = -1
|
oh[:profile] = -1
|
||||||
doc = command(oh)
|
doc = command(oh)
|
||||||
raise "Error with profile command: #{doc.inspect}" unless ok?(doc) && doc['was'].kind_of?(Numeric)
|
raise "Error with profile command: #{doc.inspect}" unless ok?(doc) && doc['was'].kind_of?(Numeric)
|
||||||
|
@ -523,7 +523,7 @@ module Mongo
|
||||||
#
|
#
|
||||||
# @param [Symbol] level acceptable options are +:off+, +:slow_only+, or +:all+.
|
# @param [Symbol] level acceptable options are +:off+, +:slow_only+, or +:all+.
|
||||||
def profiling_level=(level)
|
def profiling_level=(level)
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh[:profile] = case level
|
oh[:profile] = case level
|
||||||
when :off
|
when :off
|
||||||
0
|
0
|
||||||
|
|
|
@ -197,7 +197,7 @@ module Mongo
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_chunk(n)
|
def create_chunk(n)
|
||||||
chunk = OrderedHash.new
|
chunk = BSON::OrderedHash.new
|
||||||
chunk['_id'] = BSON::ObjectID.new
|
chunk['_id'] = BSON::ObjectID.new
|
||||||
chunk['n'] = n
|
chunk['n'] = n
|
||||||
chunk['files_id'] = @files_id
|
chunk['files_id'] = @files_id
|
||||||
|
@ -319,7 +319,7 @@ module Mongo
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_mongo_object
|
def to_mongo_object
|
||||||
h = OrderedHash.new
|
h = BSON::OrderedHash.new
|
||||||
h['_id'] = @files_id
|
h['_id'] = @files_id
|
||||||
h['filename'] = @filename if @filename
|
h['filename'] = @filename if @filename
|
||||||
h['contentType'] = @content_type
|
h['contentType'] = @content_type
|
||||||
|
@ -335,7 +335,7 @@ module Mongo
|
||||||
|
|
||||||
# Get a server-side md5 and validate against the client if running in safe mode.
|
# Get a server-side md5 and validate against the client if running in safe mode.
|
||||||
def get_md5
|
def get_md5
|
||||||
md5_command = OrderedHash.new
|
md5_command = BSON::OrderedHash.new
|
||||||
md5_command['filemd5'] = @files_id
|
md5_command['filemd5'] = @files_id
|
||||||
md5_command['root'] = @fs_name
|
md5_command['root'] = @fs_name
|
||||||
@server_md5 = @files.db.command(md5_command)['md5']
|
@server_md5 = @files.db.command(md5_command)['md5']
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Mongo #:nodoc:
|
||||||
# <tt>array_as_sort_parameters([["field1", :asc], ["field2", :desc]])</tt> =>
|
# <tt>array_as_sort_parameters([["field1", :asc], ["field2", :desc]])</tt> =>
|
||||||
# <tt>{ "field1" => 1, "field2" => -1}</tt>
|
# <tt>{ "field1" => 1, "field2" => -1}</tt>
|
||||||
def array_as_sort_parameters(value)
|
def array_as_sort_parameters(value)
|
||||||
order_by = OrderedHash.new
|
order_by = BSON::OrderedHash.new
|
||||||
if value.first.is_a? Array
|
if value.first.is_a? Array
|
||||||
value.each do |param|
|
value.each do |param|
|
||||||
if (param.class.name == "String")
|
if (param.class.name == "String")
|
||||||
|
|
|
@ -150,7 +150,7 @@ class Features14Test < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "use geoNear command to return distances from a point" do
|
should "use geoNear command to return distances from a point" do
|
||||||
cmd = OrderedHash.new
|
cmd = BSON::OrderedHash.new
|
||||||
cmd['geoNear'] = 'places'
|
cmd['geoNear'] = 'places'
|
||||||
cmd['near'] = @empire_state
|
cmd['near'] = @empire_state
|
||||||
cmd['num'] = 6
|
cmd['num'] = 6
|
||||||
|
|
|
@ -323,14 +323,14 @@ class TestCollection < Test::Unit::TestCase
|
||||||
assert_equal @@test.find_one(nil), @@test.find_one()
|
assert_equal @@test.find_one(nil), @@test.find_one()
|
||||||
assert_equal @@test.find_one({}), @@test.find_one()
|
assert_equal @@test.find_one({}), @@test.find_one()
|
||||||
assert_equal @@test.find_one("hello" => "world"), @@test.find_one()
|
assert_equal @@test.find_one("hello" => "world"), @@test.find_one()
|
||||||
assert_equal @@test.find_one(OrderedHash["hello", "world"]), @@test.find_one()
|
assert_equal @@test.find_one(BSON::OrderedHash["hello", "world"]), @@test.find_one()
|
||||||
|
|
||||||
assert @@test.find_one(nil, :fields => ["hello"]).include?("hello")
|
assert @@test.find_one(nil, :fields => ["hello"]).include?("hello")
|
||||||
assert !@@test.find_one(nil, :fields => ["foo"]).include?("hello")
|
assert !@@test.find_one(nil, :fields => ["foo"]).include?("hello")
|
||||||
assert_equal ["_id"], @@test.find_one(nil, :fields => []).keys()
|
assert_equal ["_id"], @@test.find_one(nil, :fields => []).keys()
|
||||||
|
|
||||||
assert_equal nil, @@test.find_one("hello" => "foo")
|
assert_equal nil, @@test.find_one("hello" => "foo")
|
||||||
assert_equal nil, @@test.find_one(OrderedHash["hello", "foo"])
|
assert_equal nil, @@test.find_one(BSON::OrderedHash["hello", "foo"])
|
||||||
assert_equal nil, @@test.find_one(ObjectID.new)
|
assert_equal nil, @@test.find_one(ObjectID.new)
|
||||||
|
|
||||||
assert_raise TypeError do
|
assert_raise TypeError do
|
||||||
|
|
|
@ -46,14 +46,14 @@ class DBAPITest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_save_ordered_hash
|
def test_save_ordered_hash
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh['a'] = -1
|
oh['a'] = -1
|
||||||
oh['b'] = 'foo'
|
oh['b'] = 'foo'
|
||||||
|
|
||||||
oid = @@coll.save(oh)
|
oid = @@coll.save(oh)
|
||||||
assert_equal 'foo', @@coll.find_one(oid)['b']
|
assert_equal 'foo', @@coll.find_one(oid)['b']
|
||||||
|
|
||||||
oh = OrderedHash['a' => 1, 'b' => 'foo']
|
oh = BSON::OrderedHash['a' => 1, 'b' => 'foo']
|
||||||
oid = @@coll.save(oh)
|
oid = @@coll.save(oh)
|
||||||
assert_equal 'foo', @@coll.find_one(oid)['b']
|
assert_equal 'foo', @@coll.find_one(oid)['b']
|
||||||
end
|
end
|
||||||
|
@ -187,7 +187,7 @@ class DBAPITest < Test::Unit::TestCase
|
||||||
|
|
||||||
# Sorting using ordered hash. You can use an unordered one, but then the
|
# Sorting using ordered hash. You can use an unordered one, but then the
|
||||||
# order of the keys won't be guaranteed thus your sort won't make sense.
|
# order of the keys won't be guaranteed thus your sort won't make sense.
|
||||||
oh = OrderedHash.new
|
oh = BSON::OrderedHash.new
|
||||||
oh['a'] = -1
|
oh['a'] = -1
|
||||||
assert_raise InvalidSortValueError do
|
assert_raise InvalidSortValueError do
|
||||||
docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
|
docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
|
||||||
|
|
|
@ -123,7 +123,7 @@ class BSONTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_ordered_hash
|
def test_ordered_hash
|
||||||
doc = OrderedHash.new
|
doc = BSON::OrderedHash.new
|
||||||
doc["b"] = 1
|
doc["b"] = 1
|
||||||
doc["a"] = 2
|
doc["a"] = 2
|
||||||
doc["c"] = 3
|
doc["c"] = 3
|
||||||
|
@ -284,16 +284,16 @@ class BSONTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_put_id_first
|
def test_put_id_first
|
||||||
val = OrderedHash.new
|
val = BSON::OrderedHash.new
|
||||||
val['not_id'] = 1
|
val['not_id'] = 1
|
||||||
val['_id'] = 2
|
val['_id'] = 2
|
||||||
roundtrip = BSON::BSON_CODER.deserialize(BSON::BSON_CODER.serialize(val, false, true).to_a)
|
roundtrip = BSON::BSON_CODER.deserialize(BSON::BSON_CODER.serialize(val, false, true).to_a)
|
||||||
assert_kind_of OrderedHash, roundtrip
|
assert_kind_of BSON::OrderedHash, roundtrip
|
||||||
assert_equal '_id', roundtrip.keys.first
|
assert_equal '_id', roundtrip.keys.first
|
||||||
|
|
||||||
val = {'a' => 'foo', 'b' => 'bar', :_id => 42, 'z' => 'hello'}
|
val = {'a' => 'foo', 'b' => 'bar', :_id => 42, 'z' => 'hello'}
|
||||||
roundtrip = BSON::BSON_CODER.deserialize(BSON::BSON_CODER.serialize(val, false, true).to_a)
|
roundtrip = BSON::BSON_CODER.deserialize(BSON::BSON_CODER.serialize(val, false, true).to_a)
|
||||||
assert_kind_of OrderedHash, roundtrip
|
assert_kind_of BSON::OrderedHash, roundtrip
|
||||||
assert_equal '_id', roundtrip.keys.first
|
assert_equal '_id', roundtrip.keys.first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -354,7 +354,7 @@ class BSONTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_do_not_change_original_object
|
def test_do_not_change_original_object
|
||||||
val = OrderedHash.new
|
val = BSON::OrderedHash.new
|
||||||
val['not_id'] = 1
|
val['not_id'] = 1
|
||||||
val['_id'] = 2
|
val['_id'] = 2
|
||||||
assert val.keys.include?('_id')
|
assert val.keys.include?('_id')
|
||||||
|
@ -426,7 +426,7 @@ class BSONTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_id
|
def test_move_id
|
||||||
a = OrderedHash.new
|
a = BSON::OrderedHash.new
|
||||||
a['text'] = 'abc'
|
a['text'] = 'abc'
|
||||||
a['key'] = 'abc'
|
a['key'] = 'abc'
|
||||||
a['_id'] = 1
|
a['_id'] = 1
|
||||||
|
@ -441,10 +441,10 @@ class BSONTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_id_with_nested_doc
|
def test_move_id_with_nested_doc
|
||||||
b = OrderedHash.new
|
b = BSON::OrderedHash.new
|
||||||
b['text'] = 'abc'
|
b['text'] = 'abc'
|
||||||
b['_id'] = 2
|
b['_id'] = 2
|
||||||
c = OrderedHash.new
|
c = BSON::OrderedHash.new
|
||||||
c['text'] = 'abc'
|
c['text'] = 'abc'
|
||||||
c['hash'] = b
|
c['hash'] = b
|
||||||
c['_id'] = 3
|
c['_id'] = 3
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'test/test_helper'
|
||||||
class OrderedHashTest < Test::Unit::TestCase
|
class OrderedHashTest < Test::Unit::TestCase
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@oh = OrderedHash.new
|
@oh = BSON::OrderedHash.new
|
||||||
@oh['c'] = 1
|
@oh['c'] = 1
|
||||||
@oh['a'] = 2
|
@oh['a'] = 2
|
||||||
@oh['z'] = 3
|
@oh['z'] = 3
|
||||||
|
@ -11,31 +11,31 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_initialize
|
def test_initialize
|
||||||
a = OrderedHash.new
|
a = BSON::OrderedHash.new
|
||||||
a['x'] = 1
|
a['x'] = 1
|
||||||
a['y'] = 2
|
a['y'] = 2
|
||||||
|
|
||||||
b = OrderedHash['x' => 1, 'y' => 2]
|
b = BSON::OrderedHash['x' => 1, 'y' => 2]
|
||||||
assert_equal a, b
|
assert_equal a, b
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_hash_code
|
def test_hash_code
|
||||||
o = OrderedHash.new
|
o = BSON::OrderedHash.new
|
||||||
o['number'] = 50
|
o['number'] = 50
|
||||||
assert o.hash
|
assert o.hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_empty
|
def test_empty
|
||||||
assert_equal [], OrderedHash.new.keys
|
assert_equal [], BSON::OrderedHash.new.keys
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_uniq
|
def test_uniq
|
||||||
list = []
|
list = []
|
||||||
doc = OrderedHash.new
|
doc = BSON::OrderedHash.new
|
||||||
doc['_id'] = 'ab12'
|
doc['_id'] = 'ab12'
|
||||||
doc['name'] = 'test'
|
doc['name'] = 'test'
|
||||||
|
|
||||||
same_doc = OrderedHash.new
|
same_doc = BSON::OrderedHash.new
|
||||||
same_doc['_id'] = 'ab12'
|
same_doc['_id'] = 'ab12'
|
||||||
same_doc['name'] = 'test'
|
same_doc['name'] = 'test'
|
||||||
list << doc
|
list << doc
|
||||||
|
@ -46,23 +46,23 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_equality
|
def test_equality
|
||||||
a = OrderedHash.new
|
a = BSON::OrderedHash.new
|
||||||
a['x'] = 1
|
a['x'] = 1
|
||||||
a['y'] = 2
|
a['y'] = 2
|
||||||
|
|
||||||
b = OrderedHash.new
|
b = BSON::OrderedHash.new
|
||||||
b['y'] = 2
|
b['y'] = 2
|
||||||
b['x'] = 1
|
b['x'] = 1
|
||||||
|
|
||||||
c = OrderedHash.new
|
c = BSON::OrderedHash.new
|
||||||
c['x'] = 1
|
c['x'] = 1
|
||||||
c['y'] = 2
|
c['y'] = 2
|
||||||
|
|
||||||
d = OrderedHash.new
|
d = BSON::OrderedHash.new
|
||||||
d['x'] = 2
|
d['x'] = 2
|
||||||
d['y'] = 3
|
d['y'] = 3
|
||||||
|
|
||||||
e = OrderedHash.new
|
e = BSON::OrderedHash.new
|
||||||
e['z'] = 1
|
e['z'] = 1
|
||||||
e['y'] = 2
|
e['y'] = 2
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_merge
|
def test_merge
|
||||||
other = OrderedHash.new
|
other = BSON::OrderedHash.new
|
||||||
other['f'] = 'foo'
|
other['f'] = 'foo'
|
||||||
noob = @oh.merge(other)
|
noob = @oh.merge(other)
|
||||||
assert_equal @ordered_keys + ['f'], noob.keys
|
assert_equal @ordered_keys + ['f'], noob.keys
|
||||||
|
@ -113,7 +113,7 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_merge_bang
|
def test_merge_bang
|
||||||
other = OrderedHash.new
|
other = BSON::OrderedHash.new
|
||||||
other['f'] = 'foo'
|
other['f'] = 'foo'
|
||||||
@oh.merge!(other)
|
@oh.merge!(other)
|
||||||
assert_equal @ordered_keys + ['f'], @oh.keys
|
assert_equal @ordered_keys + ['f'], @oh.keys
|
||||||
|
@ -121,7 +121,7 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_merge_bang_with_overlap
|
def test_merge_bang_with_overlap
|
||||||
other = OrderedHash.new
|
other = BSON::OrderedHash.new
|
||||||
other['a'] = 'apple'
|
other['a'] = 'apple'
|
||||||
other['c'] = 'crab'
|
other['c'] = 'crab'
|
||||||
other['f'] = 'foo'
|
other['f'] = 'foo'
|
||||||
|
@ -141,7 +141,7 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_update
|
def test_update
|
||||||
other = OrderedHash.new
|
other = BSON::OrderedHash.new
|
||||||
other['f'] = 'foo'
|
other['f'] = 'foo'
|
||||||
noob = @oh.update(other)
|
noob = @oh.update(other)
|
||||||
assert_equal @ordered_keys + ['f'], noob.keys
|
assert_equal @ordered_keys + ['f'], noob.keys
|
||||||
|
|
Loading…
Reference in New Issue