eventsimple 1.5.6 → 1.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f628774141b53a531e1c58965e543316ce8a71560dc91fd5bd9762f7fab8a833
4
- data.tar.gz: 2f29fa6197efc44d9f9a20e300046a254361c886284f0d533cb63ad15ee8e91b
3
+ metadata.gz: 6c0e02b9b7b00100a888407cfd7dfb4422f468fb2ee7807d0a174996be66d12d
4
+ data.tar.gz: 89f100e610caeff2b34d2a0a67b934e701845548007bacbef0d814f221f7c7bc
5
5
  SHA512:
6
- metadata.gz: 490f7a05851f319cbec0b1e4327e15405d8336a868087fd5f321c9c5f6660fac92246be8bff1553d393899ee3e259fb420ad5827e6dbce701fe3a59793defd2f
7
- data.tar.gz: 63ca6aef81fae8ec3d0a811e796c9b979810e86d02115a8dcda34e18b3a290bba22d096d2537d269044320098f30db30bb3e42e94a31deafdf18e2018de50539
6
+ metadata.gz: a2cd191a5940f13eaa79cd75b2cf4285a52f34e35b5b463ac568ceebca6c2f2c804b99c329bb622c4dd8e368a6a7bfe671cd248f4a62493aa59a81de11b9f4cc
7
+ data.tar.gz: 80a78a2b932b5c3784432bf66a731f169ac70f161bc1330d63d70ad642cc005eea3f8fc640416121a7bb8f21f1de65cf68062686843ac39ff3dc0898c1200a49
data/.rubocop.yml CHANGED
@@ -1,18 +1,95 @@
1
- inherit_gem:
2
- ws-style:
3
- - default.yml
1
+ inherit_mode:
2
+ merge:
3
+ - Exclude
4
+
5
+ plugins:
6
+ - rubocop-performance
7
+ - rubocop-rails
8
+ - rubocop-rspec
9
+ - rubocop-rspec_rails
10
+ - rubocop-factory_bot
4
11
 
5
12
  AllCops:
13
+ NewCops: disable
6
14
  Exclude:
7
15
  - "spec/dummy/bin/**/*"
8
16
  - "spec/dummy/db/migrate/**/*"
9
17
  - "spec/dummy/db/schema.rb"
10
18
  - "spec/dummy/log/**/*"
11
19
  - "spec/dummy/tmp/**/*"
12
- TargetRubyVersion: 3.2
20
+
21
+ Layout/ArgumentAlignment:
22
+ Enabled: true
23
+ EnforcedStyle: with_fixed_indentation
24
+
25
+ Layout/DotPosition:
26
+ EnforcedStyle: trailing
27
+
28
+ Layout/LineLength:
29
+ Enabled: false
30
+
31
+ Metrics/AbcSize:
32
+ Enabled: false
33
+
34
+ Metrics/CyclomaticComplexity:
35
+ Enabled: false
36
+
37
+ Metrics/MethodLength:
38
+ Enabled: false
39
+
40
+ Metrics/ModuleLength:
41
+ Enabled: false
42
+
43
+ Metrics/PerceivedComplexity:
44
+ Enabled: false
13
45
 
14
46
  Rails/SkipsModelValidations:
15
47
  Enabled: false
16
48
 
17
- Vendor/StrictDryStruct:
49
+ RSpec/AnyInstance:
50
+ Enabled: false
51
+
52
+ RSpec/ExampleLength:
53
+ Enabled: false
54
+
55
+ RSpec/IndexedLet:
56
+ Enabled: false
57
+
58
+ RSpec/LetSetup:
18
59
  Enabled: false
60
+
61
+ RSpec/MessageSpies:
62
+ Enabled: false
63
+
64
+ RSpec/MultipleMemoizedHelpers:
65
+ Enabled: false
66
+
67
+ RSpec/MultipleExpectations:
68
+ Enabled: false
69
+
70
+ RSpec/NamedSubject:
71
+ Enabled: false
72
+
73
+ RSpec/NestedGroups:
74
+ Enabled: false
75
+
76
+ Style/BlockDelimiters:
77
+ Enabled: false
78
+
79
+ Style/Documentation:
80
+ Enabled: false
81
+
82
+ Style/IfUnlessModifier:
83
+ Enabled: false
84
+
85
+ Style/StringLiterals:
86
+ Enabled: false
87
+
88
+ Style/TrailingCommaInArguments:
89
+ EnforcedStyleForMultiline: comma
90
+
91
+ Style/TrailingCommaInArrayLiteral:
92
+ EnforcedStyleForMultiline: comma
93
+
94
+ Style/TrailingCommaInHashLiteral:
95
+ EnforcedStyleForMultiline: comma
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.3
1
+ 3.4.4
data/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 1.7.0 - 2025-06-27
10
+ ### Changed
11
+ - Verify optimistic locking column exists
12
+
13
+ ## 1.6.0 - 2025-06-27
14
+ ### Changed
15
+ - Remove ws-style as we no longer publish it to rubygems
16
+
17
+ ## 1.5.7 - 2025-04-04
18
+ ### Changed
19
+ - Initializiation error on db:schema:load is fixed
20
+
9
21
  ## 1.5.6 - 2025-01-02
10
22
  ### Changed
11
23
  - inheritance column setter needs to be a string
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eventsimple (1.5.6)
4
+ eventsimple (1.7.0)
5
5
  concurrent-ruby (>= 1.2.3)
6
6
  dry-struct (~> 1.6)
7
7
  dry-types (~> 1.7)
@@ -13,29 +13,29 @@ PATH
13
13
  GEM
14
14
  remote: https://rubygems.org/
15
15
  specs:
16
- actioncable (8.0.0)
17
- actionpack (= 8.0.0)
18
- activesupport (= 8.0.0)
16
+ actioncable (8.0.2)
17
+ actionpack (= 8.0.2)
18
+ activesupport (= 8.0.2)
19
19
  nio4r (~> 2.0)
20
20
  websocket-driver (>= 0.6.1)
21
21
  zeitwerk (~> 2.6)
22
- actionmailbox (8.0.0)
23
- actionpack (= 8.0.0)
24
- activejob (= 8.0.0)
25
- activerecord (= 8.0.0)
26
- activestorage (= 8.0.0)
27
- activesupport (= 8.0.0)
22
+ actionmailbox (8.0.2)
23
+ actionpack (= 8.0.2)
24
+ activejob (= 8.0.2)
25
+ activerecord (= 8.0.2)
26
+ activestorage (= 8.0.2)
27
+ activesupport (= 8.0.2)
28
28
  mail (>= 2.8.0)
29
- actionmailer (8.0.0)
30
- actionpack (= 8.0.0)
31
- actionview (= 8.0.0)
32
- activejob (= 8.0.0)
33
- activesupport (= 8.0.0)
29
+ actionmailer (8.0.2)
30
+ actionpack (= 8.0.2)
31
+ actionview (= 8.0.2)
32
+ activejob (= 8.0.2)
33
+ activesupport (= 8.0.2)
34
34
  mail (>= 2.8.0)
35
35
  rails-dom-testing (~> 2.2)
36
- actionpack (8.0.0)
37
- actionview (= 8.0.0)
38
- activesupport (= 8.0.0)
36
+ actionpack (8.0.2)
37
+ actionview (= 8.0.2)
38
+ activesupport (= 8.0.2)
39
39
  nokogiri (>= 1.8.5)
40
40
  rack (>= 2.2.4)
41
41
  rack-session (>= 1.0.1)
@@ -43,35 +43,35 @@ GEM
43
43
  rails-dom-testing (~> 2.2)
44
44
  rails-html-sanitizer (~> 1.6)
45
45
  useragent (~> 0.16)
46
- actiontext (8.0.0)
47
- actionpack (= 8.0.0)
48
- activerecord (= 8.0.0)
49
- activestorage (= 8.0.0)
50
- activesupport (= 8.0.0)
46
+ actiontext (8.0.2)
47
+ actionpack (= 8.0.2)
48
+ activerecord (= 8.0.2)
49
+ activestorage (= 8.0.2)
50
+ activesupport (= 8.0.2)
51
51
  globalid (>= 0.6.0)
52
52
  nokogiri (>= 1.8.5)
53
- actionview (8.0.0)
54
- activesupport (= 8.0.0)
53
+ actionview (8.0.2)
54
+ activesupport (= 8.0.2)
55
55
  builder (~> 3.1)
56
56
  erubi (~> 1.11)
57
57
  rails-dom-testing (~> 2.2)
58
58
  rails-html-sanitizer (~> 1.6)
59
- activejob (8.0.0)
60
- activesupport (= 8.0.0)
59
+ activejob (8.0.2)
60
+ activesupport (= 8.0.2)
61
61
  globalid (>= 0.3.6)
62
- activemodel (8.0.0)
63
- activesupport (= 8.0.0)
64
- activerecord (8.0.0)
65
- activemodel (= 8.0.0)
66
- activesupport (= 8.0.0)
62
+ activemodel (8.0.2)
63
+ activesupport (= 8.0.2)
64
+ activerecord (8.0.2)
65
+ activemodel (= 8.0.2)
66
+ activesupport (= 8.0.2)
67
67
  timeout (>= 0.4.0)
68
- activestorage (8.0.0)
69
- actionpack (= 8.0.0)
70
- activejob (= 8.0.0)
71
- activerecord (= 8.0.0)
72
- activesupport (= 8.0.0)
68
+ activestorage (8.0.2)
69
+ actionpack (= 8.0.2)
70
+ activejob (= 8.0.2)
71
+ activerecord (= 8.0.2)
72
+ activesupport (= 8.0.2)
73
73
  marcel (~> 1.0)
74
- activesupport (8.0.0)
74
+ activesupport (8.0.2)
75
75
  base64
76
76
  benchmark (>= 0.3)
77
77
  bigdecimal
@@ -86,10 +86,10 @@ GEM
86
86
  uri (>= 0.13.1)
87
87
  addressable (2.8.7)
88
88
  public_suffix (>= 2.0.2, < 7.0)
89
- ast (2.4.2)
90
- base64 (0.2.0)
91
- benchmark (0.4.0)
92
- bigdecimal (3.1.8)
89
+ ast (2.4.3)
90
+ base64 (0.3.0)
91
+ benchmark (0.4.1)
92
+ bigdecimal (3.2.2)
93
93
  builder (3.3.0)
94
94
  bundle-audit (0.1.0)
95
95
  bundler-audit
@@ -97,58 +97,62 @@ GEM
97
97
  bundler (>= 1.2.0, < 3)
98
98
  thor (~> 1.0)
99
99
  coderay (1.1.3)
100
- concurrent-ruby (1.3.4)
101
- connection_pool (2.4.1)
100
+ concurrent-ruby (1.3.5)
101
+ connection_pool (2.5.3)
102
102
  crass (1.0.6)
103
103
  date (3.4.1)
104
- diff-lcs (1.5.1)
105
- drb (2.2.1)
106
- dry-core (1.0.2)
104
+ diff-lcs (1.6.2)
105
+ drb (2.2.3)
106
+ dry-core (1.1.0)
107
107
  concurrent-ruby (~> 1.0)
108
108
  logger
109
109
  zeitwerk (~> 2.6)
110
- dry-inflector (1.1.0)
111
- dry-logic (1.5.0)
110
+ dry-inflector (1.2.0)
111
+ dry-logic (1.6.0)
112
+ bigdecimal
112
113
  concurrent-ruby (~> 1.0)
