solid_objects 0.2.1 → 0.3.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +129 -8
  4. data/docs/architecture.md +62 -15
  5. data/docs/authorization.md +16 -3
  6. data/docs/benchmarks.md +6 -2
  7. data/docs/correctness.md +19 -1
  8. data/docs/database-schema.md +5 -0
  9. data/docs/development.md +40 -0
  10. data/docs/fit.md +10 -2
  11. data/docs/migrating-existing-state.md +8 -1
  12. data/docs/operations.md +74 -36
  13. data/docs/roadmap.md +8 -2
  14. data/docs/security.md +25 -3
  15. data/docs/state-migrations.md +2 -0
  16. data/lib/generators/solid_objects/templates/solid_objects.rb +30 -2
  17. data/lib/solid_objects/activation.rb +33 -4
  18. data/lib/solid_objects/actor.rb +47 -6
  19. data/lib/solid_objects/actor_definition.rb +2 -0
  20. data/lib/solid_objects/actor_snapshot.rb +10 -4
  21. data/lib/solid_objects/application_write_guard.rb +24 -0
  22. data/lib/solid_objects/caller_process.rb +28 -0
  23. data/lib/solid_objects/cli.rb +44 -5
  24. data/lib/solid_objects/client.rb +98 -5
  25. data/lib/solid_objects/commit_action_registry.rb +42 -0
  26. data/lib/solid_objects/configuration.rb +27 -1
  27. data/lib/solid_objects/database_adapter.rb +28 -1
  28. data/lib/solid_objects/database_adapters/mysql.rb +46 -0
  29. data/lib/solid_objects/database_adapters/postgresql.rb +29 -0
  30. data/lib/solid_objects/database_adapters/sqlite.rb +28 -0
  31. data/lib/solid_objects/errors.rb +144 -0
  32. data/lib/solid_objects/executor.rb +64 -4
  33. data/lib/solid_objects/instance_pruner.rb +97 -0
  34. data/lib/solid_objects/message_pruner.rb +97 -0
  35. data/lib/solid_objects/message_reference.rb +9 -0
  36. data/lib/solid_objects/process_pruner.rb +49 -0
  37. data/lib/solid_objects/reference.rb +5 -0
  38. data/lib/solid_objects/state_snapshot.rb +41 -0
  39. data/lib/solid_objects/sync_deadline.rb +57 -0
  40. data/lib/solid_objects/sync_diagnostics.rb +133 -0
  41. data/lib/solid_objects/synchronous_invocation.rb +26 -7
  42. data/lib/solid_objects/test_helper.rb +78 -0
  43. data/lib/solid_objects/version.rb +1 -1
  44. data/lib/solid_objects/worker.rb +1 -1
  45. data/lib/solid_objects.rb +34 -0
  46. data/sig/generated/lib/solid_objects/activation.rbs +3 -0
  47. data/sig/generated/lib/solid_objects/actor.rbs +26 -0
  48. data/sig/generated/lib/solid_objects/application_write_guard.rbs +8 -0
  49. data/sig/generated/lib/solid_objects/caller_process.rbs +11 -0
  50. data/sig/generated/lib/solid_objects/cli.rbs +11 -2
  51. data/sig/generated/lib/solid_objects/client.rbs +15 -0
  52. data/sig/generated/lib/solid_objects/commit_action_registry.rbs +43 -0
  53. data/sig/generated/lib/solid_objects/configuration.rbs +27 -7
  54. data/sig/generated/lib/solid_objects/database_adapter.rbs +9 -0
  55. data/sig/generated/lib/solid_objects/database_adapters/mysql.rbs +8 -0
  56. data/sig/generated/lib/solid_objects/database_adapters/postgresql.rbs +8 -0
  57. data/sig/generated/lib/solid_objects/database_adapters/sqlite.rbs +8 -0
  58. data/sig/generated/lib/solid_objects/errors.rbs +118 -0
  59. data/sig/generated/lib/solid_objects/executor.rbs +12 -0
  60. data/sig/generated/lib/solid_objects/instance_pruner.rbs +36 -0
  61. data/sig/generated/lib/solid_objects/message_pruner.rbs +42 -0
  62. data/sig/generated/lib/solid_objects/message_reference.rbs +3 -0
  63. data/sig/generated/lib/solid_objects/process_pruner.rbs +27 -0
  64. data/sig/generated/lib/solid_objects/reference.rbs +3 -0
  65. data/sig/generated/lib/solid_objects/state_snapshot.rbs +30 -0
  66. data/sig/generated/lib/solid_objects/sync_deadline.rbs +31 -0
  67. data/sig/generated/lib/solid_objects/sync_diagnostics.rbs +34 -0
  68. data/sig/generated/lib/solid_objects/synchronous_invocation.rbs +3 -0
  69. data/sig/generated/lib/solid_objects/test_helper.rbs +25 -0
  70. data/sig/generated/lib/solid_objects.rbs +12 -0
  71. metadata +19 -1
