eventsimple 1.2.3 → 1.3.1

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: c19b9d4481185e75ebfbb32cde09d5e1cf27b4ce79dac12eaa9693ad0f3888df
4
- data.tar.gz: 8907efcfdc5e08f43fa0e2f0682b3937d8866e16eaf22bf5ec34589e1d3ca8cf
3
+ metadata.gz: af8b1c10700108b29ba729c9bbe8984a6c1e79e2321cab48576e29e85225c7f0
4
+ data.tar.gz: 73debdd0abeeec0f17077037656b92f759f41d6c1600d17c9bed86ac0c679667
5
5
  SHA512:
6
- metadata.gz: f2a911cfa42750ec24803938cdee68982c7456f845b78958e6a4970f37701749e647419baafb8c80a1bafd0d061abe12f409dee6456a50a1738fbd0436c09a1f
7
- data.tar.gz: dd1f22f67d7d9d9ad88849c7e55db009e2a49b15f0a20a66387768ff03ef34e1ca100a23db829b3b09c99f978a3c7386636a2f0bd6e737743c602856cda1afa0
6
+ metadata.gz: 950e729b42d5c7f6c1aa30172e41dbd13ffdc5e44e24e8251ac471611cd41bdb8ac82fe03d145cdf917bb0396dcb2449fc6e31717e72e33b2adceeb205d7855b
7
+ data.tar.gz: db12e1bad078f9ba357c3360157adb0c5842f46fcd204ac892ff47fe105e9fc7d8618be8b4f7765eef24cf175f539f478c84a4613103af37380ad5b3d51f2b1e
data/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 1.3.1 - 2024-01-19
10
+ ### Changed
11
+ - Restore readonly status to the original status after enable_writes! block.
12
+
13
+ ## 1.3.0 - 2024-01-14
14
+ ### Changed
15
+ - Prevent manual write access to the entity table by default. This is to prevent
16
+ accidental writes to the entity table. Use entity.enable_writes! to enable writes.
17
+
9
18
  ## 1.2.3 - 2024-01-11
10
19
  ### Changed
11
20
  - Fix rendering of deleted events
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eventsimple (1.2.3)
4
+ eventsimple (1.3.1)
5
5
  dry-struct (~> 1.6)
6
6
  dry-types (~> 1.7)
7
7
  pg (~> 1.4)
@@ -11,35 +11,35 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- actioncable (7.1.2)
15
- actionpack (= 7.1.2)
16
- activesupport (= 7.1.2)
14
+ actioncable (7.1.3)
15
+ actionpack (= 7.1.3)
16
+ activesupport (= 7.1.3)
17
17
  nio4r (~> 2.0)
18
18
  websocket-driver (>= 0.6.1)
19
19
  zeitwerk (~> 2.6)
20
- actionmailbox (7.1.2)
21
- actionpack (= 7.1.2)
22
- activejob (= 7.1.2)
23
- activerecord (= 7.1.2)
24
- activestorage (= 7.1.2)
25
- activesupport (= 7.1.2)
20
+ actionmailbox (7.1.3)
21
+ actionpack (= 7.1.3)
22
+ activejob (= 7.1.3)
23
+ activerecord (= 7.1.3)
24
+ activestorage (= 7.1.3)
25
+ activesupport (= 7.1.3)
26
26
  mail (>= 2.7.1)
27
27
  net-imap
28
28
  net-pop
29
29
  net-smtp
30
- actionmailer (7.1.2)
31
- actionpack (= 7.1.2)
32
- actionview (= 7.1.2)
33
- activejob (= 7.1.2)
34
- activesupport (= 7.1.2)
30
+ actionmailer (7.1.3)
31
+ actionpack (= 7.1.3)
32
+ actionview (= 7.1.3)
33
+ activejob (= 7.1.3)
34
+ activesupport (= 7.1.3)
35
35
  mail (~> 2.5, >= 2.5.4)
36
36
  net-imap
37
37
  net-pop
