activerecord-reactor 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/active_record/reactor/version.rb +1 -1
- data/lib/active_record/reactor.rb +14 -3
- data/lib/activerecord-reactor.rb +2 -3
- data/test/cases/reactor_test.rb +24 -2
- metadata +9 -11
- data/CHANGELOG +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '08acc980dafea9ccf50b1e401436fdd905047333f84fc5cd03e642b625ff4bc8'
|
4
|
+
data.tar.gz: 0c269b9b2e506f7677fc8b41688a35b6fac37913f585d5ece47d06b92fd30d6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 672f47d9f4eb5c756e09fb62c4bd57ab5ca2e78aac7b44d089bc0dd0ee7b7d6831caba05e82810161331fccf6ec8631286bc0abd275a84a4b9fb31bbb2dbddbd
|
7
|
+
data.tar.gz: f0873bcdf343938b22c25df58a57f98023f5d0d9a8a080e7582a9dad89aeb0b40e3c8607fa613cffe659e5534dde5bab0c93967ef72501fe9917bde526ed2473
|
@@ -45,6 +45,7 @@ module ActiveRecord
|
|
45
45
|
include Singleton
|
46
46
|
|
47
47
|
class << self
|
48
|
+
|
48
49
|
def callbacks # :nodoc:
|
49
50
|
(self.public_instance_methods - ActiveRecord::Reactor.public_instance_methods).grep(/\A(before|around|after)_.+/)
|
50
51
|
end
|
@@ -55,12 +56,22 @@ module ActiveRecord
|
|
55
56
|
|
56
57
|
# Stops all reactions while inside the (required) block.
|
57
58
|
def scram(&block)
|
58
|
-
previously_scrammed =
|
59
|
-
|
59
|
+
previously_scrammed = nil
|
60
|
+
mutex.synchronize do
|
61
|
+
previously_scrammed = @scrammed
|
62
|
+
@scrammed = true
|
63
|
+
end
|
60
64
|
yield
|
61
65
|
ensure
|
62
|
-
@scrammed = previously_scrammed
|
66
|
+
mutex.synchronize { @scrammed = previously_scrammed }
|
63
67
|
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def mutex
|
72
|
+
@mutex ||= Mutex.new
|
73
|
+
end
|
74
|
+
|
64
75
|
end
|
65
76
|
end
|
66
77
|
|
data/lib/activerecord-reactor.rb
CHANGED
@@ -3,6 +3,5 @@ require_relative 'active_record/reactor'
|
|
3
3
|
require_relative 'active_record/reactor/callbacks'
|
4
4
|
require_relative 'active_record/reactor/version'
|
5
5
|
|
6
|
-
ActiveRecord::Base.
|
7
|
-
|
8
|
-
end
|
6
|
+
ActiveRecord::Base.include ActiveRecord::Reactor::Callbacks
|
7
|
+
|
data/test/cases/reactor_test.rb
CHANGED
@@ -26,10 +26,32 @@ class ReactorTest < ActiveSupport::TestCase
|
|
26
26
|
|
27
27
|
test 'Scrammed reactors do not react' do
|
28
28
|
FruitReactor.scram do
|
29
|
-
|
30
|
-
|
29
|
+
Banana.create(color: 'blue')
|
30
|
+
Cherry.create(color: 'red')
|
31
31
|
end
|
32
32
|
assert_empty FruitReactor.calls
|
33
33
|
assert_equal false, FruitReactor.scrammed?
|
34
34
|
end
|
35
|
+
|
36
|
+
test 'Subclasses have their own mutex' do
|
37
|
+
fruit_mutex = FruitReactor.send(:mutex)
|
38
|
+
peel_mutex = PeelReactor.send(:mutex)
|
39
|
+
assert_kind_of Mutex, fruit_mutex
|
40
|
+
assert_kind_of Mutex, peel_mutex
|
41
|
+
assert_not_equal fruit_mutex.object_id, peel_mutex.object_id
|
42
|
+
end
|
43
|
+
|
44
|
+
test 'Threading' do
|
45
|
+
threads = 5.times.collect do
|
46
|
+
Thread.new do
|
47
|
+
100_000.times do
|
48
|
+
FruitReactor.scram do
|
49
|
+
#
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
threads.each(&:join)
|
55
|
+
assert_equal false, FruitReactor.scrammed?
|
56
|
+
end
|
35
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-reactor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Grosser
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 7.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 7.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,7 +73,6 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- CHANGELOG
|
77
76
|
- MIT-LICENSE
|
78
77
|
- README.md
|
79
78
|
- Rakefile
|
@@ -93,7 +92,7 @@ files:
|
|
93
92
|
homepage: https://github.com/mtgrosser/activerecord-reactor
|
94
93
|
licenses: []
|
95
94
|
metadata: {}
|
96
|
-
post_install_message:
|
95
|
+
post_install_message:
|
97
96
|
rdoc_options: []
|
98
97
|
require_paths:
|
99
98
|
- lib
|
@@ -101,16 +100,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
100
|
requirements:
|
102
101
|
- - ">="
|
103
102
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
103
|
+
version: '0'
|
105
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
105
|
requirements:
|
107
106
|
- - ">="
|
108
107
|
- !ruby/object:Gem::Version
|
109
108
|
version: '0'
|
110
109
|
requirements: []
|
111
|
-
|
112
|
-
|
113
|
-
signing_key:
|
110
|
+
rubygems_version: 3.3.26
|
111
|
+
signing_key:
|
114
112
|
specification_version: 4
|
115
113
|
summary: Controlled reactions on ActiveRecord callbacks
|
116
114
|
test_files:
|
data/CHANGELOG
DELETED