bcdd-result 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +16 -1
  3. data/CHANGELOG.md +70 -16
  4. data/README.md +293 -83
  5. data/Steepfile +4 -4
  6. data/examples/multiple_listeners/Rakefile +55 -0
  7. data/examples/multiple_listeners/app/models/account/member.rb +10 -0
  8. data/examples/multiple_listeners/app/models/account/owner_creation.rb +62 -0
  9. data/examples/multiple_listeners/app/models/account.rb +11 -0
  10. data/examples/multiple_listeners/app/models/user/creation.rb +67 -0
  11. data/examples/multiple_listeners/app/models/user/token/creation.rb +51 -0
  12. data/examples/multiple_listeners/app/models/user/token.rb +7 -0
  13. data/examples/multiple_listeners/app/models/user.rb +15 -0
  14. data/examples/multiple_listeners/config/boot.rb +16 -0
  15. data/examples/multiple_listeners/config/initializers/bcdd.rb +11 -0
  16. data/examples/multiple_listeners/config.rb +27 -0
  17. data/examples/multiple_listeners/db/setup.rb +61 -0
  18. data/examples/multiple_listeners/lib/bcdd/result/rollback_on_failure.rb +15 -0
  19. data/examples/multiple_listeners/lib/bcdd/result/transitions_record.rb +28 -0
  20. data/examples/multiple_listeners/lib/runtime_breaker.rb +11 -0
  21. data/examples/multiple_listeners/lib/transitions_listener/stdout.rb +54 -0
  22. data/examples/single_listener/Rakefile +92 -0
  23. data/examples/single_listener/app/models/account/member.rb +10 -0
  24. data/examples/single_listener/app/models/account/owner_creation.rb +62 -0
  25. data/examples/single_listener/app/models/account.rb +11 -0
  26. data/examples/single_listener/app/models/user/creation.rb +67 -0
  27. data/examples/single_listener/app/models/user/token/creation.rb +51 -0
  28. data/examples/single_listener/app/models/user/token.rb +7 -0
  29. data/examples/single_listener/app/models/user.rb +15 -0
  30. data/examples/single_listener/config/boot.rb +16 -0
  31. data/examples/single_listener/config/initializers/bcdd.rb +11 -0
  32. data/examples/single_listener/config.rb +23 -0
  33. data/examples/single_listener/db/setup.rb +49 -0
  34. data/examples/single_listener/lib/bcdd/result/rollback_on_failure.rb +15 -0
  35. data/examples/single_listener/lib/runtime_breaker.rb +11 -0
  36. data/examples/single_listener/lib/single_transitions_listener.rb +108 -0
  37. data/lib/bcdd/result/callable_and_then/caller.rb +1 -1
  38. data/lib/bcdd/result/config.rb +6 -1
  39. data/lib/bcdd/result/context/expectations/mixin.rb +2 -2
  40. data/lib/bcdd/result/context/mixin.rb +2 -2
  41. data/lib/bcdd/result/context/success.rb +20 -2
  42. data/lib/bcdd/result/contract/for_types.rb +1 -1
  43. data/lib/bcdd/result/contract/for_types_and_values.rb +2 -0
  44. data/lib/bcdd/result/expectations/mixin.rb +2 -2
  45. data/lib/bcdd/result/ignored_types.rb +14 -0
  46. data/lib/bcdd/result/mixin.rb +2 -2
  47. data/lib/bcdd/result/transitions/config.rb +26 -0
  48. data/lib/bcdd/result/transitions/listener.rb +51 -0
  49. data/lib/bcdd/result/transitions/listeners.rb +87 -0
  50. data/lib/bcdd/result/transitions/tracking/disabled.rb +1 -13
  51. data/lib/bcdd/result/transitions/tracking/enabled.rb +76 -17
  52. data/lib/bcdd/result/transitions/tracking.rb +8 -3
  53. data/lib/bcdd/result/transitions/tree.rb +26 -0
  54. data/lib/bcdd/result/transitions.rb +3 -4
  55. data/lib/bcdd/result/version.rb +1 -1
  56. data/lib/bcdd/result.rb +7 -5
  57. data/sig/bcdd/result/config.rbs +1 -0
  58. data/sig/bcdd/result/context.rbs +9 -0
  59. data/sig/bcdd/result/ignored_types.rbs +9 -0
  60. data/sig/bcdd/result/transitions.rbs +96 -7
  61. data/sig/bcdd/result.rbs +2 -2
  62. metadata +42 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 677f88c68eb0f745246a910bbf4a659103a5695f3c5bd74f6ac6f0ba9ff3729f