@@ -0,0 +1,27 @@
1
+ # Generated from lib/solid_objects/process_pruner.rb with RBS::Inline
2
+
3
+ module SolidObjects
4
+ class ProcessPruner
5
+ @now: Time
6
+
7
+ @batch_size: Integer
8
+
9
+ # @rbs (?now: Time, ?batch_size: Integer) -> void
10
+ def initialize: (?now: Time, ?batch_size: Integer) -> void
11
+
12
+ # @rbs () -> Integer
13
+ def preview: () -> Integer
14
+
15
+ # @rbs () -> Integer
16
+ def prune: () -> Integer
17
+
18
+ private
19
+
20
+ attr_reader now: untyped
21
+
22
+ attr_reader batch_size: untyped
23
+
24
+ # @rbs () -> ActiveRecord::Relation[Process]
25
+ def prunable: () -> ActiveRecord::Relation[Process]
26
+ end
27
+ end
@@ -22,6 +22,9 @@ module SolidObjects
22
22
  # @rbs (?authorization_context: untyped) -> bool
23
23
  def destroy: (?authorization_context: untyped) -> bool
24
24
 
25
+ # @rbs (?authorization_context: untyped) -> StateSnapshot
26
+ def snapshot: (?authorization_context: untyped) -> StateSnapshot
27
+
25
28
  # @rbs (Symbol, *untyped, **untyped) -> untyped
26
29
  def method_missing: (Symbol, *untyped, **untyped) -> untyped
27
30
 
@@ -0,0 +1,30 @@
1
+ # Generated from lib/solid_objects/state_snapshot.rb with RBS::Inline
2
+
3
+ module SolidObjects
4
+ class StateSnapshot
5
+ @actor_class: Class
6
+
7
+ @data: Hash[String, untyped]
8
+
9
+ # @rbs (Reference) -> void
10
+ def initialize: (Reference) -> void
11
+
12
+ # @rbs () -> Hash[String, untyped]
13
+ def to_h: () -> Hash[String, untyped]
14
+
15
+ # @rbs (Symbol, *untyped, **untyped) -> untyped
16
+ def method_missing: (Symbol, *untyped, **untyped) -> untyped
17
+
18
+ # @rbs (Symbol, bool) -> bool
19
+ def respond_to_missing?: (Symbol, bool) -> bool
20
+
21
+ private
22
+
23
+ attr_reader actor_class: untyped
24
+
25
+ attr_reader data: untyped
26
+
27
+ # @rbs (Symbol | String) -> bool
28
+ def attribute?: (Symbol | String) -> bool
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/solid_objects/sync_deadline.rb with RBS::Inline
2
+
3
+ module SolidObjects
4
+ class SyncDeadline
5
+ KEY: ::Symbol
6
+
7
+ # @rbs (timeout: Numeric) { () -> untyped } -> untyped
8
+ def self.with: (timeout: Numeric) { () -> untyped } -> untyped
9
+
10
+ # @rbs () -> bool
11
+ def self.active?: () -> bool
12
+
13
+ # @rbs () -> bool
14
+ def self.expired?: () -> bool
15
+
16
+ # @rbs () -> Float
17
+ def self.remaining: () -> Float
18
+
19
+ # @rbs () -> Integer
20
+ def self.remaining_milliseconds: () -> Integer
21
+
22
+ # @rbs () -> Integer
23
+ def self.remaining_seconds: () -> Integer
24
+
25
+ # @rbs () -> Float?
26
+ private def self.deadline: () -> Float?
27
+
28
+ # @rbs () -> Float
29
+ private def self.monotonic_now: () -> Float
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ # Generated from lib/solid_objects/sync_diagnostics.rb with RBS::Inline
2
+
3
+ module SolidObjects
4
+ class SyncDiagnostics
5
+ # @rbs (Message, timeout: Numeric) -> SyncTimeout
6
+ def call: (Message, timeout: Numeric) -> SyncTimeout
7
+
8
+ private
9
+
10
+ # @rbs (Message) -> String
11
+ def message_status: (Message) -> String
12
+
13
+ # @rbs (Message, Instance, Message?) -> String
14
+ def waiting_reason: (Message, Instance, Message?) -> String
15
+
16
+ # @rbs (ReadyMessage?) -> bool
17
+ def future?: (ReadyMessage?) -> bool
18
+
19
+ # @rbs (Instance) -> bool
20
+ def live_activation?: (Instance) -> bool
21
+
22
+ # @rbs (Message) -> Message?
23
+ def earlier_blocker: (Message) -> Message?
24
+
25
+ # @rbs (Instance) -> Hash[String, untyped]
26
+ def activation_details: (Instance) -> Hash[String, untyped]
27
+
28
+ # @rbs (Process?) -> Hash[String, untyped]?
29
+ def process_details: (Process?) -> Hash[String, untyped]?
30
+
31
+ # @rbs (Message?) -> Hash[String, untyped]?
32
+ def blocker_details: (Message?) -> Hash[String, untyped]?
33
+ end
34
+ end
@@ -7,6 +7,9 @@ module SolidObjects
7
7
 
