module Rake::Funnel::Support::InstantiateSymbol

Public Class Methods

included(klass) click to toggle source
# File lib/rake/funnel/support/internal/instantiate_symbol.rb, line 7
def self.included(klass)
  klass.extend(ClassMethods)
  klass.send(:instantiate, klass)
end

Private Instance Methods

available() click to toggle source
# File lib/rake/funnel/support/internal/instantiate_symbol.rb, line 40
def available
  mod.constants.sort
end
create(sym, *args) click to toggle source
# File lib/rake/funnel/support/internal/instantiate_symbol.rb, line 24
def create(sym, *args) # rubocop:disable Metrics/AbcSize
  return sym unless sym.is_a?(Symbol)

  found = [sym, sym.pascalize.to_sym]
          .select { |candidate| mod.constants.include?(candidate) }
          .first

  if found.nil?
    raise NameError,
          "Unknown type to instantiate: #{sym.inspect}. Available types are: #{available.inspect}"
  end

  type = mod.const_get(found)
  type.new(*args)
end
mod() click to toggle source
# File lib/rake/funnel/support/internal/instantiate_symbol.rb, line 44
def mod
  self.class.module
end