CARVIEW |
Select Language
HTTP/2 302
date: Sun, 27 Jul 2025 06:02:52 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
location: https://gist.github.com/charleseff/1305285
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
set-cookie: _gh_sess=BdZc7gzkS4glPJR7TTPxQ5ZvUv2OK7YbvMuDqjLnqQtVAvCFL5Kg3QjKKf1LYf%2BYS3o2eG0uqAVp3%2FzVRbul0YOFup2gJXqEP8GA%2BwhJLU0eOGx7H6HYYIgdTZ4AGgX7TLOIBxu5Xu7KcAFBe%2BmrUg4CKITRyQv70mVLmUBfIfbX%2Frn0Ln%2BtU0x3WFGSU%2BPc75Jcn7Qx59vQ6KDEFrfVsO310G%2FHCXuW3NtARm0%2BtW7nU8L46BGqX8ZzLtTDPWrgGThQR9BMJj4cnUVI4g%2BrYg%3D%3D--40bSEHibSDLsqKH3--HUxpR6Vk8G05fa3zgP%2B1xQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.99731430.1753596172; Path=/; Domain=github.com; Expires=Mon, 27 Jul 2026 06:02:52 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Mon, 27 Jul 2026 06:02:52 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 918E:29FD1F:B2EEAF:EE9314:6885C10C
HTTP/2 200
date: Sun, 27 Jul 2025 06:02:53 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"8dc16ea1615ff828a5a5bfd7135e289c"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
x-github-request-id: 918E:29FD1F:B2EEBD:EE933C:6885C10C
Patch ActiveRecord to fire after_commit callbacks at the appropriate time during tests with transactional fixtures. · GitHub
Show Gist options
Save charleseff/1305285 to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
Forked from dcuddeback/after_commit_with_transactional_fixtures.rb
Created
October 21, 2011 23:45
-
Star
2
(2)
You must be signed in to star a gist -
Fork
2
(2)
You must be signed in to fork a gist
-
Save charleseff/1305285 to your computer and use it in GitHub Desktop.
Patch ActiveRecord to fire after_commit callbacks at the appropriate time during tests with transactional fixtures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module ActiveRecord | |
module ConnectionAdapters | |
module DatabaseStatements | |
# | |
# Run the normal transaction method; when it's done, check to see if there | |
# is exactly one open transaction. If so, that's the transactional | |
# fixtures transaction; from the model's standpoint, the completed | |
# transaction is the real deal. Send commit callbacks to models. | |
# | |
# If the transaction block raises a Rollback, we need to know, so we don't | |
# call the commit hooks. Other exceptions don't need to be explicitly | |
# accounted for since they will raise uncaught through this method and | |
# prevent the code after the hook from running. | |
# | |
def transaction_with_transactional_fixtures(options = {}, &block) | |
return transaction_without_transactional_fixtures(options, &block) unless RSpec.configuration.use_transactional_fixtures | |
return_value = nil | |
rolled_back = false | |
transaction_without_transactional_fixtures(options) do | |
begin | |
return_value = yield | |
rescue ActiveRecord::Rollback => e | |
rolled_back = true | |
raise e | |
end | |
end | |
commit_transaction_records(false) if !rolled_back && open_transactions == 1 | |
return_value | |
end | |
alias_method_chain :transaction, :transactional_fixtures | |
# | |
# The @_current_transaction_records is a stack of arrays, each one | |
# containing the records associated with the corresponding transaction | |
# in the transaction stack. This is used by the | |
# `rollback_transaction_records` method (to only send a rollback hook to | |
# models attached to the transaction being rolled back) but is usually | |
# ignored by the `commit_transaction_records` method. Here we | |
# monkey-patch it to temporarily replace the array with only the records | |
# for the top-of-stack transaction, so the real | |
# `commit_transaction_records` method only sends callbacks to those. | |
# | |
def commit_transaction_records_with_transactional_fixtures(commit = true) | |
return commit_transaction_records_without_transactional_fixtures if !RSpec.configuration.use_transactional_fixtures || commit | |
real_current_transaction_records = @_current_transaction_records.clone | |
@_current_transaction_records = @_current_transaction_records.pop || [] | |
begin | |
commit_transaction_records_without_transactional_fixtures | |
ensure | |
@_current_transaction_records = real_current_transaction_records | |
end | |
end | |
alias_method_chain :commit_transaction_records, :transactional_fixtures | |
end | |
end | |
end |
turned it into a gem test after_commit because to have a common ground for improvements and to add tests to see it works on all rails versions!
What about the scenario where you're running a fat specs suite in multiple chunks in parallel? Then this solution won't work, right?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can’t perform that action at this time.
thanks, very helpful, I removed both RSpec statements since we are on test:unit,
would be nice if it works with both, but so far a great drop-in-fix :D