class Bundler::Injector

def inject(gemfile_path, lockfile_path)

def inject(gemfile_path, lockfile_path)
  if Bundler.settings[:frozen]
    # ensure the lock and Gemfile are synced
    Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
    # temporarily remove frozen while we inject
    frozen = Bundler.settings.delete(:frozen)
  end
  # evaluate the Gemfile we have now
  builder = Dsl.new
  builder.eval_gemfile(gemfile_path)
  # don't inject any gems that are already in the Gemfile
  @new_deps -= builder.dependencies
  # add new deps to the end of the in-memory Gemfile
  builder.eval_gemfile("injected gems", new_gem_lines) if @new_deps.any?
  # resolve to see if the new deps broke anything
  definition = builder.to_definition(lockfile_path, {})
  definition.resolve_remotely!
  # since nothing broke, we can add those gems to the gemfile
  append_to(gemfile_path) if @new_deps.any?
  # since we resolved successfully, write out the lockfile
  definition.lock(Bundler.default_lockfile)
  # return an array of the deps that we added
  return @new_deps
ensure
  Bundler.settings[:frozen] = '1' if frozen
end