Skip to content
Allows a class to hold a registry of it's instances
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
examples
lib
spec
templates
.gitignore
.rspec
.rubocop.yml
.yardopts
CODE_OF_CONDUCT.md
Gemfile
Guardfile
LICENSE.txt
README.md
Rakefile
VERSION
registrable.gemspec

README.md

Registrable

Install

Bundler: gem "registrable"

RubyGems: gem install registrable

Examples

Plugin

require 'registrable'

module Plugin

  extend Registrable

  class Base
    def self.inherited(subclass)
      identifier = subclass.to_s
        .split('::').last
        .gsub(/([a-z0-9])([A-Z])/, '\1_\2')
        .downcase.to_sym

      Plugin.register(identifier, subclass)
    end
  end

end

class MyPlugin < Plugin::Base; end
class AnotherPlugin < Plugin::Base; end
p Plugin.registry.keys                              # => [:my_plugin, :another_plugin]
p Plugin.registry[:my_plugin] == MyPlugin           # => true
p Plugin.registry[:another_plugin] == AnotherPlugin # => true

Role

require 'registrable'

class Role

  extend Registrable

  def initialize(readable, modify)
    @readable, @modifiable = readable, modifiable
  end

  def readable?
    @readable
  end

  def modifiable?
    @modifiable
  end

end

class User

  def initialize(role)
    self.role = role
  end

  attr_reader :role

  def role=(role)
    role = Role.registry[role] || Role.registry[:other] unless role.is_a?(Role)

    @role = role
  end

end

Role.register(:other, Role.new(false, false))
Role.register(:user,  Role.new(true,  false))
Role.register(:admin, Role.new(true,  true))
other = User.new(:other)

p other.role.readable?   # => true
p other.role.modifiable? # => true

user = User.new(:user)

p admin.role.readable?   # => true
p admin.role.modifiable? # => false

admin = User.new(:admin)

p admin.role.readable?   # => true
p admin.role.modifiable? # => true

Development

  • bin/setup to install dependencies
  • bin/console for an interactive prompt
  • bin/rake -T to run view tasks
    • bin/rake test to test
    • bin/rake lint to lint
    • bin/rake docs to generate documentation
    • bin/rake install to install this gem onto your machine
    • bin/rake to test, lint, and generate documentation
  • To release a new version
    • bin/rake version:bump
    • bin/rake release to create a git tag for the version, push git commits and tags, and push the gem to rubygems.org.

Contributing

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

This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

You can’t perform that action at this time.