lib/tapioca/gemfile.rb in tapioca-0.4.13 vs lib/tapioca/gemfile.rb in tapioca-0.4.14
- old
+ new
@@ -15,33 +15,29 @@
),
::Gem::Specification
)
end
+ sig { returns(Bundler::Definition) }
+ attr_reader(:definition)
+
+ sig { returns(T::Array[Gem]) }
+ attr_reader(:dependencies)
+
+ sig { returns(T::Array[String]) }
+ attr_reader(:missing_specs)
+
sig { void }
def initialize
@gemfile = T.let(File.new(Bundler.default_gemfile), File)
@lockfile = T.let(File.new(Bundler.default_lockfile), File)
- @dependencies = T.let(nil, T.nilable(T::Array[Gem]))
- @definition = T.let(nil, T.nilable(Bundler::Definition))
+ @definition = T.let(Bundler::Dsl.evaluate(gemfile, lockfile, {}), Bundler::Definition)
+ dependencies, missing_specs = load_dependencies
+ @dependencies = T.let(dependencies, T::Array[Gem])
+ @missing_specs = T.let(missing_specs, T::Array[String])
end
- sig { returns(T::Array[Gem]) }
- def dependencies
- @dependencies ||= begin
- specs = definition.locked_gems.specs.to_a
-
- definition
- .resolve
- .materialize(specs)
- .map { |spec| Gem.new(spec) }
- .reject { |gem| gem.ignore?(dir) }
- .uniq(&:rbi_file_name)
- .sort_by(&:rbi_file_name)
- end
- end
-
sig { params(gem_name: String).returns(T.nilable(Gem)) }
def gem(gem_name)
dependencies.detect { |dep| dep.name == gem_name }
end
@@ -53,22 +49,34 @@
private
sig { returns(File) }
attr_reader(:gemfile, :lockfile)
+ sig { returns([T::Array[Gem], T::Array[String]]) }
+ def load_dependencies
+ specs = definition.locked_gems.specs.to_a
+
+ missing_specs = T::Array[String].new
+
+ dependencies = definition
+ .resolve
+ .materialize(specs, missing_specs)
+ .map { |spec| Gem.new(spec) }
+ .reject { |gem| gem.ignore?(dir) }
+ .uniq(&:rbi_file_name)
+ .sort_by(&:rbi_file_name)
+
+ [dependencies, missing_specs]
+ end
+
sig { returns(Bundler::Runtime) }
def runtime
Bundler::Runtime.new(File.dirname(gemfile.path), definition)
end
sig { returns(T::Array[Symbol]) }
def groups
definition.groups
- end
-
- sig { returns(Bundler::Definition) }
- def definition
- @definition ||= Bundler::Dsl.evaluate(gemfile, lockfile, {})
end
sig { returns(String) }
def dir
File.expand_path(gemfile.path + "/..")