bcdd-result 0.11.0 → 0.13.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +16 -1
  3. data/CHANGELOG.md +97 -15
  4. data/README.md +508 -95
  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 +49 -0
  38. data/lib/bcdd/result/callable_and_then/config.rb +15 -0
  39. data/lib/bcdd/result/callable_and_then/error.rb +11 -0
  40. data/lib/bcdd/result/callable_and_then.rb +9 -0
  41. data/lib/bcdd/result/config/switchers/features.rb +5 -1
  42. data/lib/bcdd/result/config.rb +15 -4
  43. data/lib/bcdd/result/context/callable_and_then.rb +39 -0
  44. data/lib/bcdd/result/context/expectations/mixin.rb +2 -2
  45. data/lib/bcdd/result/context/mixin.rb +3 -3
  46. data/lib/bcdd/result/context/success.rb +29 -7
  47. data/lib/bcdd/result/context.rb +34 -16
  48. data/lib/bcdd/result/contract/for_types.rb +1 -1
  49. data/lib/bcdd/result/contract/for_types_and_values.rb +2 -0
  50. data/lib/bcdd/result/error.rb +20 -11
  51. data/lib/bcdd/result/expectations/mixin.rb +3 -3
  52. data/lib/bcdd/result/expectations.rb +6 -6
  53. data/lib/bcdd/result/ignored_types.rb +14 -0
  54. data/lib/bcdd/result/mixin.rb +3 -3
  55. data/lib/bcdd/result/transitions/config.rb +26 -0
  56. data/lib/bcdd/result/transitions/listener.rb +51 -0
  57. data/lib/bcdd/result/transitions/listeners.rb +87 -0
  58. data/lib/bcdd/result/transitions/tracking/disabled.rb +4 -6
  59. data/lib/bcdd/result/transitions/tracking/enabled.rb +103 -24
  60. data/lib/bcdd/result/transitions/tracking.rb +8 -3
  61. data/lib/bcdd/result/transitions/tree.rb +36 -6
  62. data/lib/bcdd/result/transitions.rb +11 -14
  63. data/lib/bcdd/result/version.rb +1 -1
  64. data/lib/bcdd/result.rb +39 -22
  65. data/sig/bcdd/result/callable_and_then.rbs +60 -0
  66. data/sig/bcdd/result/config.rbs +3 -0
  67. data/sig/bcdd/result/context.rbs +65 -4
  68. data/sig/bcdd/result/error.rbs +9 -6
  69. data/sig/bcdd/result/expectations.rbs +4 -4
  70. data/sig/bcdd/result/ignored_types.rbs +9 -0
  71. data/sig/bcdd/result/transitions.rbs +107 -7
  72. data/sig/bcdd/result.rbs +10 -6
  73. metadata +48 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0043be8de0b26bac0d803f067537fbc65e4a54f3a38a2644c01bd987d87c7b5
4
- data.tar.gz: f152ac78abb8847721f2b2ec3c3fd1db66016c421f5348f038a79501a86f761a
3
+ metadata.gz: 3375c9c36b12a792a50e285c32f1526f660360b95d2a3d85103b9147c7c61a68
4
+ data.tar.gz: c1f399841dad795a4fa10bc15a4c0dac774c104dc9b2237dc5b602e5956c54e5
5
5
  SHA512:
