Module: FTW::Singleton

Included in:
DNS, WebSocket::Writer
Defined in:
lib/ftw/singleton.rb

Overview

A mixin that provides singleton-ness

Usage:

class Foo
  extend FTW::Singleton

  ...
end

foo = Foo.singleton

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object

This is invoked when you include this module. It raises an exception because you should be using ‘extend’ not ‘include’ for this module..

Raises:

  • (ArgumentError)


17
18
19
# File 'lib/ftw/singleton.rb', line 17

def self.included(klass)
  raise ArgumentError.new("In #{klass.name}, you want to use 'extend #{self.name}', not 'include ...'")
end

Instance Method Details

#singletonObject

Create a singleton instance of whatever class this module is extended into.

Example:

class Foo
  extend FTW::Singleton
  def bar
    "Hello!"
  end
end

p Foo.singleton.bar   # == "Hello!"


33
34
35
36
# File 'lib/ftw/singleton.rb', line 33

def singleton
  @instance ||= self.new
  return @instance
end