113
- dry-core (~> 1.0, < 2)
114
+ dry-core (~> 1.1)
114
115
  zeitwerk (~> 2.6)
115
- dry-struct (1.6.0)
116
- dry-core (~> 1.0, < 2)
117
- dry-types (>= 1.7, < 2)
116
+ dry-struct (1.8.0)
117
+ dry-core (~> 1.1)
118
+ dry-types (~> 1.8, >= 1.8.2)
118
119
  ice_nine (~> 0.11)
119
120
  zeitwerk (~> 2.6)
120
- dry-types (1.7.2)
121
+ dry-types (1.8.3)
121
122
  bigdecimal (~> 3.0)
122
123
  concurrent-ruby (~> 1.0)
123
124
  dry-core (~> 1.0)
124
125
  dry-inflector (~> 1.0)
125
126
  dry-logic (~> 1.4)
126
127
  zeitwerk (~> 2.6)
127
- erubi (1.13.0)
128
- factory_bot (6.5.0)
129
- activesupport (>= 5.0.0)
130
- factory_bot_rails (6.4.4)
128
+ erb (5.0.1)
129
+ erubi (1.13.1)
130
+ factory_bot (6.5.4)
131
+ activesupport (>= 6.1.0)
132
+ factory_bot_rails (6.5.0)
131
133
  factory_bot (~> 6.5)
132
- railties (>= 5.0.0)
133
- ffi (1.17.0-arm64-darwin)
134
- ffi (1.17.0-x86_64-linux-gnu)
134
+ railties (>= 6.1.0)
135
+ ffi (1.17.2-arm64-darwin)
136
+ ffi (1.17.2-x86_64-linux-gnu)
135
137
  formatador (1.1.0)
136
138
  fuubar (2.5.1)
137
139
  rspec-core (~> 3.0)
138
140
  ruby-progressbar (~> 1.4)
139
- git (2.3.3)
141
+ git (3.1.0)
140
142
  activesupport (>= 5.0)
141
143
  addressable (~> 2.8)
142
- process_executer (~> 1.1)
143
- rchardet (~> 1.8)
144
+ process_executer (~> 1.3)
145
+ rchardet (~> 1.9)
144
146
  globalid (1.2.1)
145
147
  activesupport (>= 6.1)
146
- guard (2.19.0)
148
+ guard (2.19.1)
147
149
  formatador (>= 0.2.4)
148
150
  listen (>= 2.7, < 4.0)
151
+ logger (~> 1.6)
149
152
  lumberjack (>= 1.0.12, < 2.0)
150
153
  nenv (~> 0.1)
151
154
  notiffany (~> 0.0)
155
+ ostruct (~> 0.6)
152
156
  pry (>= 0.13.0)
153
157
  shellany (~> 0.0)
154
158
  thor (>= 0.18.1)
@@ -157,21 +161,22 @@ GEM
157
161
  guard (~> 2.1)
158
162
  guard-compat (~> 1.1)
159
163
  rspec (>= 2.99.0, < 4.0)
160
- i18n (1.14.6)
164
+ i18n (1.14.7)
161
165
  concurrent-ruby (~> 1.0)
162
166
  ice_nine (0.11.2)
163
167
  io-console (0.8.0)
164
- irb (1.14.1)
168
+ irb (1.15.2)
169
+ pp (>= 0.6.0)
165
170
  rdoc (>= 4.0.0)
166
171
  reline (>= 0.4.2)
167
- json (2.9.0)
168
- language_server-protocol (3.17.0.3)
172
+ json (2.12.2)
173
+ language_server-protocol (3.17.0.5)
169
174
  lint_roller (1.1.0)
170
175
  listen (3.9.0)
171
176
  rb-fsevent (~> 0.10, >= 0.10.3)
172
177
  rb-inotify (~> 0.9, >= 0.9.10)
173
- logger (1.6.2)
174
- loofah (2.23.1)
178
+ logger (1.7.0)
179
+ loofah (2.24.1)
175
180
  crass (~> 1.0.2)
176
181
  nokogiri (>= 1.12.0)
177
182
  lumberjack (1.2.10)
@@ -183,187 +188,182 @@ GEM
183
188
  marcel (1.0.4)
184
189
  method_source (1.1.0)
185
190
  mini_mime (1.1.5)
186
- minitest (5.25.4)
191
+ minitest (5.25.5)
187
192
  nenv (0.3.0)
188
- net-imap (0.5.4)
193
+ net-imap (0.5.9)
189
194
  date
190
195
  net-protocol
191
196
  net-pop (0.1.2)
192
197
  net-protocol
193
198
  net-protocol (0.2.2)
194
199
  timeout
195
- net-smtp (0.5.0)
200
+ net-smtp (0.5.1)
196
201
  net-protocol
197
202
  nio4r (2.7.4)
198
- nokogiri (1.16.8-arm64-darwin)
203
+ nokogiri (1.18.8-arm64-darwin)
199
204
  racc (~> 1.4)
200
- nokogiri (1.16.8-x86_64-linux)
205
+ nokogiri (1.18.8-x86_64-linux-gnu)
201
206
  racc (~> 1.4)
202
207
  notiffany (0.1.3)
203
208
  nenv (~> 0.1)
204
209
  shellany (~> 0.0)
205
- parallel (1.26.3)
210
+ ostruct (0.6.2)
211
+ parallel (1.27.0)
206
212
  parse_a_changelog (1.3.3)
207
213
  treetop (~> 1.6)
208
- parser (3.3.6.0)
214
+ parser (3.3.8.0)
209
215
  ast (~> 2.4.1)
210
216
  racc
211
217
  pg (1.5.9)
212
218
  polyglot (0.3.5)
