module Teaspoon::Registry

Public Class Methods

extended(host) click to toggle source
# File lib/teaspoon/registry.rb, line 3
def self.extended(host)
  host.instance_variable_set(:@registry, {})
  host.instance_variable_set(:@options, {})
end

Public Instance Methods

available() click to toggle source
# File lib/teaspoon/registry.rb, line 33
def available
  @options
end
fetch(name) click to toggle source
# File lib/teaspoon/registry.rb, line 21
def fetch(name)
  if !(driver = @registry[normalize_name(name)])
    raise not_found_exception.new(name: name, available: available.keys)
  end

  driver.call
end
matches?(one, two) click to toggle source
# File lib/teaspoon/registry.rb, line 29
def matches?(one, two)
  normalize_name(one) == normalize_name(two)
end
not_found_in_registry(klass) click to toggle source
# File lib/teaspoon/registry.rb, line 8
def not_found_in_registry(klass)
  @not_found_exception = klass
end
register(name, constant, path, options = {}) click to toggle source
# File lib/teaspoon/registry.rb, line 12
def register(name, constant, path, options = {})
  @registry[normalize_name(name)] = proc {
    require path
    constant.constantize
  }

  @options[normalize_name(name)] = options
end

Private Instance Methods

normalize_name(name) click to toggle source
# File lib/teaspoon/registry.rb, line 39
def normalize_name(name)
  name.to_s.gsub(/[-|\s]/, "_").to_sym
end
not_found_exception() click to toggle source
# File lib/teaspoon/registry.rb, line 43
def not_found_exception
  @not_found_exception || Teaspoon::NotFoundInRegistry
end