38
38
  net-smtp
39
39
  rails-dom-testing (~> 2.2)
40
- actionpack (7.1.2)
41
- actionview (= 7.1.2)
42
- activesupport (= 7.1.2)
40
+ actionpack (7.1.3)
41
+ actionview (= 7.1.3)
42
+ activesupport (= 7.1.3)
43
43
  nokogiri (>= 1.8.5)
44
44
  racc
45
45
  rack (>= 2.2.4)
@@ -47,35 +47,35 @@ GEM
47
47
  rack-test (>= 0.6.3)
48
48
  rails-dom-testing (~> 2.2)
49
49
  rails-html-sanitizer (~> 1.6)
50
- actiontext (7.1.2)
51
- actionpack (= 7.1.2)
52
- activerecord (= 7.1.2)
53
- activestorage (= 7.1.2)
54
- activesupport (= 7.1.2)
50
+ actiontext (7.1.3)
51
+ actionpack (= 7.1.3)
52
+ activerecord (= 7.1.3)
53
+ activestorage (= 7.1.3)
54
+ activesupport (= 7.1.3)
55
55
  globalid (>= 0.6.0)
56
56
  nokogiri (>= 1.8.5)
57
- actionview (7.1.2)
58
- activesupport (= 7.1.2)
57
+ actionview (7.1.3)
58
+ activesupport (= 7.1.3)
59
59
  builder (~> 3.1)
60
60
  erubi (~> 1.11)
61
61
  rails-dom-testing (~> 2.2)
62
62
  rails-html-sanitizer (~> 1.6)
63
- activejob (7.1.2)
64
- activesupport (= 7.1.2)
63
+ activejob (7.1.3)
64
+ activesupport (= 7.1.3)
65
65
  globalid (>= 0.3.6)
66
- activemodel (7.1.2)
67
- activesupport (= 7.1.2)
68
- activerecord (7.1.2)
69
- activemodel (= 7.1.2)
70
- activesupport (= 7.1.2)
66
+ activemodel (7.1.3)
67
+ activesupport (= 7.1.3)
68
+ activerecord (7.1.3)
69
+ activemodel (= 7.1.3)
70
+ activesupport (= 7.1.3)
71
71
  timeout (>= 0.4.0)
72
- activestorage (7.1.2)
73
- actionpack (= 7.1.2)
74
- activejob (= 7.1.2)
75
- activerecord (= 7.1.2)
76
- activesupport (= 7.1.2)
72
+ activestorage (7.1.3)
73
+ actionpack (= 7.1.3)
74
+ activejob (= 7.1.3)
75
+ activerecord (= 7.1.3)
76
+ activesupport (= 7.1.3)
77
77
  marcel (~> 1.0)
78
- activesupport (7.1.2)
78
+ activesupport (7.1.3)
79
79
  base64
80
80
  bigdecimal
81
81
  concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -89,7 +89,7 @@ GEM
89
89
  public_suffix (>= 2.0.2, < 6.0)
90
90
  ast (2.4.2)
91
91
  base64 (0.2.0)
92
- bigdecimal (3.1.5)
92
+ bigdecimal (3.1.6)
93
93
  builder (3.2.4)
94
94
  bundle-audit (0.1.0)
95
95
  bundler-audit
@@ -97,11 +97,11 @@ GEM
97
97
  bundler (>= 1.2.0, < 3)
98
98
  thor (~> 1.0)
99
99
  coderay (1.1.3)
100
- concurrent-ruby (1.2.2)
100
+ concurrent-ruby (1.2.3)
101
101
  connection_pool (2.4.1)
102
102
  crass (1.0.6)
103
103
  date (3.3.4)
104
- diff-lcs (1.5.0)
104
+ diff-lcs (1.5.1)
105
105
  drb (2.2.0)
106
106
  ruby2_keywords
107
107
  dry-core (1.0.1)
@@ -125,6 +125,11 @@ GEM
125
125
  dry-logic (~> 1.4)