213
- process_executer (1.2.0)
214
- pry (0.15.0)
219
+ pp (0.6.2)
220
+ prettyprint
221
+ prettyprint (0.2.0)
222
+ prism (1.4.0)
223
+ process_executer (1.3.0)
224
+ pry (0.15.2)
215
225
  coderay (~> 1.1)
216
226
  method_source (~> 1.0)
217
- psych (5.2.1)
227
+ psych (5.2.6)
218
228
  date
219
229
  stringio
220
- public_suffix (6.0.1)
221
- puma (6.5.0)
230
+ public_suffix (6.0.2)
231
+ puma (6.6.0)
222
232
  nio4r (~> 2.0)
223
233
  racc (1.8.1)
224
- rack (3.1.8)
225
- rack-session (2.0.0)
234
+ rack (3.1.16)
235
+ rack-session (2.1.1)
236
+ base64 (>= 0.1.0)
226
237
  rack (>= 3.0.0)
227
- rack-test (2.1.0)
238
+ rack-test (2.2.0)
228
239
  rack (>= 1.3)
229
240
  rackup (2.2.1)
230
241
  rack (>= 3)
231
- rails (8.0.0)
232
- actioncable (= 8.0.0)
233
- actionmailbox (= 8.0.0)
234
- actionmailer (= 8.0.0)
235
- actionpack (= 8.0.0)
236
- actiontext (= 8.0.0)
237
- actionview (= 8.0.0)
238
- activejob (= 8.0.0)
239
- activemodel (= 8.0.0)
240
- activerecord (= 8.0.0)
241
- activestorage (= 8.0.0)
242
- activesupport (= 8.0.0)
242
+ rails (8.0.2)
243
+ actioncable (= 8.0.2)
244
+ actionmailbox (= 8.0.2)
245
+ actionmailer (= 8.0.2)
246
+ actionpack (= 8.0.2)
247
+ actiontext (= 8.0.2)
248
+ actionview (= 8.0.2)
249
+ activejob (= 8.0.2)
250
+ activemodel (= 8.0.2)
251
+ activerecord (= 8.0.2)
252
+ activestorage (= 8.0.2)
253
+ activesupport (= 8.0.2)
243
254
  bundler (>= 1.15.0)
244
- railties (= 8.0.0)
245
- rails-dom-testing (2.2.0)
255
+ railties (= 8.0.2)
256
+ rails-dom-testing (2.3.0)
246
257
  activesupport (>= 5.0.0)
247
258
  minitest
248
259
  nokogiri (>= 1.6)
249
- rails-html-sanitizer (1.6.1)
260
+ rails-html-sanitizer (1.6.2)
250
261
  loofah (~> 2.21)
251
262
  nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
252
- railties (8.0.0)
253
- actionpack (= 8.0.0)
254
- activesupport (= 8.0.0)
263
+ railties (8.0.2)
264
+ actionpack (= 8.0.2)
265
+ activesupport (= 8.0.2)
255
266
  irb (~> 1.13)
256
267
  rackup (>= 1.0.0)
257
268
  rake (>= 12.2)
258
269
  thor (~> 1.0, >= 1.2.2)
259
270
  zeitwerk (~> 2.6)
260
271
  rainbow (3.1.1)
261
- rake (13.2.1)
272
+ rake (13.3.0)
262
273
  rb-fsevent (0.11.2)
263
274
  rb-inotify (0.11.1)
264
275
  ffi (~> 1.0)
265
- rchardet (1.8.0)
266
- rdoc (6.8.1)
276
+ rchardet (1.9.0)
277
+ rdoc (6.14.1)
278
+ erb
267
279
  psych (>= 4.0.0)
268
- regexp_parser (2.9.3)
269
- reline (0.5.12)
280
+ regexp_parser (2.10.0)
281
+ reline (0.6.1)
270
282
  io-console (~> 0.5)
271
283
  retriable (3.1.2)
272
- rspec (3.13.0)
284
+ rspec (3.13.1)
273
285
  rspec-core (~> 3.13.0)
274
286
  rspec-expectations (~> 3.13.0)
275
287
  rspec-mocks (~> 3.13.0)
276
- rspec-core (3.13.2)
288
+ rspec-core (3.13.5)
277
289
  rspec-support (~> 3.13.0)
278
- rspec-expectations (3.13.3)
290
+ rspec-expectations (3.13.5)
279
291
  diff-lcs (>= 1.2.0, < 2.0)
280
292
  rspec-support (~> 3.13.0)
281
- rspec-mocks (3.13.2)
293
+ rspec-mocks (3.13.5)
282
294
  diff-lcs (>= 1.2.0, < 2.0)
283
295
  rspec-support (~> 3.13.0)
284
- rspec-rails (7.1.0)
285
- actionpack (>= 7.0)
286
- activesupport (>= 7.0)
287
- railties (>= 7.0)
296
+ rspec-rails (8.0.1)
297
+ actionpack (>= 7.2)
298
+ activesupport (>= 7.2)
299
+ railties (>= 7.2)
288
300
  rspec-core (~> 3.13)
289
301
  rspec-expectations (~> 3.13)
290
302
  rspec-mocks (~> 3.13)
291
303
  rspec-support (~> 3.13)
292
- rspec-support (3.13.2)
293
- rubocop (1.69.1)
304
+ rspec-support (3.13.4)
305
+ rubocop (1.77.0)
294
306
  json (~> 2.3)
295
- language_server-protocol (>= 3.17.0)
307
+ language_server-protocol (~> 3.17.0.2)
308
+ lint_roller (~> 1.1.0)
296
309
  parallel (~> 1.10)
297
310
  parser (>= 3.3.0.2)
298
311
  rainbow (>= 2.2.2, < 4.0)
