lib/tapioca/gemfile.rb in tapioca-0.1.5 vs lib/tapioca/gemfile.rb in tapioca-0.2.0
- old
+ new
@@ -5,11 +5,19 @@
module Tapioca
class Gemfile
extend(T::Sig)
- Spec = T.type_alias(T.any(::Bundler::StubSpecification, ::Gem::Specification))
+ Spec = T.type_alias(
+ T.any(
+ T.all(
+ ::Bundler::StubSpecification,
+ ::Bundler::RemoteSpecification
+ ),
+ ::Gem::Specification
+ )
+ )
sig { void }
def initialize
@gemfile = T.let(File.new(Bundler.default_gemfile), File)
@lockfile = T.let(File.new(Bundler.default_lockfile), File)
@@ -35,80 +43,47 @@
sig { params(gem_name: String).returns(T.nilable(Gem)) }
def gem(gem_name)
dependencies.detect { |dep| dep.name == gem_name }
end
- sig { params(initialize_file: T.nilable(String), require_file: T.nilable(String)).void }
- def require_bundle(initialize_file, require_file)
- require(initialize_file) if initialize_file && File.exist?(initialize_file)
-
- runtime = Bundler::Runtime.new(File.dirname(gemfile.path), definition)
- groups = Bundler.definition.groups
- runtime.setup(*groups).require(*groups)
-
- require(require_file) if require_file && File.exist?(require_file)
-
- load_rails_engines
+ sig { void }
+ def require
+ T.unsafe(runtime).setup(*groups).require(*groups)
end
private
sig { returns(File) }
attr_reader(:gemfile, :lockfile)
+ 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
+ IGNORED_GEMS = T.let(%w{
+ sorbet sorbet-static sorbet-runtime tapioca
+ }.freeze, T::Array[String])
+
sig { params(spec: Spec).returns(T::Boolean) }
def ignore_gem_spec?(spec)
- ["sorbet", "sorbet-static"].include?(spec.name) ||
+ IGNORED_GEMS.include?(spec.name) ||
spec.full_gem_path.start_with?(gemfile_dir)
end
sig { returns(String) }
def gemfile_dir
File.expand_path(gemfile.path + "/..")
- end
-
- sig { returns(T::Array[T.untyped]) }
- def rails_engines
- engines = []
-
- return engines unless Object.const_defined?("Rails::Engine")
-
- base = Object.const_get("Rails::Engine")
- ObjectSpace.each_object(base.singleton_class) do |k|
- k = T.cast(k, Class)
- next if k.singleton_class?
- engines.unshift(k) unless k == base
- end
-
- engines.reject(&:abstract_railtie?)
- end
-
- sig { void }
- def load_rails_engines
- rails_engines.each do |engine|
- errored_files = []
-
- engine.config.eager_load_paths.each do |load_path|
- Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
- require(file)
- rescue LoadError, StandardError
- errored_files << file
- end
- end
-
- # Try files that have errored one more time
- # It might have been a load order problem
- errored_files.each do |file|
- require(file)
- rescue LoadError, StandardError
- nil
- end
- end
end
class Gem
extend(T::Sig)