class Tapioca::Gemfile

Constants

Spec

Attributes

definition[R]
dependencies[R]
gemfile[R]
lockfile[R]
missing_specs[R]

Public Class Methods

new() click to toggle source
# File lib/tapioca/gemfile.rb, line 30
def initialize
  @gemfile = T.let(File.new(Bundler.default_gemfile), File)
  @lockfile = T.let(File.new(Bundler.default_lockfile), File)
  @definition = T.let(Bundler::Dsl.evaluate(gemfile, lockfile, {}), Bundler::Definition)
  dependencies, missing_specs = load_dependencies
  @dependencies = T.let(dependencies, T::Array[GemSpec])
  @missing_specs = T.let(missing_specs, T::Array[String])
end

Public Instance Methods

gem(gem_name) click to toggle source
# File lib/tapioca/gemfile.rb, line 40
def gem(gem_name)
  dependencies.detect { |dep| dep.name == gem_name }
end
require_bundle() click to toggle source
# File lib/tapioca/gemfile.rb, line 45
def require_bundle
  T.unsafe(runtime).require(*groups)
end

Private Instance Methods

dir() click to toggle source
# File lib/tapioca/gemfile.rb, line 91
def dir
  File.expand_path(gemfile.path + "/..")
end
groups() click to toggle source
# File lib/tapioca/gemfile.rb, line 86
def groups
  definition.groups
end
load_dependencies() click to toggle source
# File lib/tapioca/gemfile.rb, line 55
def load_dependencies
  materialized_dependencies, missing_specs = materialize_deps
  dependencies = materialized_dependencies
    .map { |spec| GemSpec.new(spec) }
    .reject { |gem| gem.ignore?(dir) }
    .uniq(&:rbi_file_name)
    .sort_by(&:rbi_file_name)
  [dependencies, missing_specs]
end
materialize_deps() click to toggle source
# File lib/tapioca/gemfile.rb, line 66
def materialize_deps
  deps = definition.locked_gems.dependencies.values
  missing_specs = T::Array[String].new
  materialized_dependencies = if definition.resolve.method(:materialize).arity == 1 # Support bundler >= v2.2.25
    md = definition.resolve.materialize(deps)
    missing_spec_names = md.missing_specs.map(&:name)
    missing_specs = T.cast(md.missing_specs.map { |spec| "#{spec.name} (#{spec.version})" }, T::Array[String])
    md.to_a.reject { |spec| missing_spec_names.include?(spec.name) }
  else
    definition.resolve.materialize(deps, missing_specs)
  end
  [materialized_dependencies, missing_specs]
end
runtime() click to toggle source
# File lib/tapioca/gemfile.rb, line 81
def runtime
  Bundler::Runtime.new(File.dirname(gemfile.path), definition)
end