299
312
  regexp_parser (>= 2.9.3, < 3.0)
300
- rubocop-ast (>= 1.36.2, < 2.0)
313
+ rubocop-ast (>= 1.45.1, < 2.0)
301
314
  ruby-progressbar (~> 1.7)
302
315
  unicode-display_width (>= 2.4.0, < 4.0)
303
- rubocop-ast (1.36.2)
304
- parser (>= 3.3.1.0)
305
- rubocop-factory_bot (2.26.1)
306
- rubocop (~> 1.61)
307
- rubocop-performance (1.22.1)
308
- rubocop (>= 1.48.1, < 2.0)
309
- rubocop-ast (>= 1.31.1, < 2.0)
310
- rubocop-rails (2.26.2)
316
+ rubocop-ast (1.45.1)
317
+ parser (>= 3.3.7.2)
318
+ prism (~> 1.4)
319
+ rubocop-factory_bot (2.27.1)
320
+ lint_roller (~> 1.1)
321
+ rubocop (~> 1.72, >= 1.72.1)
322
+ rubocop-performance (1.25.0)
323
+ lint_roller (~> 1.1)
324
+ rubocop (>= 1.75.0, < 2.0)
325
+ rubocop-ast (>= 1.38.0, < 2.0)
326
+ rubocop-rails (2.32.0)
311
327
  activesupport (>= 4.2.0)
328
+ lint_roller (~> 1.1)
312
329
  rack (>= 1.1)
313
- rubocop (>= 1.52.0, < 2.0)
314
- rubocop-ast (>= 1.31.1, < 2.0)
315
- rubocop-rspec (3.2.0)
316
- rubocop (~> 1.61)
317
- rubocop-vendor (0.13.2)
318
- rubocop
330
+ rubocop (>= 1.75.0, < 2.0)
331
+ rubocop-ast (>= 1.44.0, < 2.0)
332
+ rubocop-rspec (3.6.0)
333
+ lint_roller (~> 1.1)
334
+ rubocop (~> 1.72, >= 1.72.1)
335
+ rubocop-rspec_rails (2.31.0)
336
+ lint_roller (~> 1.1)
337
+ rubocop (~> 1.72, >= 1.72.1)
338
+ rubocop-rspec (~> 3.5)
319
339
  ruby-progressbar (1.13.0)
320
- securerandom (0.4.0)
340
+ securerandom (0.4.1)
321
341
  shellany (0.0.1)
322
- standard (1.35.0.1)
323
- language_server-protocol (~> 3.17.0.2)
324
- lint_roller (~> 1.0)
325
- rubocop (~> 1.62)
326
- standard-custom (~> 1.0.0)
327
- standard-performance (~> 1.3)
328
- standard-custom (1.0.2)
329
- lint_roller (~> 1.0)
330
- rubocop (~> 1.50)
331
- standard-performance (1.5.0)
332
- lint_roller (~> 1.1)
333
- rubocop-performance (~> 1.22.0)
334
- standard-rails (1.2.0)
335
- lint_roller (~> 1.0)
336
- rubocop-rails (~> 2.26.0)
337
- stringio (3.1.2)
342
+ stringio (3.1.7)
338
343
  thor (1.3.2)
339
344
  timeout (0.4.3)
340
- treetop (1.6.12)
345
+ treetop (1.6.14)
341
346
  polyglot (~> 0.3)
342
347
  tzinfo (2.0.6)
343
348
  concurrent-ruby (~> 1.0)
344
- unicode-display_width (3.1.2)
349
+ unicode-display_width (3.1.4)
345
350
  unicode-emoji (~> 4.0, >= 4.0.4)
346
351
  unicode-emoji (4.0.4)
347
- uri (1.0.2)
352
+ uri (1.0.3)
348
353
  useragent (0.16.11)
349
- websocket-driver (0.7.6)
354
+ websocket-driver (0.8.0)
355
+ base64
350
356
  websocket-extensions (>= 0.1.0)
351
357
  websocket-extensions (0.1.5)
352
- with_advisory_lock (5.1.0)
358
+ with_advisory_lock (5.3.0)
353
359
  activerecord (>= 6.1)
354
360
  zeitwerk (>= 2.6)
355
- ws-style (7.6.1)
356
- rubocop-factory_bot (>= 2.26.0)
357
- rubocop-rspec (>= 3.0.0)
358
- rubocop-vendor (>= 0.11)
359
- standard (>= 1.30.1)
360
- standard-custom (>= 1.0.2)
361
- standard-rails (>= 0.1.0)
362
- zeitwerk (2.7.1)
361
+ zeitwerk (2.7.3)
363
362
 
364
363
  PLATFORMS
365
364
  arm64-darwin-22
366
365
  arm64-darwin-23
366
+ arm64-darwin-24
367
367
  x86_64-linux
368
368
 
369
369
  DEPENDENCIES
@@ -377,7 +377,12 @@ DEPENDENCIES
377
377
  pry
378
378
  puma
379
379
  rspec-rails
380
- ws-style
380
+ rubocop
381
+ rubocop-factory_bot
382
+ rubocop-performance
383
+ rubocop-rails
384
+ rubocop-rspec
385
+ rubocop-rspec_rails
381
386
 
382
387
  BUNDLED WITH
383
- 2.3.26
388
+ 2.6.9
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A sample Guardfile
2
4
  # More info at https://github.com/guard/guard#readme
3
5
 
data/README.md CHANGED
@@ -281,9 +281,6 @@ For many use cases, async reactors are sufficient to handle workflows like makin
281
281
 
282
282
  The current implementation leverages a single advisory lock to guarantee write order. This will impact write throughput on the model. On a db.rg6.large Aurora instance for example, write throughput to the table is ~300 events per second.
283
283
 
