From 363ac30a6714e8e89249630e9bf84dc955d41b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20C=C3=A1ssio?= Date: Tue, 18 Apr 2023 17:25:52 -0300 Subject: [PATCH 1/4] Use RequestStore instead of Thread.current for thread-safe requests. --- audited.gemspec | 1 + lib/audited.rb | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/audited.gemspec b/audited.gemspec index 77ff736e..fdcf636e 100644 --- a/audited.gemspec +++ b/audited.gemspec @@ -17,6 +17,7 @@ Gem::Specification.new do |gem| gem.required_ruby_version = ">= 2.3.0" gem.add_dependency "activerecord", ">= 5.0", "< 7.1" + gem.add_dependency "request_store", "~> 1.2" gem.add_development_dependency "appraisal" gem.add_development_dependency "rails", ">= 5.0", "< 7.1" diff --git a/lib/audited.rb b/lib/audited.rb index 1b964c57..d548711e 100644 --- a/lib/audited.rb +++ b/lib/audited.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "active_record" +require "request_store" module Audited class << self @@ -24,13 +25,7 @@ def audit_class deprecate audit_model: "use Audited.audit_class instead of Audited.audit_model. This method will be removed." def store - current_store_value = Thread.current.thread_variable_get(:audited_store) - - if current_store_value.nil? - Thread.current.thread_variable_set(:audited_store, {}) - else - current_store_value - end + RequestStore.store[:audited_store] ||= {} end def config From 6ad0d1049aedba24bc1fece54387b13f29e7247b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20C=C3=A1ssio?= Date: Wed, 19 Apr 2023 16:54:40 -0300 Subject: [PATCH 2/4] Fix specs. --- spec/audited_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/audited_spec.rb b/spec/audited_spec.rb index db5e6379..0679ac6c 100644 --- a/spec/audited_spec.rb +++ b/spec/audited_spec.rb @@ -3,7 +3,7 @@ describe Audited do describe "#store" do describe "maintains state of store" do - let(:current_user) { "current_user" } + let(:current_user) { RequestStore.store[:audited_user] } before { Audited.store[:current_user] = current_user } it "when executed without fibers" do From 950ff2a03f38209a8647d484293463367716b8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20C=C3=A1ssio?= Date: Wed, 19 Apr 2023 16:56:49 -0300 Subject: [PATCH 3/4] Fix typo. --- spec/audited_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/audited_spec.rb b/spec/audited_spec.rb index 0679ac6c..36a888a8 100644 --- a/spec/audited_spec.rb +++ b/spec/audited_spec.rb @@ -3,7 +3,7 @@ describe Audited do describe "#store" do describe "maintains state of store" do - let(:current_user) { RequestStore.store[:audited_user] } + let(:current_user) { RequestStore.store[:audited_store] } before { Audited.store[:current_user] = current_user } it "when executed without fibers" do From 0960dc7d9538d10a9af2bfdeeb017c05639737a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20C=C3=A1ssio?= Date: Wed, 19 Apr 2023 18:57:18 -0300 Subject: [PATCH 4/4] Fix audited_spec.rb. --- spec/audited_spec.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/audited_spec.rb b/spec/audited_spec.rb index 36a888a8..aa142199 100644 --- a/spec/audited_spec.rb +++ b/spec/audited_spec.rb @@ -6,13 +6,9 @@ let(:current_user) { RequestStore.store[:audited_store] } before { Audited.store[:current_user] = current_user } - it "when executed without fibers" do + it "checks store is not nil" do expect(Audited.store[:current_user]).to eq(current_user) end - - it "when executed with Fibers" do - Fiber.new { expect(Audited.store[:current_user]).to eq(current_user) }.resume - end end end end