lib/tapioca/commands/gem_generate.rb in tapioca-0.16.5 vs lib/tapioca/commands/gem_generate.rb in tapioca-0.16.6
- old
+ new
@@ -44,8 +44,43 @@
say("No operations performed, all RBIs are up-to-date.", [:green, :bold])
end
ensure
GitAttributes.create_generated_attribute_file(@outpath)
end
+
+ sig { params(gem_names: T::Array[String]).returns(T::Array[Gemfile::GemSpec]) }
+ def gems_to_generate(gem_names)
+ return @bundle.dependencies if gem_names.empty?
+
+ (gem_names - @exclude).each_with_object([]) do |gem_name, gems|
+ gem = @bundle.gem(gem_name)
+
+ if gem.nil?
+ next if @lsp_addon
+
+ raise Thor::Error, set_color("Error: Cannot find gem '#{gem_name}'", :red)
+ end
+
+ gems.concat(gem_dependencies(gem)) if @include_dependencies
+ gems << gem
+ end
+ end
+
+ sig do
+ params(
+ gem: Gemfile::GemSpec,
+ dependencies: T::Array[Gemfile::GemSpec],
+ ).returns(T::Array[Gemfile::GemSpec])
+ end
+ def gem_dependencies(gem, dependencies = [])
+ direct_dependencies = gem.dependencies.filter_map { |dependency| @bundle.gem(dependency.name) }
+ gems = dependencies | direct_dependencies
+
+ if direct_dependencies.empty?
+ gems
+ else
+ direct_dependencies.reduce(gems) { |result, gem| gem_dependencies(gem, result) }
+ end
+ end
end
end
end