class FixerUpper::EngineRegistry

Public Class Methods

new() click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 3
def initialize
  @engines = {}
end

Public Instance Methods

[](engine_name) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 28
def [](engine_name)
  @engines[engine_name.to_s]
end
engine?(engine) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 24
def engine?(engine)
  @engines.key?(engine.to_s)
end
register(*names, engine:, options: {}) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 7
def register(*names, engine:, options: {})
  if definitely_like_tilt_template?(engine)
    register_tilt(*names, engine: engine, options: options)
  else
    register_fixer_upper(names, engine, options)
  end
end
register_tilt(*names, engine:, options: {}) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 15
def register_tilt(*names, engine:, options: {})
  engine_bridge =
    TiltTemplateClassBridge.new(engine, options)

  names.each do |name|
    register_single(name, engine_bridge)
  end
end

Private Instance Methods

definitely_like_tilt_template?(engine) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 34
def definitely_like_tilt_template?(engine)
  engine < Tilt::Template
end
engine_class_name(engine) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 38
def engine_class_name(engine)
  if engine.is_a?(TiltTemplateClassBridge)
    engine.tilt_engine_class.name
  else
    engine.name
  end
end
register_fixer_upper(names, engine, options) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 46
def register_fixer_upper(names, engine, options)
  if options.any?
    raise Error::EngineDoesntAcceptOptions, \
      "Only Tilt templates can accept options"
  end

  names.each do |name|
    register_single(name, engine)
  end
end
register_single(name, engine) click to toggle source
# File lib/fixer_upper/engine_registry.rb, line 57
def register_single(name, engine)
  if engine?(name)
    existing_engine = self[name]

    raise Error::MultipleEnginesForOneName, \
      "Trying to register `#{engine_class_name(engine)}` " \
      "to the name `#{name}`, " \
      "but `#{engine_class_name(existing_engine)}` is already registered."
  end

  @engines[name.to_s] = engine
end