class Tapioca::Loaders::Gem

def explain_failed_require(file, error)

def explain_failed_require(file, error)
  say_error("\n\nLoadError: #{error}", :bold, :red)
  say_error("\nTapioca could not load all the gems required by your application.", :yellow)
  say_error("If you populated ", :yellow)
  say_error("#{file} ", :bold, :blue)
  say_error("with ", :yellow)
  say_error("`#{@default_command}`", :bold, :blue)
  say_error("you should probably review it and remove the faulty line.", :yellow)
end

def initialize(bundle:, prerequire:, postrequire:, default_command:, halt_upon_load_error:)

def initialize(bundle:, prerequire:, postrequire:, default_command:, halt_upon_load_error:)
  super()
  @bundle = bundle
  @prerequire = prerequire
  @postrequire = postrequire
  @default_command = default_command
  @halt_upon_load_error = halt_upon_load_error
end

def load

def load
  require_gem_file
end

def load_application(bundle:, prerequire:, postrequire:, default_command:, halt_upon_load_error:)

def load_application(bundle:, prerequire:, postrequire:, default_command:, halt_upon_load_error:)
  loader = new(
    bundle: bundle,
    prerequire: prerequire,
    postrequire: postrequire,
    default_command: default_command,
    halt_upon_load_error: halt_upon_load_error,
  )
  loader.load
end

def require_gem_file

def require_gem_file
  say("Requiring all gems to prepare for compiling... ")
  begin
    load_bundle(@bundle, @prerequire, @postrequire, @halt_upon_load_error)
  rescue LoadError => e
    explain_failed_require(@postrequire, e)
    exit(1)
  end
  Runtime::Trackers::Autoload.eager_load_all!
  say(" Done", :green)
  unless @bundle.missing_specs.empty?
    say("  completed with missing specs: ")
    say(@bundle.missing_specs.join(", "), :yellow)
  end
  puts
end