activerecord-reactor 1.4.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5af5bf8ba7a0f8015fc807306996064bb5aae71e
4
- data.tar.gz: 079bd7c5e25c9aec35736ef010e3a281108723f2
2
+ SHA256:
3
+ metadata.gz: '08acc980dafea9ccf50b1e401436fdd905047333f84fc5cd03e642b625ff4bc8'
4
+ data.tar.gz: 0c269b9b2e506f7677fc8b41688a35b6fac37913f585d5ece47d06b92fd30d6d
5
5
  SHA512:
6
- metadata.gz: 8f155aefc6aa6f0ccfe029604237d97d558759fe9aad71522bcd87181329a8c8a2d0d8dc98b666af81ff93de9ea4dc1ae673a0a63c4fc8fca8e944edda87f3e5
7
- data.tar.gz: 92b05135c408e08a6a10bf19a95bb549d1f3b04be618d35222b5ca6e8870a275239470db0a4b15a4407d5b2db7b5140946da2d731b1e7ba670099d796bcbfb87
6
+ metadata.gz: 672f47d9f4eb5c756e09fb62c4bd57ab5ca2e78aac7b44d089bc0dd0ee7b7d6831caba05e82810161331fccf6ec8631286bc0abd275a84a4b9fb31bbb2dbddbd
7
+ data.tar.gz: f0873bcdf343938b22c25df58a57f98023f5d0d9a8a080e7582a9dad89aeb0b40e3c8607fa613cffe659e5534dde5bab0c93967ef72501fe9917bde526ed2473
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  class Reactor
3
- VERSION = '1.4.0'
3
+ VERSION = '1.6.0'
4
4
  end
5
5
  end
@@ -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 = @scrammed
59
- @scrammed = true
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
 
@@ -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.class_eval do
7
- include ActiveRecord::Reactor::Callbacks
8
- end
6
+ ActiveRecord::Base.include ActiveRecord::Reactor::Callbacks
7
+
@@ -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
- b = Banana.create(color: 'blue')
30
- c = Cherry.create(color: 'red')
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.0
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: 2018-04-16 00:00:00.000000000 Z
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: 5.2.0
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: 5.2.0
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: 2.0.0
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
- rubyforge_project:
112
- rubygems_version: 2.5.1
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
@@ -1,4 +0,0 @@
1
- 1.0.1
2
-
3
- Remove incorrect class definitions
4
- Update docs