126
126
  zeitwerk (~> 2.6)
127
127
  erubi (1.12.0)
128
+ factory_bot (6.4.6)
129
+ activesupport (>= 5.0.0)
130
+ factory_bot_rails (6.4.3)
131
+ factory_bot (~> 6.4)
132
+ railties (>= 5.0.0)
128
133
  ffi (1.16.3)
129
134
  formatador (1.1.0)
130
135
  fuubar (2.5.1)
@@ -152,8 +157,8 @@ GEM
152
157
  i18n (1.14.1)
153
158
  concurrent-ruby (~> 1.0)
154
159
  ice_nine (0.11.2)
155
- io-console (0.7.1)
156
- irb (1.11.1)
160
+ io-console (0.7.2)
161
+ irb (1.11.2)
157
162
  rdoc
158
163
  reline (>= 0.4.2)
159
164
  json (2.7.1)
@@ -174,10 +179,10 @@ GEM
174
179
  marcel (1.0.2)
175
180
  method_source (1.0.0)
176
181
  mini_mime (1.1.5)
177
- minitest (5.21.1)
182
+ minitest (5.22.2)
178
183
  mutex_m (0.2.0)
179
184
  nenv (0.3.0)
180
- net-imap (0.4.9.1)
185
+ net-imap (0.4.10)
181
186
  date
182
187
  net-protocol
183
188
  net-pop (0.1.2)
@@ -187,9 +192,9 @@ GEM
187
192
  net-smtp (0.4.0.1)
188
193
  net-protocol
189
194
  nio4r (2.7.0)
190
- nokogiri (1.16.0-arm64-darwin)
195
+ nokogiri (1.16.2-arm64-darwin)
191
196
  racc (~> 1.4)
192
- nokogiri (1.16.0-x86_64-linux)
197
+ nokogiri (1.16.2-x86_64-linux)
193
198
  racc (~> 1.4)
194
199
  notiffany (0.1.3)
195
200
  nenv (~> 0.1)
@@ -197,10 +202,10 @@ GEM
197
202
  parallel (1.24.0)
198
203
  parse_a_changelog (1.3.0)
199
204
  treetop (~> 1.6)
200
- parser (3.3.0.3)
205
+ parser (3.3.0.5)
201
206
  ast (~> 2.4.1)
202
207
  racc
203
- pg (1.5.4)
208
+ pg (1.5.5)
204
209
  polyglot (0.3.5)
205
210
  pry (0.14.2)
206
211
  coderay (~> 1.1)
@@ -211,7 +216,7 @@ GEM
211
216
  puma (6.4.2)
212
217
  nio4r (~> 2.0)
213
218
  racc (1.7.3)
214
- rack (3.0.8)
219
+ rack (3.0.9)
215
220
  rack-session (2.0.0)
216
221
  rack (>= 3.0.0)
217
222
  rack-test (2.1.0)
@@ -219,20 +224,20 @@ GEM
219
224
  rackup (2.1.0)
220
225
  rack (>= 3)
221
226
  webrick (~> 1.8)
222
- rails (7.1.2)
223
- actioncable (= 7.1.2)
224
- actionmailbox (= 7.1.2)
225
- actionmailer (= 7.1.2)
226
- actionpack (= 7.1.2)
227
- actiontext (= 7.1.2)
228
- actionview (= 7.1.2)
229
- activejob (= 7.1.2)
230
- activemodel (= 7.1.2)
231
- activerecord (= 7.1.2)
232
- activestorage (= 7.1.2)
233
- activesupport (= 7.1.2)
227
+ rails (7.1.3)
228
+ actioncable (= 7.1.3)
229
+ actionmailbox (= 7.1.3)
230
+ actionmailer (= 7.1.3)
231
+ actionpack (= 7.1.3)
232
+ actiontext (= 7.1.3)
233
+ actionview (= 7.1.3)
234
+ activejob (= 7.1.3)
235
+ activemodel (= 7.1.3)
236
+ activerecord (= 7.1.3)
237
+ activestorage (= 7.1.3)
238
+ activesupport (= 7.1.3)
234
239
  bundler (>= 1.15.0)
