CARVIEW |
Select Language
HTTP/2 200
date: Wed, 30 Jul 2025 13:13:33 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/"eb5a98a0a7a9721d3125cdedcba17bae"
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
set-cookie: _gh_sess=rMt%2BESM%2FyTdv4yTcwQGw7mcREoKss89WIym6INLofx2dp4tnJ233bUBgdchwVlnF%2FCTwVkKlnAV4L2mPCF4PINJUjJTyu4zKahlG4N5UkGOOcrNailn2oIF7den4sWwKM1ireLcV%2BRPKhiJcH3fSlTDmQHTL7MyJ%2B3z3vTBJoaNb7YzuJZ%2FlRNmSwz8Wifnaqv8aq9%2BUaFhR8jic9w2UEe28xVRrmIE3zzUuABCjFeRicJi%2B9u0yrMu4zlyBSHAA%2F6Y2XIKqMeoPU48hXW6xVA%3D%3D--0BFPZt6Rimdnawyk--deKc9grQEOzPlkyi3ksLnQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.211488173.1753881213; Path=/; Domain=github.com; Expires=Thu, 30 Jul 2026 13:13:33 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 30 Jul 2026 13:13:33 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: D580:22B09E:9564C:A834B:688A1A7D
Patch ActiveRecord to fire after_commit callbacks at the appropriate time during tests with transactional fixtures. · GitHub
Show Gist options
Save dcuddeback/1169763 to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
Created
August 25, 2011 01:36
-
Star
6
(6)
You must be signed in to star a gist -
Fork
2
(2)
You must be signed in to fork a gist
-
Save dcuddeback/1169763 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_value = nil | |
rolled_back = false | |
transaction_without_transactional_fixtures do | |
begin | |
return_value = yield | |
rescue ActiveRecord::Rollback => e | |
rolled_back = true | |
raise e | |
end | |
end | |
if !rolled_back && open_transactions == 1 | |
commit_transaction_records(false) | |
end | |
return_value | |
end | |
alias_method_chain :transaction, :transactional_fixtures | |
# | |
# The @_current_transaction_records is an 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) | |
unless commit | |
real_current_transaction_records = @_current_transaction_records | |
@_current_transaction_records = @_current_transaction_records.pop | |
end | |
begin | |
commit_transaction_records_without_transactional_fixtures | |
rescue # works better with that :) | |
ensure | |
unless commit | |
@_current_transaction_records = real_current_transaction_records | |
end | |
end | |
end | |
alias_method_chain :commit_transaction_records, :transactional_fixtures | |
end | |
end | |
end |
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.
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!