50 lines
1.4 KiB
Ruby
50 lines
1.4 KiB
Ruby
# Copyright (C) 2008 10gen Inc.
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU Affero General Public License, version 3, as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
require 'mongo/util/uuid'
|
|
|
|
module XGen
|
|
module Mongo
|
|
module Driver
|
|
|
|
class ObjectID
|
|
|
|
include Comparable
|
|
|
|
@@uuid_generator = UUID.new
|
|
|
|
# String UUID
|
|
attr_reader :uuid
|
|
|
|
# +uuid+ is a string. If nil, a new UUID will be generated.
|
|
def initialize(uuid=nil)
|
|
# The Babble server expects 12-byte (24 hex character) keys, which
|
|
# is why we throw away part of the UUID.
|
|
@uuid ||= @@uuid_generator.generate(:compact).sub(/(.{12}).{8}(.{12})/, '\1\2')
|
|
end
|
|
|
|
def to_s
|
|
@uuid
|
|
end
|
|
|
|
# This will make more sense when we implement the Babble algorithm for
|
|
# generating object ids.
|
|
def <=>(other)
|
|
to_s <=> other.to_s
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|