4
- data.tar.gz: 2966e659671b84bed72b2fb7ab4daaa19a1572a5480af3c19ab2a41b720d1265
3
+ metadata.gz: 3375c9c36b12a792a50e285c32f1526f660360b95d2a3d85103b9147c7c61a68
4
+ data.tar.gz: c1f399841dad795a4fa10bc15a4c0dac774c104dc9b2237dc5b602e5956c54e5
5
5
  SHA512:
6
- metadata.gz: ee78777c66384e185ff7c1c816ea9fa2787ab14cde530a2fb2a9ec943755b86846a0a03cbc2742c2530cf9487380e9d23ce47663de366483d77af4bfe1fa3c8c
7
- data.tar.gz: 7396cf7283c4d22dd7b03be855cf6f3a8e9c15ebbf8ef5194c34de762b99e9d6a41345066f7990be5a0e47e50da4bf38811191eb06916803881a12fab7a854b1
6
+ metadata.gz: f00e7da2c78ae1c88998b05af02f4ebea701a22797a0a103072ce7bc2532331ecfa2202f677aa9f107e30b33b866421648a98179ddc5c4239b33ca926e584490
7
+ data.tar.gz: 715b1015481ed2bb317dcbbf6834832fe8df5e3542f0824606c4127c23811357459a995585c27cfd4366410b5d9ca79843cf1cee3ef04357e2a416d2e042379d
data/.rubocop.yml CHANGED
@@ -8,10 +8,17 @@ require:
8
8
  AllCops:
9
9
  NewCops: enable
10
10
  TargetRubyVersion: 2.7
11
+ Exclude:
12
+ - 'examples/**/*'
13
+ - 'vendor/**/*'
14
+ - 'spec/fixtures/**/*'
15
+ - 'tmp/**/*'
16
+ - '.git/**/*'
17
+ - 'bin/*'
11
18
 
12
19
  Lint/RescueException:
13
20
  Exclude:
14
- - lib/bcdd/result/transitions.rb
21
+ - lib/bcdd/result/transitions/tracking/enabled.rb
15
22
 
16
23
  Layout/LineLength:
17
24
  Max: 120
@@ -25,6 +32,10 @@ Layout/MultilineMethodCallIndentation:
25
32
  Lint/UnderscorePrefixedVariableName:
26
33
  Enabled: false
27
34
 
35
+ Lint/UnusedMethodArgument:
36
+ Exclude:
37
+ - lib/bcdd/result/transitions/listener.rb
38
+
28
39
  Style/AccessModifierDeclarations:
29
40
  Enabled: false
30
41
 
@@ -65,6 +76,10 @@ Metrics/ClassLength:
65
76
  - lib/bcdd/result.rb
66
77
  - test/**/*.rb
67
78
 
79
+ Metrics/AbcSize:
80
+ Exclude:
81
+ - lib/bcdd/result/transitions/tracking/enabled.rb
82
+
68
83
  Minitest/MultipleAssertions:
69
84
  Enabled: false
70
85
 
