Module: Mongo::Id Private
- Included in:
- Monitoring, Protocol::Message, Server::Connection
- Defined in:
- lib/mongo/id.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
This module abstracts the functionality for generating sequential unique integer IDs for instances of the class. It defines the method #next_id on the class that includes it. The implementation ensures that the IDs will be unique even when called from multiple threads.
Classes which include Id should not access ‘@@id` or `@@id_lock` directly; instead, they should call `#next_id` in `#initialize` and save the result in the instance being created.
Class Method Summary collapse
- .included(klass) ⇒ Object private
Class Method Details
.included(klass) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/mongo/id.rb', line 56 def self.included(klass) klass.class_variable_set(:@@id, 0) klass.class_variable_set(:@@id_lock, Mutex.new) klass.define_singleton_method(:next_id) do klass.class_variable_get(:@@id_lock).synchronize do id = class_variable_get(:@@id) klass.class_variable_set(:@@id, id + 1) klass.class_variable_get(:@@id) end end end |