235
- railties (= 7.1.2)
240
+ railties (= 7.1.3)
236
241
  rails-dom-testing (2.2.0)
237
242
  activesupport (>= 5.0.0)
238
243
  minitest
@@ -240,9 +245,9 @@ GEM
240
245
  rails-html-sanitizer (1.6.0)
241
246
  loofah (~> 2.21)
242
247
  nokogiri (~> 1.14)
243
- railties (7.1.2)
244
- actionpack (= 7.1.2)
245
- activesupport (= 7.1.2)
248
+ railties (7.1.3)
249
+ actionpack (= 7.1.3)
250
+ activesupport (= 7.1.3)
246
251
  irb
247
252
  rackup (>= 1.0.0)
248
253
  rake (>= 12.2)
@@ -261,19 +266,19 @@ GEM
261
266
  io-console (~> 0.5)
262
267
  retriable (3.1.2)
263
268
  rexml (3.2.6)
264
- rspec (3.12.0)
265
- rspec-core (~> 3.12.0)
266
- rspec-expectations (~> 3.12.0)
267
- rspec-mocks (~> 3.12.0)
268
- rspec-core (3.12.2)
269
- rspec-support (~> 3.12.0)
270
- rspec-expectations (3.12.3)
269
+ rspec (3.13.0)
270
+ rspec-core (~> 3.13.0)
271
+ rspec-expectations (~> 3.13.0)
272
+ rspec-mocks (~> 3.13.0)
273
+ rspec-core (3.13.0)
274
+ rspec-support (~> 3.13.0)
275
+ rspec-expectations (3.13.0)
271
276
  diff-lcs (>= 1.2.0, < 2.0)
272
- rspec-support (~> 3.12.0)
273
- rspec-mocks (3.12.6)
277
+ rspec-support (~> 3.13.0)
278
+ rspec-mocks (3.13.0)
274
279
  diff-lcs (>= 1.2.0, < 2.0)
275
- rspec-support (~> 3.12.0)
276
- rspec-rails (6.1.0)
280
+ rspec-support (~> 3.13.0)
281
+ rspec-rails (6.1.1)
277
282
  actionpack (>= 6.1)
278
283
  activesupport (>= 6.1)
279
284
  railties (>= 6.1)
@@ -281,12 +286,12 @@ GEM
281
286
  rspec-expectations (~> 3.12)
282
287
  rspec-mocks (~> 3.12)
283
288
  rspec-support (~> 3.12)
284
- rspec-support (3.12.1)
285
- rubocop (1.59.0)
289
+ rspec-support (3.13.0)
290
+ rubocop (1.60.2)
286
291
  json (~> 2.3)
287
292
  language_server-protocol (>= 3.17.0)
288
293
  parallel (~> 1.10)
289
- parser (>= 3.2.2.4)
294
+ parser (>= 3.3.0.2)
290
295
  rainbow (>= 2.2.2, < 4.0)
291
296
  regexp_parser (>= 1.8, < 3.0)
292
297
  rexml (>= 3.2.5, < 4.0)
@@ -316,10 +321,10 @@ GEM
316
321
  ruby-progressbar (1.13.0)
317
322
  ruby2_keywords (0.0.5)
318
323
  shellany (0.0.1)
319
- standard (1.33.0)
324
+ standard (1.34.0)
320
325
  language_server-protocol (~> 3.17.0.2)
321
326
  lint_roller (~> 1.0)
322
- rubocop (~> 1.59.0)
327
+ rubocop (~> 1.60)
323
328
  standard-custom (~> 1.0.0)
324
329
  standard-performance (~> 1.3)
325
330
  standard-custom (1.0.2)
@@ -343,13 +348,13 @@ GEM
343
348
  websocket-driver (0.7.6)
