From 9d2c993603500dc0458c89678bc4fca6811e9fa7 Mon Sep 17 00:00:00 2001 From: Ryan Brushett Date: Thu, 19 Aug 2021 13:40:12 -0400 Subject: [PATCH] Add support for bundler 2.2.25+ --- .github/workflows/ci.yml | 6 ++++-- lib/tapioca/gemfile.rb | 23 +++++++++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa688886b..df438567d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,13 +12,15 @@ jobs: fail-fast: false matrix: ruby: [ 2.6, 2.7, 3.0 ] - name: Test Ruby ${{ matrix.ruby }} + bundler: [ 2.2.22, 2.2.25 ] + name: Test Ruby ${{ matrix.ruby }}, Bundler ${{ matrix.bundler }} steps: - uses: actions/checkout@v2 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} + bundler: ${{ matrix.bundler }} bundler-cache: true - name: Run type check run: bin/typecheck @@ -27,4 +29,4 @@ jobs: - name: Verify documentation run: bin/docs - name: Run tests - run: bin/test + run: bundle _${{ matrix.bundler }}_ exec rake diff --git a/lib/tapioca/gemfile.rb b/lib/tapioca/gemfile.rb index d8901379b..591e946e0 100644 --- a/lib/tapioca/gemfile.rb +++ b/lib/tapioca/gemfile.rb @@ -53,21 +53,28 @@ def require sig { returns([T::Array[Gem], T::Array[String]]) } def load_dependencies - deps = definition.locked_gems.dependencies.values - - missing_specs = T::Array[String].new - - dependencies = definition - .resolve - .materialize(deps, missing_specs) + materialized_dependencies, missing_specs = materialize_deps + dependencies = materialized_dependencies .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([T::Array[::Gem::Specification], T::Array[String]]) } + 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 + definition.resolve.materialize(deps) + .tap { |md| missing_specs = T.cast(md.missing_specs, T::Array[String]) } + else + definition.resolve.materialize(deps, missing_specs) + end + [materialized_dependencies, missing_specs] + end + sig { returns(Bundler::Runtime) } def runtime Bundler::Runtime.new(File.dirname(gemfile.path), definition)