diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5895eb4436..e6f091e1e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,177 +7,22 @@ name: Run Mongoid Tests - pull_request jobs: build: - name: "${{matrix.ruby}} driver-${{matrix.driver}} mongodb-${{matrix.mongodb}} - ${{matrix.topology}}" + name: "${{matrix.ruby}} db:${{matrix.mongodb}} + rails:${{matrix.rails}} fle:${{matrix.fle}} ${{matrix.topology}}" env: CI: true TESTOPTS: "-v" - runs-on: ${{matrix.os}} - continue-on-error: "${{matrix.experimental}}" + BUNDLE_GEMFILE: "${{ matrix.rails == '' && 'Gemfile' || format('gemfiles/rails-{0}.gemfile', matrix.rails) }}" + runs-on: ubuntu-22.04 + continue-on-error: false strategy: fail-fast: false matrix: - include: - - mongodb: '6.0' - ruby: ruby-3.2 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: current - rails: - i18n: - gemfile: Gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.1 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: current - rails: - i18n: - gemfile: Gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.0 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: current - rails: - i18n: - gemfile: Gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.1 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: master - rails: - i18n: - gemfile: gemfiles/driver_master.gemfile - experimental: true - - mongodb: '6.0' - ruby: ruby-3.0 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: stable - rails: - i18n: - gemfile: gemfiles/driver_stable.gemfile - experimental: false - - mongodb: '7.0' - ruby: ruby-3.3 - topology: server - os: ubuntu-22.04 - task: test - driver: current - rails: '8.0' - fle: helper - gemfile: gemfiles/rails-8.0.gemfile - experimental: false - - mongodb: '7.0' - ruby: ruby-3.2 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '7.2' - fle: helper - gemfile: gemfiles/rails-7.2.gemfile - experimental: false - - mongodb: '7.0' - ruby: ruby-3.2 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '7.1' - fle: helper - gemfile: gemfiles/rails-7.1.gemfile - experimental: false - - mongodb: '7.0' - ruby: ruby-3.1 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '7.0' - i18n: - gemfile: gemfiles/rails-7.0.gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.1 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '6.1' - fle: helper - gemfile: gemfiles/rails-6.1.gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.0 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '6.1' - i18n: - gemfile: gemfiles/rails-6.1.gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-3.0 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '6.0' - i18n: - gemfile: gemfiles/rails-6.0.gemfile - experimental: false - - mongodb: '6.0' - ruby: ruby-2.7 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '5.2' - i18n: - gemfile: gemfiles/rails-5.2.gemfile - experimental: false - - mongodb: '6.0' - ruby: jruby-9.3 - topology: server - os: ubuntu-20.04 - task: test - driver: current - rails: '6.0' - i18n: - gemfile: gemfiles/rails-6.0.gemfile - experimental: false - - mongodb: '5.0' - ruby: ruby-3.1 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: current - rails: - i18n: - gemfile: Gemfile - experimental: false - - mongodb: '4.4' - ruby: ruby-2.7 - topology: replica_set - os: ubuntu-20.04 - task: test - driver: current - rails: - i18n: - gemfile: Gemfile - experimental: false + ruby: [ "3.2" ] + mongodb: [ "7.0" ] + rails: [ ~, "7.0" ] + fle: [ ~, "helper" ] + topology: [ replica_set, sharded_cluster ] steps: - name: repo checkout @@ -200,7 +45,8 @@ jobs: - name: load ruby uses: ruby/setup-ruby@v1 env: - BUNDLE_GEMFILE: "${{matrix.gemfile}}" + FLE: "${{matrix.fle}}" + BUNDLE_GEMFILE: "${{env.BUNDLE_GEMFILE}}" with: ruby-version: "${{matrix.ruby}}" bundler: 2 @@ -209,11 +55,13 @@ jobs: - name: bundle run: bundle install --jobs 4 --retry 3 env: - BUNDLE_GEMFILE: "${{matrix.gemfile}}" + FLE: "${{matrix.fle}}" + BUNDLE_GEMFILE: "${{env.BUNDLE_GEMFILE}}" - name: test timeout-minutes: 60 continue-on-error: "${{matrix.experimental}}" run: bundle exec rake ci env: - BUNDLE_GEMFILE: "${{matrix.gemfile}}" + BUNDLE_GEMFILE: "${{env.BUNDLE_GEMFILE}}" + FLE: "${{matrix.fle}}" MONGODB_URI: "${{ steps.start-mongodb.outputs.cluster-uri }}" diff --git a/lib/mongoid/contextual/mongo.rb b/lib/mongoid/contextual/mongo.rb index 0adc3e30e9..7b9c0b3655 100644 --- a/lib/mongoid/contextual/mongo.rb +++ b/lib/mongoid/contextual/mongo.rb @@ -1091,7 +1091,7 @@ def retrieve_nth_to_last(n) end def retrieve_nth_to_last_with_limit(n, limit) - v = view.sort(inverse_sorting).skip(n).limit(limit || 1) + v = view.sort(inverse_sorting).limit(limit || 1) v = v.skip(n) if n > 0 raw_docs = v.to_a.reverse process_raw_docs(raw_docs, limit) diff --git a/spec/mongoid/contextual/mongo_spec.rb b/spec/mongoid/contextual/mongo_spec.rb index 92b81447c3..fd942ef73b 100644 --- a/spec/mongoid/contextual/mongo_spec.rb +++ b/spec/mongoid/contextual/mongo_spec.rb @@ -3387,6 +3387,12 @@ it "limits the results" do expect(context.skip(1).entries).to eq([ new_order ]) end + + context "with #last" do + it "returns the nth from last element" do + expect(context.skip(1).last).to eq(depeche_mode) + end + end end describe "#sort" do