284
- For an explaination of why an advisory lock is required:
285
- https://github.com/pawelpacana/account-basics
286
-
287
284
  ### Setup an ordered outbox
288
285
 
289
286
  Generate migration to setup the outbox cursor table. This table is used to track cursor positions.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class ApplicationController < ActionController::Base
3
5
  helper_method :event_class_names
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class EntitiesController < ApplicationController
3
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
4
5
  def show
5
6
  @model_name = params[:model_name]
6
7
  @model_class = event_classes.find { |d| d.name == @model_name }
7
8
  @aggregate_id = params[:id]
8
9
  @event_id = params[:e] || -1
9
- @tab_id = (params[:t] == 'event') ? 'event' : 'entity'
10
+ @tab_id = params[:t] == 'event' ? 'event' : 'entity'
10
11
 
11
12
  filter_columns = @model_class._filter_attributes
12
13
  params_filters = params.permit(filters: {})[:filters] || {}
13
- @filters = filter_columns.to_h { |column| [column, params_filters[column]] }
14
+ @filters = filter_columns.index_with { |column| params_filters[column] }
14
15
 
15
16
  primary_key = @model_class.event_class._aggregate_id
16
17
  @entity = @model_class.find_by!(primary_key => @aggregate_id)
@@ -28,7 +29,6 @@ module Eventsimple
28
29
  @error_message = e.message
29
30
  render html: '', layout: true
30
31
  end
31
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
32
32
 
33
33
  private
34
34
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class HomeController < ApplicationController
3
5
  def index; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class ModelsController < ApplicationController
3
5
  def show
@@ -17,7 +19,7 @@ module Eventsimple
17
19
  filter_columns = model_class._filter_attributes
18
20
 
19
21
  params_filters = params.permit(filters: {})[:filters] || {}
20
- @filters = filter_columns.to_h { |column| [column, params_filters[column]] }
22
+ @filters = filter_columns.index_with { |column| params_filters[column] }
21
23
 
22
24
  return model_event_class unless @filters.any?
23
25
 
@@ -25,6 +27,7 @@ module Eventsimple
25
27
  model_event_class = model_event_class.joins(aggregate_class_symbol)
26
28
  @filters.each do |key, value|
27
29
  next if value.blank?
30
+
28
31
  key = model_event_class._aggregate_id if key == :aggregate_id
29
32
  model_event_class = model_event_class.where({ aggregate_class_symbol => { key => value } })
30
33
  end
data/catalog-info.yaml CHANGED
@@ -9,3 +9,4 @@ metadata:
9
9
  spec:
10
10
  type: library
11
11
  lifecycle: production
12
+ owner: engineering
data/config/routes.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Eventsimple::Engine.routes.draw do
2
4
  root to: 'home#index'
3
5
 
data/eventsimple.gemspec CHANGED
@@ -23,13 +23,13 @@ Gem::Specification.new do |spec|
23
23
  end
24
24
  spec.require_paths = ['lib']
25
25
 
26
+ spec.add_runtime_dependency 'concurrent-ruby', '>= 1.2.3'
26
27
  spec.add_runtime_dependency 'dry-struct', '~> 1.6'
27
28
  spec.add_runtime_dependency 'dry-types', '~> 1.7'
28
29
  spec.add_runtime_dependency 'pg', '~> 1.4'
29
30
  spec.add_runtime_dependency 'rails', '>= 7.0', '< 9.0'
30
31
  spec.add_runtime_dependency 'retriable', '~> 3.1'
31
32
  spec.add_runtime_dependency 'with_advisory_lock', '>= 5.1'
32
- spec.add_runtime_dependency 'concurrent-ruby', '>= 1.2.3'
33
33
 
34
34
  spec.add_development_dependency 'bundle-audit'
35
35
  spec.add_development_dependency 'fuubar'
@@ -39,5 +39,10 @@ Gem::Specification.new do |spec|
39
39
  spec.add_development_dependency 'pry'
40
40
  spec.add_development_dependency 'puma'
41
41
  spec.add_development_dependency 'rspec-rails'
42
- spec.add_development_dependency 'ws-style'
42
+ spec.add_development_dependency 'rubocop'
43
+ spec.add_development_dependency 'rubocop-factory_bot'
44
+ spec.add_development_dependency 'rubocop-performance'
45
+ spec.add_development_dependency 'rubocop-rails'
46
+ spec.add_development_dependency 'rubocop-rspec'
47
+ spec.add_development_dependency 'rubocop-rspec_rails'
43
48
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_job/arguments'
2
4
 
3
5
  module ActiveJob
4
6
  module Arguments
5
- extend self
7
+ extend self # rubocop:disable Style/ModuleFunction
6
8
 
7
9
  def deserialize_global_id(hash)
8
10
  gid = GlobalID.parse(hash[GLOBALID_KEY])
@@ -3,11 +3,8 @@
3
3
  module Eventsimple
4
4
  class Configuration
5
5
  attr_reader :max_concurrency_retries
6
- attr_writer :metadata_klass
7
- attr_writer :parent_record_klass
8
- attr_accessor :retry_reactor_on_record_not_found
9
-
10
- attr_accessor :ui_visible_models
6
+ attr_writer :metadata_klass, :parent_record_klass
7
+ attr_accessor :retry_reactor_on_record_not_found, :ui_visible_models
11
8
 
12
9
  def initialize
13
10
  @dispatchers = []
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class Dispatcher
3
5
  def self.on(*events, sync: [], async: [])
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails'
2
4
 
3
5
  module Eventsimple
@@ -1,18 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  module Entity
3
5
  DEFAULT_IGNORE_PROPS = %w[id lock_version].freeze
4
6
 
5
7
  def event_driven_by(event_klass, aggregate_id:, filter_attributes: [])
