module Attr::Gather::Registrable
Makes a module registrable
Public Class Methods
extended(klass)
click to toggle source
# File lib/attr/gather/concerns/registrable.rb, line 13 def self.extended(klass) klass.instance_variable_set(:@__storage__, {}) end
Public Instance Methods
ensure_name_not_already_registered!(name)
click to toggle source
@api private
# File lib/attr/gather/concerns/registrable.rb, line 42 def ensure_name_not_already_registered!(name) return unless @__storage__.key?(name) raise AlreadyRegisteredError, "item with name #{name} already registered" end
register(name, &blk)
click to toggle source
Register item so it can be accessed by name
@param name [Symbol] name of the item @yield [options] block to initialize the item
# File lib/attr/gather/concerns/registrable.rb, line 21 def register(name, &blk) name = name.to_sym @__storage__[name] = blk end
resolve(name, *args, **opts)
click to toggle source
Resolve a named item
@param name [Symbol]
@return [#call]
# File lib/attr/gather/concerns/registrable.rb, line 32 def resolve(name, *args, **opts) block = @__storage__.fetch(name) do raise NotFoundError, "no item with name #{name} registered" end block.call(*args, **opts) end