module Kouba::SimpleFactory

Public Class Methods

included(mod) click to toggle source
# File lib/kouba/simple_factory.rb, line 5
def self.included(mod)
  mod.send(:module_function, :create, :find, :name_key)
end

Public Instance Methods

create(config) click to toggle source
# File lib/kouba/simple_factory.rb, line 21
def create(config)
  (find(config[@name_key ? @name_key.to_sym : :name])).new(config[:options] || {})
end
find(name) click to toggle source
# File lib/kouba/simple_factory.rb, line 13
def find(name)
  inflector = Dry::Inflector.new
  children = constants.collect { |c| const_get(c) }.compact
  children.find do |child|
    inflector.underscore(child.name.split('::').last) == name
  end
end
name_key(key) click to toggle source
# File lib/kouba/simple_factory.rb, line 9
def name_key(key)
  @name_key = key
end