8
8
  private
9
9
 
10
+ # @rbs (MessageReference, timeout: Numeric) -> untyped
11
+ def call_before_deadline: (MessageReference, timeout: Numeric) -> untyped
12
+
10
13
  # @rbs (MessageReference) -> Message
11
14
  def load_message: (MessageReference) -> Message
12
15
 
@@ -0,0 +1,25 @@
1
+ # Generated from lib/solid_objects/test_helper.rb with RBS::Inline
2
+
3
+ module SolidObjects
4
+ module TestHelper
5
+ # @rbs (Class) -> void
6
+ def self.included: (Class) -> void
7
+
8
+ # @rbs () -> void
9
+ def self.reset_actors!: () -> void
10
+
11
+ # @rbs () -> void
12
+ def reset_actors!: () -> void
13
+
14
+ # @rbs (?roles: Array[Symbol], ?max_passes: Integer) -> Integer
15
+ def drain_solid_objects: (?roles: Array[Symbol], ?max_passes: Integer) -> Integer
16
+
17
+ private
18
+
19
+ # @rbs (Array[Symbol]) -> Array[Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor]
20
+ def build_solid_objects_runners: (Array[Symbol]) -> Array[Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor]
21
+
22
+ # @rbs (Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor) -> Integer
23
+ def solid_objects_runner_result: (Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor) -> Integer
24
+ end
25
+ end
@@ -18,12 +18,21 @@ module SolidObjects
18
18
  # @rbs (String | Symbol) { (Hash[String, untyped], EffectContext) -> untyped } -> Proc
19
19
  def self.register_effect: (String | Symbol) { (Hash[String, untyped], EffectContext) -> untyped } -> Proc
20
20
 
21
+ # @rbs () -> CommitActionRegistry
22
+ def self.commit_action_registry: () -> CommitActionRegistry
23
+
24
+ # @rbs (String | Symbol) { (Hash[String, untyped], CommitActionContext) -> untyped } -> Proc
25
+ def self.register_commit_action: (String | Symbol) { (Hash[String, untyped], CommitActionContext) -> untyped } -> Proc
26
+
21
27
  # @rbs () -> Client
22
28
  def self.client: () -> Client
23
29
 
24
30
  # @rbs () -> CallerProcess
25
31
  def self.caller_process: () -> CallerProcess
26
32
 
33
+ # @rbs () -> bool
34
+ def self.reset_caller_process!: () -> bool
35
+
27
36
  # @rbs () -> DeadLetterManager
28
37
  def self.dead_letters: () -> DeadLetterManager
29
38
 
@@ -33,6 +42,9 @@ module SolidObjects
33
42
  # @rbs (String, Class) -> Class
34
43
  def self.register_actor: (String, Class) -> Class
35
44
 
45
+ # @rbs (untyped) -> untyped
46
+ def self.mutable_copy: (untyped) -> untyped
47
+
36
48
  # @rbs () -> void
37
49
  def self.reset!: () -> void
38
50
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Carlson
@@ -342,10 +342,12 @@ files:
342
342
  - lib/solid_objects/actor_registry.rb
343
343
  - lib/solid_objects/actor_snapshot.rb
344
344
  - lib/solid_objects/actor_view.rb
345
+ - lib/solid_objects/application_write_guard.rb
345
346
  - lib/solid_objects/broadcast_executor.rb
346
347
  - lib/solid_objects/caller_process.rb
347
348
  - lib/solid_objects/cli.rb
348
349
  - lib/solid_objects/client.rb
350
+ - lib/solid_objects/commit_action_registry.rb
349
351
  - lib/solid_objects/configuration.rb
350
352
  - lib/solid_objects/context.rb
351
353
  - lib/solid_objects/database_adapter.rb
@@ -360,21 +362,28 @@ files:
360
362
  - lib/solid_objects/engine.rb
361
363
  - lib/solid_objects/errors.rb