6
- if defined?(event_klass._aggregate_id)
7
- raise ArgumentError, "aggregate_id mismatch event:#{event_klass._aggregate_id} entity:#{aggregate_id}" if aggregate_id != event_klass._aggregate_id
8
+ begin
9
+ if table_exists? && !column_names.include?(locking_column)
10
+ raise ArgumentError, "A #{locking_column} column is required to enable optimistic locking"
11
+ end
12
+
13
+ if defined?(event_klass._aggregate_id) && event_klass.table_exists? && table_exists?
14
+ raise ArgumentError, "aggregate_id mismatch event:#{event_klass._aggregate_id} entity:#{aggregate_id}" if aggregate_id != event_klass._aggregate_id
8
15
 
9
- begin
10
16
  aggregate_column_type_in_event = event_klass.column_for_attribute(:aggregate_id).type
11
17
  aggregate_column_type_in_entity = column_for_attribute(aggregate_id).type
12
18
 
13
19
  raise ArgumentError, "column type mismatch - event:#{aggregate_column_type_in_event} entity:#{aggregate_column_type_in_entity}" if aggregate_column_type_in_event != aggregate_column_type_in_entity
14
- rescue ActiveRecord::NoDatabaseError
15
20
  end
21
+ rescue ActiveRecord::NoDatabaseError
22
+ # skip checks if the database is not yet created
16
23
  end
17
24
 
18
25
  has_many :events, class_name: event_klass.name.to_s,
@@ -53,10 +60,10 @@ module Eventsimple
53
60
  was_readonly = @readonly
54
61
  @readonly = false
55
62
 
56
- if block
57
- yield self
58
- @readonly = true if was_readonly
59
- end
63
+ return unless block
64
+
65
+ yield self
66
+ @readonly = was_readonly
60
67
  end
61
68
 
62
69
  def reproject(at: nil)
@@ -1,20 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  module Event
3
5
  require 'globalid'
4
6
  include GlobalID::Identification
5
7
 
6
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
7
8
  def drives_events_for(aggregate_klass, aggregate_id:, events_namespace: nil)
8
- if defined?(aggregate_klass._aggregate_id)
9
- raise ArgumentError, "aggregate_id mismatch event:#{aggregate_id} entity:#{aggregate_klass._aggregate_id}" if aggregate_id != aggregate_klass._aggregate_id
9
+ begin
10
+ if defined?(aggregate_klass._aggregate_id) && aggregate_klass.table_exists? && table_exists?
11
+ raise ArgumentError, "aggregate_id mismatch event:#{aggregate_id} entity:#{aggregate_klass._aggregate_id}" if aggregate_id != aggregate_klass._aggregate_id
10
12
 
11
- begin
12
- aggregate_column_type_in_event = aggregate_klass.column_for_attribute(aggregate_klass._aggregate_id).type unless aggregate_klass.attribute_names.blank?
13
- aggregate_column_type_in_entity = column_for_attribute(:aggregate_id).type unless aggregate_klass.attribute_names.blank?
13
+ aggregate_column_type_in_event = aggregate_klass.column_for_attribute(aggregate_klass._aggregate_id).type if aggregate_klass.attribute_names.present?
14
+ aggregate_column_type_in_entity = column_for_attribute(:aggregate_id).type if aggregate_klass.attribute_names.present?
14
15
 
15
16
  raise ArgumentError, "column type mismatch - event:#{aggregate_column_type_in_event} entity:#{aggregate_column_type_in_entity}" if aggregate_column_type_in_event != aggregate_column_type_in_entity
16
- rescue ActiveRecord::NoDatabaseError
17
+
17
18
  end
19
+ rescue ActiveRecord::NoDatabaseError
20
+ # skip checks if the database is not yet created
18
21
  end
19
22
 
20
23
  class_attribute :_events_namespace
@@ -56,7 +59,6 @@ module Eventsimple
56
59
  include InstanceMethods
57
60
  extend ClassMethods
58
61
  end
59
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
60
62
 
61
63
  module InstanceMethods
62
64
  def skip_dispatcher
@@ -134,7 +136,7 @@ module Eventsimple
134
136
  # Events for an entity are expected to be namespaced under _events_namespace.
135
137
  def find_sti_class(type_name)
136
138
  if _events_namespace.blank?
137
- super(type_name)
139
+ super
138
140
  else
139
141
  super("#{_events_namespace}::#{type_name}")
140
142
  end
@@ -179,7 +181,7 @@ module Eventsimple
179
181
  end
180
182
  end
181
183
 
182
- def with_retries(args, &) # rubocop:disable Metrics/AbcSize
184
+ def with_retries(args, &)
183
185
  entity = args[0][_aggregate_klass.model_name.element.to_sym]
184
186
 
185
187
  # Only implement retries when the event is not already inside a transaction.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eventsimple
2
4
  class InvalidTransition < StandardError
3
5
  attr_reader :klass
@@ -33,10 +33,10 @@ module Eventsimple
33
33
  def processor(processor_klass, concurrency: 5)
34
34
  self._concurrency = concurrency
35
35
  self._processor_klass = processor_klass
36
- self._processor_pool = _concurrency.times.map { processor_klass.new }
36
+ self._processor_pool = Array.new(_concurrency) { processor_klass.new }
37
37
  end
38
38
 
39
- def start # rubocop:disable Metrics/AbcSize
39
+ def start
40
40
  Signal.trap('INT') do
41
41
  self.stop_consumer = true
42
42
  $stdout.puts('INT received, stopping consumer')
@@ -4,7 +4,7 @@ module Eventsimple
4
4
  class Reactor < ActiveJob::Base # rubocop:disable Rails/ApplicationJob
5
5
  queue_as :eventsimple
6
6
 