6
- metadata.gz: 17abccc11ad3c7ccd2cedc6f9634659decee457e08ef1c8dfb13d59d2afc7390fdeb6fc1d48749362d691815c41b789197d2bf79b5f57f9e7e07ad770ddbb304
7
- data.tar.gz: 2e0b67fbc99ef2a3a8187a2d42212e8cbadca22a2c2625c3be8e7bbfb5d2b92689b9a27b7592a295863e89437e912d34cb8f6e5a2e77e9c0afdbcbf7c4591bd6
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,41 +1,115 @@
1
1
  - [\[Unreleased\]](#unreleased)
2
- - [\[0.11.0\] - 2024-01-02](#0110---2024-01-02)
2
+ - [\[0.13.0\] - 2024-02-01](#0130---2024-02-01)
3
3
  - [Added](#added)
4
4
  - [Changed](#changed)
5
- - [\[0.10.0\] - 2023-12-31](#0100---2023-12-31)
5
+ - [\[0.12.0\] - 2024-01-07](#0120---2024-01-07)
6
6
  - [Added](#added-1)
7
- - [\[0.9.1\] - 2023-12-12](#091---2023-12-12)
8
7
  - [Changed](#changed-1)
9
- - [Fixed](#fixed)
10
- - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
8
+ - [\[0.11.0\] - 2024-01-02](#0110---2024-01-02)
11
9
  - [Added](#added-2)
12
10
  - [Changed](#changed-2)
13
- - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
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
- - [Removed](#removed)
17
- - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
15
+ - [Fixed](#fixed)
16
+ - [\[0.9.0\] - 2023-12-12](#090---2023-12-12)
18
17
  - [Added](#added-4)
19
18
  - [Changed](#changed-4)
20
- - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
19
+ - [\[0.8.0\] - 2023-12-11](#080---2023-12-11)
21
20
  - [Added](#added-5)
22
21
  - [Changed](#changed-5)
23
- - [\[0.5.0\] - 2023-10-09](#050---2023-10-09)
22
+ - [Removed](#removed)
23
+ - [\[0.7.0\] - 2023-10-27](#070---2023-10-27)
24
24
  - [Added](#added-6)
25
- - [\[0.4.0\] - 2023-09-28](#040---2023-09-28)
26
- - [Added](#added-7)
27
25
  - [Changed](#changed-6)
26
+ - [\[0.6.0\] - 2023-10-11](#060---2023-10-11)
27
+ - [Added](#added-7)
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)
28
34
  - [Removed](#removed-1)
29
35
  - [\[0.3.0\] - 2023-09-26](#030---2023-09-26)
30
- - [Added](#added-8)
36
+ - [Added](#added-10)
31
37
  - [\[0.2.0\] - 2023-09-26](#020---2023-09-26)
32
- - [Added](#added-9)
38
+ - [Added](#added-11)
33
39
  - [Removed](#removed-2)
34
40
  - [\[0.1.0\] - 2023-09-25](#010---2023-09-25)
35
- - [Added](#added-10)
41
+ - [Added](#added-12)
36
42
 
37
43
  ## [Unreleased]
38
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
+
96
+ ## [0.12.0] - 2024-01-07
97
+
98
+ ### Added
99
+
100
+ - Add `BCDD::Result#and_then!` and `BCDD::Result::Context#and_then!` to execute a callable object (any object that responds to `#call`) to produce a result. The main difference between the `#and_then` and `#and_then!` is that the latter does not check the result source.
101
+ - **Attention:** to ensure the correct behavior, do not mix `#and_then` and `#and_then!` in the same result chain.
102
+ - This feature is turned off by default. You can enable it through the `BCDD::Result.config.feature.enable!(:and_then!)`.
103
+ - The method called by default (`:call`) can be changed through `BCDD::Result.config.and_then!.default_method_name_to_call=`.
104
+
105
+ ### Changed
106
+
107
+ - **(BREAKING)** Renames the subject concept/term to `source`. When a mixin is included/extended, it defines the `Success()` and `Failure()` methods. Since the results are generated in a context (instance or singleton where the mixin was used), they will have a defined source (instance or singleton itself).
108
+ > Definition of source
109
+ >
110
+ > From dictionary:
111
+ > * a place, person, or thing from which something comes or can be obtained.
112
+
39
113
  ## [0.11.0] - 2024-01-02
40
114
 
41
115
  ### Added
@@ -45,6 +119,14 @@
45
119
  ### Changed
46
120
 
47
121
  - **(BREAKING)** Rename halted concept to terminal. Failures are terminal by default, but you can make a success terminal by enabling the `:continue` addon.
122
+ > Definition of terminal
123
+ >
124
+ > From dictionary:
125
+ > * of, forming, or situated at the end or extremity of something.
126
+ > * the end of a railroad or other transport route, or a station at such a point.
127
+ >
128
+ > From Wikipedia:
129
+ > * A "terminus" or "terminal" is a station at the end of a railway line.
48
130
 
49
131
  - **(BREAKING)** Rename `BCDD::Result::Context::Success#and_expose` halted keyword argument to `terminal`.
50
132