362
364
  - lib/solid_objects/executor.rb
365
+ - lib/solid_objects/instance_pruner.rb
363
366
  - lib/solid_objects/instrumentation.rb
364
367
  - lib/solid_objects/lease.rb
365
368
  - lib/solid_objects/lease_renewer.rb
366
369
  - lib/solid_objects/log_subscriber.rb
367
370
  - lib/solid_objects/mailbox.rb
371
+ - lib/solid_objects/message_pruner.rb
368
372
  - lib/solid_objects/message_reference.rb
373
+ - lib/solid_objects/process_pruner.rb
369
374
  - lib/solid_objects/process_registry.rb
370
375
  - lib/solid_objects/reference.rb
371
376
  - lib/solid_objects/reminder_scheduler.rb
372
377
  - lib/solid_objects/serialization.rb
373
378
  - lib/solid_objects/state.rb
379
+ - lib/solid_objects/state_snapshot.rb
374
380
  - lib/solid_objects/stream_name.rb
375
381
  - lib/solid_objects/stream_token.rb
376
382
  - lib/solid_objects/supervisor.rb
383
+ - lib/solid_objects/sync_deadline.rb
384
+ - lib/solid_objects/sync_diagnostics.rb
377
385
  - lib/solid_objects/synchronous_invocation.rb
386
+ - lib/solid_objects/test_helper.rb
378
387
  - lib/solid_objects/turbo_stream_renderer.rb
379
388
  - lib/solid_objects/version.rb
380
389
  - lib/solid_objects/wake_up.rb
@@ -395,10 +404,12 @@ files:
395
404
  - sig/generated/lib/solid_objects/actor_registry.rbs
396
405
  - sig/generated/lib/solid_objects/actor_snapshot.rbs
397
406
  - sig/generated/lib/solid_objects/actor_view.rbs
407
+ - sig/generated/lib/solid_objects/application_write_guard.rbs
398
408
  - sig/generated/lib/solid_objects/broadcast_executor.rbs
399
409
  - sig/generated/lib/solid_objects/caller_process.rbs
400
410
  - sig/generated/lib/solid_objects/cli.rbs
401
411
  - sig/generated/lib/solid_objects/client.rbs
412
+ - sig/generated/lib/solid_objects/commit_action_registry.rbs
402
413
  - sig/generated/lib/solid_objects/configuration.rbs
403
414
  - sig/generated/lib/solid_objects/context.rbs
404
415
  - sig/generated/lib/solid_objects/database_adapter.rbs
@@ -413,21 +424,28 @@ files:
413
424
  - sig/generated/lib/solid_objects/engine.rbs
414
425
  - sig/generated/lib/solid_objects/errors.rbs
415
426
  - sig/generated/lib/solid_objects/executor.rbs
427
+ - sig/generated/lib/solid_objects/instance_pruner.rbs
416
428
  - sig/generated/lib/solid_objects/instrumentation.rbs
417
429
  - sig/generated/lib/solid_objects/lease.rbs
418
430
  - sig/generated/lib/solid_objects/lease_renewer.rbs
419
431
  - sig/generated/lib/solid_objects/log_subscriber.rbs
420
432
  - sig/generated/lib/solid_objects/mailbox.rbs
433
+ - sig/generated/lib/solid_objects/message_pruner.rbs
421
434
  - sig/generated/lib/solid_objects/message_reference.rbs
435
+ - sig/generated/lib/solid_objects/process_pruner.rbs
422
436
  - sig/generated/lib/solid_objects/process_registry.rbs
423
437
  - sig/generated/lib/solid_objects/reference.rbs
424
438
  - sig/generated/lib/solid_objects/reminder_scheduler.rbs
425
439
  - sig/generated/lib/solid_objects/serialization.rbs
426
440
  - sig/generated/lib/solid_objects/state.rbs
441
+ - sig/generated/lib/solid_objects/state_snapshot.rbs
427
442
  - sig/generated/lib/solid_objects/stream_name.rbs
428
443
  - sig/generated/lib/solid_objects/stream_token.rbs
429
444
  - sig/generated/lib/solid_objects/supervisor.rbs
445
+ - sig/generated/lib/solid_objects/sync_deadline.rbs
446
+ - sig/generated/lib/solid_objects/sync_diagnostics.rbs
430
447
  - sig/generated/lib/solid_objects/synchronous_invocation.rbs
448
+ - sig/generated/lib/solid_objects/test_helper.rbs
431
449
  - sig/generated/lib/solid_objects/turbo_stream_renderer.rbs
432
450
  - sig/generated/lib/solid_objects/version.rbs
433
451
  - sig/generated/lib/solid_objects/wake_up.rbs