From 0df25af0b362f99eb5681d551c9bba3b3cbea471 Mon Sep 17 00:00:00 2001 From: Alex Coomans Date: Mon, 30 Jun 2025 20:14:38 -0500 Subject: [PATCH] Return value from transaction yield to caller instead of internal state --- lib/mongoid/clients/sessions.rb | 3 +-- spec/mongoid/clients/transactions_spec.rb | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/mongoid/clients/sessions.rb b/lib/mongoid/clients/sessions.rb index 734c77f4d1..a4e1efd1a8 100644 --- a/lib/mongoid/clients/sessions.rb +++ b/lib/mongoid/clients/sessions.rb @@ -92,8 +92,7 @@ def transaction(options = {}, session_options: {}) begin session.with_transaction(options) do yield - end - run_commit_callbacks(session) + end.tap { run_commit_callbacks(session) } rescue *transactions_not_supported_exceptions raise Mongoid::Errors::TransactionsNotSupported rescue Mongoid::Errors::Rollback diff --git a/spec/mongoid/clients/transactions_spec.rb b/spec/mongoid/clients/transactions_spec.rb index ea6c558d1d..3fa67560db 100644 --- a/spec/mongoid/clients/transactions_spec.rb +++ b/spec/mongoid/clients/transactions_spec.rb @@ -716,7 +716,7 @@ def capture_exception require_transaction_support context 'when no error raised' do - before do + let!(:person) do Mongoid.transaction do Person.create! end @@ -727,6 +727,10 @@ def capture_exception expect(other_events.count { |e| e.command_name == 'commitTransaction'}).to be(1) end + it 'returns the value from the block' do + expect(person).to be_a(Person) + end + it 'executes the commands inside the transaction' do expect(Person.count).to be(1) end