7
- discard_on ActiveJob::DeserializationError do |job, error|
7
+ discard_on ActiveJob::DeserializationError do |job, _error|
8
8
  Rails.logger.warn("Event #{job.arguments.first} not found for reactor: #{self.class}")
9
9
  end
10
10
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eventsimple
4
- VERSION = '1.5.6'
4
+ VERSION = '1.7.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventsimple
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.6
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zulfiqar Ali
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-01-02 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: concurrent-ruby
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.2.3
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.2.3
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: dry-struct
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -101,21 +114,21 @@ dependencies:
101
114
  - !ruby/object:Gem::Version
102
115
  version: '5.1'
103
116
  - !ruby/object:Gem::Dependency
104
- name: concurrent-ruby
117
+ name: bundle-audit
105
118
  requirement: !ruby/object:Gem::Requirement
106
119
  requirements:
107
120
  - - ">="
108
121
  - !ruby/object:Gem::Version
109
- version: 1.2.3
110
- type: :runtime
122
+ version: '0'
123
+ type: :development
111
124
  prerelease: false
112
125
  version_requirements: !ruby/object:Gem::Requirement
113
126
  requirements:
114
127
  - - ">="
115
128
  - !ruby/object:Gem::Version
116
- version: 1.2.3
129
+ version: '0'
117
130
  - !ruby/object:Gem::Dependency
118
- name: bundle-audit
131
+ name: fuubar
119
132
  requirement: !ruby/object:Gem::Requirement
120
133
  requirements:
121
134
  - - ">="
@@ -129,7 +142,7 @@ dependencies:
129
142
  - !ruby/object:Gem::Version
130
143
  version: '0'
131
144
  - !ruby/object:Gem::Dependency
132
- name: fuubar
145
+ name: git
133
146
  requirement: !ruby/object:Gem::Requirement
134
147
  requirements:
135
148
  - - ">="
@@ -143,7 +156,7 @@ dependencies:
143
156
  - !ruby/object:Gem::Version
144
157
  version: '0'
145
158
  - !ruby/object:Gem::Dependency
146
- name: git
159
+ name: guard-rspec
147
160
  requirement: !ruby/object:Gem::Requirement
148
161
  requirements:
149
162
  - - ">="
@@ -157,7 +170,7 @@ dependencies:
157
170
  - !ruby/object:Gem::Version
158
171
  version: '0'
159
172
  - !ruby/object:Gem::Dependency
160
- name: guard-rspec
173
+ name: parse_a_changelog
161
174
  requirement: !ruby/object:Gem::Requirement
162
175
  requirements:
163
176
  - - ">="
@@ -171,7 +184,7 @@ dependencies:
171
184
  - !ruby/object:Gem::Version
172
185
  version: '0'
173
186
  - !ruby/object:Gem::Dependency
174
- name: parse_a_changelog
187
+ name: pry
175
188
  requirement: !ruby/object:Gem::Requirement
176
189
  requirements:
177
190
  - - ">="
@@ -185,7 +198,7 @@ dependencies:
185
198
  - !ruby/object:Gem::Version
186
199
  version: '0'
187
200
  - !ruby/object:Gem::Dependency
188
- name: pry
201
+ name: puma
189
202
  requirement: !ruby/object:Gem::Requirement
190
203
  requirements:
191
204
  - - ">="
@@ -199,7 +212,7 @@ dependencies:
199
212
  - !ruby/object:Gem::Version
200
213
  version: '0'
201
214
  - !ruby/object:Gem::Dependency
202
- name: puma
215
+ name: rspec-rails
203
216
  requirement: !ruby/object:Gem::Requirement
204
217
  requirements:
205
218
  - - ">="
@@ -213,7 +226,63 @@ dependencies:
213
226
  - !ruby/object:Gem::Version
214
227
  version: '0'
215
228
  - !ruby/object:Gem::Dependency
216
- name: rspec-rails
229
+ name: rubocop
230
+ requirement: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ type: :development
236
+ prerelease: false
237
+ version_requirements: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ - !ruby/object:Gem::Dependency
243
+ name: rubocop-factory_bot
244
+ requirement: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: '0'
249
+ type: :development
250
+ prerelease: false
251
+ version_requirements: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ - !ruby/object:Gem::Dependency
257
+ name: rubocop-performance
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ">="
261
+ - !ruby/object:Gem::Version
262
+ version: '0'
263
+ type: :development
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ - !ruby/object:Gem::Dependency
271
+ name: rubocop-rails
272
+ requirement: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: '0'
277
+ type: :development
278
+ prerelease: false
279
+ version_requirements: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: '0'
284
+ - !ruby/object:Gem::Dependency
285
+ name: rubocop-rspec
217
286
  requirement: !ruby/object:Gem::Requirement
218
287
  requirements:
219
288
  - - ">="
@@ -227,7 +296,7 @@ dependencies:
227
296
  - !ruby/object:Gem::Version
228
297
  version: '0'
229
298
  - !ruby/object:Gem::Dependency
230
- name: ws-style
299
+ name: rubocop-rspec_rails
231
300
  requirement: !ruby/object:Gem::Requirement
232
301
  requirements:
233
302
  - - ">="
@@ -303,7 +372,6 @@ licenses:
303
372
  - MIT
304
373
  metadata:
305
374
  changelog_uri: https://github.com/wealthsimple/eventsimple/blob/main/CHANGELOG.md
306
- post_install_message:
307
375
  rdoc_options: []
308
376
  require_paths:
309
377
  - lib
@@ -318,8 +386,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
386
  - !ruby/object:Gem::Version
319
387
  version: '0'
320
388
  requirements: []
321
- rubygems_version: 3.4.19
322
- signing_key:
389
+ rubygems_version: 3.6.7
323
390
  specification_version: 4
324
391
  summary: Event sourcing toolkit using Rails and ActiveJob
325
392
  test_files: []