Skip to content
The Singleton module implements the Singleton pattern.
Ruby Shell
Branch: master
Clone or download
hsbt Merge pull request #1 from ruby/use-actions
Use GitHub Actions instead of Travis CI
Latest commit e2b4c41 Dec 9, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Use GitHub Actions instead of Travis CI Dec 9, 2019
bin bundle gem singleton Aug 6, 2019
lib bundle gem singleton Aug 6, 2019
test Removed needless test files. Aug 19, 2019
.gitignore Use Gemfile instead of Gem::Specification#add_development_dependency. Aug 19, 2019
Gemfile Use Gemfile instead of Gem::Specification#add_development_dependency. Aug 19, 2019
LICENSE.txt Added LICENSE file. Aug 19, 2019
README.md README Aug 19, 2019
Rakefile Removed needless test files. Aug 19, 2019
singleton.gemspec

README.md

Singleton

The Singleton module implements the Singleton pattern.

Installation

Add this line to your application's Gemfile:

gem 'singleton'

And then execute:

$ bundle

Or install it yourself as:

$ gem install singleton

Usage

To use Singleton, include the module in your class.

class Klass
   include Singleton
   # ...
end

This ensures that only one instance of Klass can be created.

a,b  = Klass.instance, Klass.instance

a == b
# => true

Klass.new
# => NoMethodError - new is private ...

The instance is created at upon the first call of Klass.instance().

class OtherKlass
  include Singleton
  # ...
end

ObjectSpace.each_object(OtherKlass){}
# => 0

OtherKlass.instance
ObjectSpace.each_object(OtherKlass){}
# => 1

This behavior is preserved under inheritance and cloning.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/singleton.

You can’t perform that action at this time.