344
349
  websocket-extensions (>= 0.1.0)
345
350
  websocket-extensions (0.1.5)
346
- ws-style (7.3.0)
351
+ ws-style (7.4.3)
347
352
  rubocop-rspec (>= 2.2.0)
348
353
  rubocop-vendor (>= 0.11)
349
354
  standard (>= 1.30.1)
350
355
  standard-custom (>= 1.0.2)
351
356
  standard-rails (>= 0.1.0)
352
- zeitwerk (2.6.12)
357
+ zeitwerk (2.6.13)
353
358
 
354
359
  PLATFORMS
355
360
  arm64-darwin-22
@@ -358,6 +363,7 @@ PLATFORMS
358
363
  DEPENDENCIES
359
364
  bundle-audit
360
365
  eventsimple!
366
+ factory_bot_rails
361
367
  fuubar
362
368
  git
363
369
  guard-rspec
data/README.md CHANGED
@@ -342,6 +342,24 @@ Create a rake task to run the consumer
342
342
  ## Helper methods
343
343
  Some convenience methods are provided to help with common use cases.
344
344
 
345
+ **`#enable_writes!`**
346
+ Write access on entities is disabled by default outside of writes via events. Use this method to enable writes on an entity.
347
+
348
+ ```ruby
349
+ user = User.find_by(canonical_id: 'user-123')
350
+ user.enable_writes! do
351
+ user.reproject
352
+ user.save!
353
+ end
354
+ ```
355
+
356
+ If you are using FactoryBot, you can add the following in your rails_helper.rb to enable writes on the entity:
357
+ ```ruby
358
+ FactoryBot.define do
359
+ after(:build) { |model| model.enable_writes! if model.class.ancestors.include?(Eventsimple::Entity::InstanceMethods) }
360
+ end
361
+ ```
362
+
345
363
  **`#reproject(at: nil)`**
346
364
 
347
365
  Reproject an entity from events (rebuilds in memory but does not persist the entity).
data/eventsimple.gemspec CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_runtime_dependency 'retriable', '~> 3.1'
31
31
 
32
32
  spec.add_development_dependency 'bundle-audit'
33
+ spec.add_development_dependency 'factory_bot_rails'
33
34
  spec.add_development_dependency 'fuubar'
34
35
  spec.add_development_dependency 'git'
35
36
  spec.add_development_dependency 'guard-rspec'
@@ -11,6 +11,8 @@ module Eventsimple
11
11
  autosave: false,
12
12
  validate: false
13
13
 
14
+ after_initialize :readonly!
15
+
14
16
  class_attribute :ignored_for_projection, default: []
15
17
 
16
18
  class_attribute :_filter_attributes
@@ -32,6 +34,16 @@ module Eventsimple
32
34
  attributes == reprojected.attributes
33
35
  end
34
36
 
37
+ def enable_writes!(&block)
38
+ was_readonly = @readonly
39
+ @readonly = false
40
+
41
+ if block
42
+ yield
43
+ @readonly = true if was_readonly
44
+ end
45
+ end
46
+
35
47
  def reproject(at: nil)
36
48
  event_history = at ? events.where('created_at <= ?', at).load : events.load
37
49
  ignore_props = (DEFAULT_IGNORE_PROPS + ignored_for_projection).map(&:to_s)
@@ -90,7 +90,9 @@ module Eventsimple
90
90
  apply(aggregate)
91
91
 
92
92
  # Persist!
93
+ aggregate.enable_writes!
93
94
  aggregate.save!
95
+ aggregate.readonly!
94
96
 
95
97
  self.aggregate = aggregate
96
98
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eventsimple
4
- VERSION = '1.2.3'
4
+ VERSION = '1.3.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventsimple
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zulfiqar Ali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-15 00:00:00.000000000 Z
11
+ date: 2024-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: factory_bot_rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: fuubar
99
113
  requirement: !ruby/object:Gem::Requirement