data/CHANGELOG.md CHANGED
@@ -1,44 +1,98 @@
1
1
  - [\[Unreleased\]](#unreleased)
2
- - [\[0.12.0\] - 2024-01-07](#0120---2024-01-07)
2
+ - [\[0.13.0\] - 2024-02-01](#0130---2024-02-01)
3
3
  - [Added](#added)
4
4
  - [Changed](#changed)
5
- - [\[0.11.0\] - 2024-01-02](#0110---2024-01-02)
5
+ - [\[0.12.0\] - 2024-01-07](#0120---2024-01-07)
6
6
  - [Added](#added-1)
7
7
  - [Changed](#changed-1)
8
- - [\[0.10.0\] - 2023-12-31](#0100---2023-12-31)
8
+ - [\[0.11.0\] - 2024-01-02](#0110---2024-01-02)
9
9
  - [Added](#added-2)
10
- - [\[0.9.1\] - 2023-12-12](#091---2023-12-12)
11
10
  - [Changed](#changed-2)
12
- - [Fixed](#fixed)
13
- - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
11
+ - [\[0.10.0\] - 2023-12-31](#0100---2023-12-31)
14
12
  - [Added](#added-3)
13
+ - [\[0.9.1\] - 2023-12-12](#091---2023-12-12)
15
14
  - [Changed](#changed-3)
16
- - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
15
+ - [Fixed](#fixed)
16
+ - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
17
17
  - [Added](#added-4)
18
18
  - [Changed](#changed-4)
19
- - [Removed](#removed)
20
- - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
19
+ - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
21
20
  - [Added](#added-5)
22
21
  - [Changed](#changed-5)
23
- - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
22
+ - [Removed](#removed)
23
+ - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
24
24
  - [Added](#added-6)
25
25
  - [Changed](#changed-6)
26
- - [\[0.5.0\] - 2023-10-09](#050---2023-10-09)
26
+ - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
27
27
  - [Added](#added-7)
28
- - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
29
- - [Added](#added-8)
30
28
  - [Changed](#changed-7)
29
+ - [\[0.5.0\] - 2023-10-09](#050---2023-10-09)
30
+ - [Added](#added-8)
31
+ - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
32
+ - [Added](#added-9)
33
+ - [Changed](#changed-8)
31
34
  - [Removed](#removed-1)
32
35
  - [\[0.3.0\] - 2023-09-26](#030---2023-09-26)
33
- - [Added](#added-9)
34
- - [\[0.2.0\] - 2023-09-26](#020---2023-09-26)
35
36
  - [Added](#added-10)
37
+ - [\[0.2.0\] - 2023-09-26](#020---2023-09-26)
38
+ - [Added](#added-11)
36
39
  - [Removed](#removed-2)
37
40
  - [\[0.1.0\] - 2023-09-25](#010---2023-09-25)
38
- - [Added](#added-11)
41
+ - [Added](#added-12)
39
42
 
40
43
  ## [Unreleased]
41
44
 
45
+ ## [0.13.0] - 2024-02-01
46
+
47
+ ### Added
48
+
49
+ - `BCDD::Result::Context#and_expose` - Raise error when trying to expose an invalid key.
50
+
51
+ - `BCDD::Result.configuration` - Accept freeze option (default: `true`). When true, the configuration will be frozen after the block execution.
52
+
53
+ - `BCDD::Result.config.transitions` - Add transitions feature configuration.
54
+ - `config.transitions.listener =` - Set a listener to be called during the result transitions tracking. It must be a class that includes `BCDD::Result::Transitions::Listener`.
55
+ - `config.transitions.trace_id =` - Set a lambda (must have arity 0) to be called to get a trace id. Use to correlate different or the same operation (executed multiple times).
56
+
57
+ - Add transitions metadata property `:ids_matrix`. It is a simplification of the `:ids_tree` property. The matrix rows are the direct transitions from the root transition block, and the columns are the transitions nested from the direct transitions.
58
+ ```ruby
59
+ # ids_matrix # {
60
+ 0 | 1 | 2 | 3 | 4 # 0 => [0, 0],
61
+ - | - | - | - | - # 1 => [1, 1],
62
+ 0 | | | | # 2 => [1, 2],
63
+ 1 | 1 | 2 | | # 3 => [2, 1],
64
+ 2 | 3 | | | # 4 => [3, 1],
65
+ 3 | 4 | 5 | 6 | 7 # 5 => [3, 2],
66
+ 4 | 8 | | | # 6 => [3, 3],
67
+ # 7 => [3, 4],
68
+ # 8 => [4, 1]
69
+ # }
70
+ ```
71
+
72
+ - Add `BCDD::Result::Transitions::Listeners[]` - It creates a listener of listeners, which will be called in the order they were added.
73
+
74
+ ### Changed
75
+
76
+ - **(BREAKING)** Rename `Given()` type from `:given` to `:_given_`.
77
+
78
+ - **(BREAKING)** Rename `Continue()` type from `:continued` to `:_continue_`.
79
+
80
+ - **(BREAKING)** Move transition `:source` from `:and_then` to `:result` property.
81
+
82
+ - **(BREAKING)** Rename transitions metadata property `:tree_map` to `:ids_tree`.
83
+ ```ruby
84
+ # ids_tree #
85
+ 0 # [0, [
86
+ |- 1 # [1, [[2, []]]],
87
+ | |- 2 # [3, []],
88
+ |- 3 # [4, [
89
+ |- 4 # [5, []],
90
+ | |- 5 # [6, [[7, []]]]
91
+ | |- 6 # ]],
92
+ | |- 7 # [8, []]
93
+ |- 8 # ]]
94
+ ```
95
+
42
96
  ## [0.12.0] - 2024-01-07
43
97
 
44
98
  ### Added