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; endp Plugin.registry.keys # => [:my_plugin, :another_plugin]
p Plugin.registry[:my_plugin] == MyPlugin # => true
p Plugin.registry[:another_plugin] == AnotherPlugin # => trueRole
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? # => trueDevelopment
-
bin/setupto install dependencies -
bin/consolefor an interactive prompt -
bin/rake -Tto run view tasks-
bin/rake testto test -
bin/rake lintto lint -
bin/rake docsto generate documentation -
bin/rake installto install this gem onto your machine -
bin/raketo test, lint, and generate documentation
-
- To release a new version
bin/rake version:bump-
bin/rake releaseto 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.