minor: made some db connection method private.
This commit is contained in:
parent
867783c665
commit
48b5e069e0
112
lib/mongo/db.rb
112
lib/mongo/db.rb
@ -465,7 +465,7 @@ module Mongo
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Send a message to the database and wait for the response.
|
# Send a message to the database and waits for the response.
|
||||||
def receive_message_with_operation(operation, message, log_message=nil)
|
def receive_message_with_operation(operation, message, log_message=nil)
|
||||||
message_with_headers = add_message_headers(operation, message).to_s
|
message_with_headers = add_message_headers(operation, message).to_s
|
||||||
@logger.debug(" MONGODB #{log_message || message}") if @logger
|
@logger.debug(" MONGODB #{log_message || message}") if @logger
|
||||||
@ -475,6 +475,61 @@ module Mongo
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Return +true+ if +doc+ contains an 'ok' field with the value 1.
|
||||||
|
def ok?(doc)
|
||||||
|
ok = doc['ok']
|
||||||
|
ok.kind_of?(Numeric) && ok.to_i == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# DB commands need to be ordered, so selector must be an OrderedHash
|
||||||
|
# (or a Hash with only one element). What DB commands really need is
|
||||||
|
# that the "command" key be first.
|
||||||
|
def db_command(selector, use_admin_db=false)
|
||||||
|
if !selector.kind_of?(OrderedHash)
|
||||||
|
if !selector.kind_of?(Hash) || selector.keys.length > 1
|
||||||
|
raise "db_command must be given an OrderedHash when there is more than one key"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cursor = Cursor.new(Collection.new(self, SYSTEM_COMMAND_COLLECTION), :admin => use_admin_db, :limit => -1, :selector => selector)
|
||||||
|
cursor.next_object
|
||||||
|
end
|
||||||
|
|
||||||
|
# Sends a command to the database.
|
||||||
|
#
|
||||||
|
# :selector (required) :: An OrderedHash, or a standard Hash with just one
|
||||||
|
# key, specifying the command to be performed.
|
||||||
|
#
|
||||||
|
# :admin (optional) :: If true, the command will be executed on the admin
|
||||||
|
# collection.
|
||||||
|
#
|
||||||
|
# :check_response (optional) :: If true, will raise an exception if the
|
||||||
|
# command fails.
|
||||||
|
#
|
||||||
|
# Note: DB commands must start with the "command" key. For this reason,
|
||||||
|
# any selector containing more than one key must be an OrderedHash.
|
||||||
|
def command(selector, admin=false, check_response=false)
|
||||||
|
raise MongoArgumentError, "command must be given a selector" unless selector.is_a?(Hash) && !selector.empty?
|
||||||
|
if selector.class.eql?(Hash) && selector.keys.length > 1
|
||||||
|
raise MongoArgumentError, "DB#command requires an OrderedHash when hash contains multiple keys"
|
||||||
|
end
|
||||||
|
|
||||||
|
result = Cursor.new(system_command_collection, :admin => admin,
|
||||||
|
:limit => -1, :selector => selector).next_object
|
||||||
|
|
||||||
|
if check_response && !ok?(result)
|
||||||
|
raise OperationFailure, "Database command '#{selector.keys.first}' failed."
|
||||||
|
else
|
||||||
|
result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def full_collection_name(collection_name)
|
||||||
|
"#{@name}.#{collection_name}"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
def receive
|
def receive
|
||||||
receive_header
|
receive_header
|
||||||
number_received, cursor_id = receive_response_header
|
number_received, cursor_id = receive_response_header
|
||||||
@ -549,61 +604,6 @@ module Mongo
|
|||||||
message
|
message
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return +true+ if +doc+ contains an 'ok' field with the value 1.
|
|
||||||
def ok?(doc)
|
|
||||||
ok = doc['ok']
|
|
||||||
ok.kind_of?(Numeric) && ok.to_i == 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# DB commands need to be ordered, so selector must be an OrderedHash
|
|
||||||
# (or a Hash with only one element). What DB commands really need is
|
|
||||||
# that the "command" key be first.
|
|
||||||
def db_command(selector, use_admin_db=false)
|
|
||||||
if !selector.kind_of?(OrderedHash)
|
|
||||||
if !selector.kind_of?(Hash) || selector.keys.length > 1
|
|
||||||
raise "db_command must be given an OrderedHash when there is more than one key"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
cursor = Cursor.new(Collection.new(self, SYSTEM_COMMAND_COLLECTION), :admin => use_admin_db, :limit => -1, :selector => selector)
|
|
||||||
cursor.next_object
|
|
||||||
end
|
|
||||||
|
|
||||||
# Sends a command to the database.
|
|
||||||
#
|
|
||||||
# :selector (required) :: An OrderedHash, or a standard Hash with just one
|
|
||||||
# key, specifying the command to be performed.
|
|
||||||
#
|
|
||||||
# :admin (optional) :: If true, the command will be executed on the admin
|
|
||||||
# collection.
|
|
||||||
#
|
|
||||||
# :check_response (optional) :: If true, will raise an exception if the
|
|
||||||
# command fails.
|
|
||||||
#
|
|
||||||
# Note: DB commands must start with the "command" key. For this reason,
|
|
||||||
# any selector containing more than one key must be an OrderedHash.
|
|
||||||
def command(selector, admin=false, check_response=false)
|
|
||||||
raise MongoArgumentError, "command must be given a selector" unless selector.is_a?(Hash) && !selector.empty?
|
|
||||||
if selector.class.eql?(Hash) && selector.keys.length > 1
|
|
||||||
raise MongoArgumentError, "DB#command requires an OrderedHash when hash contains multiple keys"
|
|
||||||
end
|
|
||||||
|
|
||||||
result = Cursor.new(system_command_collection, :admin => admin,
|
|
||||||
:limit => -1, :selector => selector).next_object
|
|
||||||
|
|
||||||
if check_response && !ok?(result)
|
|
||||||
raise OperationFailure, "Database command '#{selector.keys.first}' failed."
|
|
||||||
else
|
|
||||||
result
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def full_collection_name(collection_name)
|
|
||||||
"#{@name}.#{collection_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# Prepares a message for transmission to MongoDB by
|
# Prepares a message for transmission to MongoDB by
|
||||||
# constructing a valid message header.
|
# constructing a valid message header.
|
||||||
def add_message_headers(operation, message)
|
def add_message_headers(operation, message)
|
||||||
|
Loading…
Reference in New Issue
Block a user