Using the Singleton module and overriding its methods a bit, I believe this works, and it is thread safe (on ruby 1.8):
class Speaker include Singleton include Mongoid::Document field :name, :type => String @@singleton__instance__ = nil @@singleton__mutex__ = Mutex.new def self.instance return @@singleton__instance__ if @@singleton__instance__ @@singleton__mutex__.synchronize { return @@singleton__instance__ if @@singleton__instance__ @@singleton__instance__ = self.first @@singleton__instance__ ||= new() } @@singleton__instance__ end def destroy @@singleton__mutex__.synchronize { super @@singleton__instance__ = nil } end end
andersonvom
source share