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
@@ -0,0 +1,9 @@
1
+ class BCDD::Result
2
+ module IgnoredTypes
3
+ LIST: ::Set[::Symbol]
4
+ GIVEN: ::Symbol
5
+ CONTINUE: ::Symbol
6
+
7
+ def self.include?: (::Symbol) -> bool
8
+ end
9
+ end
@@ -1,5 +1,82 @@
1
1
  class BCDD::Result
2
2
  module Transitions
3
+ module Listener
4
+ module ClassMethods
5
+ def around_and_then?: () -> bool
6
+ def around_transitions?: () -> bool
7
+ end
8
+
9
+ extend ClassMethods
10
+
11
+ def around_transitions: (scope: Hash[Symbol, untyped]) { () -> untyped } -> untyped
12
+
13
+ def on_start: (scope: Hash[Symbol, untyped]) -> untyped
14
+
15
+ def around_and_then: (scope: Hash[Symbol, untyped], and_then: Hash[Symbol, untyped]) { () -> untyped } -> untyped
16
+
17
+ def on_record: (record: Hash[Symbol, untyped] ) -> untyped
18
+
19
+ def on_finish: (transitions: Hash[Symbol, untyped] ) -> untyped
20
+
21
+ def before_interruption: (exception: ::Exception, transitions: Hash[Symbol, untyped]) -> untyped
22
+ end
23
+
24
+ class Listeners
25
+ class Chain
26
+ include Listener
27
+
28
+ attr_reader listeners: Hash[Symbol, untyped]
29
+
30
+ def initialize: (Array[untyped]) -> void
31
+
32
+ def new: () -> Listeners
33
+
34
+ private
35
+
36
+ def listener?: (untyped, untyped) -> bool
37
+ end
38
+
39
+ def self.[]: (*untyped) -> Chain
40
+
41
+ private attr_reader listeners: Array[Listener]
42
+ private attr_reader around_and_then_listener: untyped
43
+ private attr_reader around_transitions_listener: untyped
44
+
45
+ def initialize: (Array[Listener], untyped, untyped) -> void
46
+
47
+ def around_transitions: (scope: Hash[Symbol, untyped]) { () -> untyped } -> untyped
48
+
49
+ def on_start: (scope: Hash[Symbol, untyped]) -> untyped
50
+
51
+ def around_and_then: (scope: Hash[Symbol, untyped], and_then: Hash[Symbol, untyped]) { () -> untyped } -> untyped
52
+
53
+ def on_record: (record: Hash[Symbol, untyped] ) -> untyped
54
+
55
+ def on_finish: (transitions: Hash[Symbol, untyped] ) -> untyped
56
+
57
+ def before_interruption: (exception: ::Exception, transitions: Hash[Symbol, untyped]) -> untyped
58
+ end
59
+
60
+ module Listener::Null
61
+ extend Listener
62
+
63
+ def self.new: () -> untyped
64
+ end
65
+
66
+ class Config
67
+ include ::Singleton
68
+
69
+ attr_reader listener: untyped
70
+ attr_reader trace_id: ::Proc
71
+
72
+ def self.instance: -> Config
73
+
74
+ def initialize: -> void
75
+
76
+ def listener=: (Listener) -> void
77
+ def trace_id=: (::Proc) -> void
78
+ end
79
+
3
80
  class Tree
4
81
  class Node
5
82
  attr_reader id: Integer
@@ -32,7 +109,8 @@ class BCDD::Result
32
109
  def parent_value: () -> untyped
33
110
  def current_value: () -> untyped
34
111
  def insert: (untyped) -> Node
35
- def insert!: (untyped) -> Node
112
+ def insert!: (untyped) -> Tree
113
+ def move_to!: (Node) -> Tree
36
114
  def move_up!: (?Integer level) -> Tree
37
115
  def move_down!: (?Integer level) -> Tree
38
116
  def move_to_root!: () -> Tree
@@ -40,6 +118,10 @@ class BCDD::Result
40
118
  NestedIds: ^(Node) -> Array[untyped]
41
119
 
42
120
  def nested_ids: () -> Array[untyped]
121
+
122
+ IdsMatrix: ::Proc
123
+
124
+ def ids_matrix: () -> untyped
43
125
  end
44
126
 
45
127
  module Tracking
@@ -52,31 +134,47 @@ class BCDD::Result
52
134
  class Enabled
53
135
  private attr_accessor tree: Transitions::Tree
54
136
  private attr_accessor records: Array[Hash[Symbol, untyped]]
137
+ private attr_accessor listener: untyped
55
138
  private attr_accessor root_started_at: Integer
56
139
 
57
- def start: (name: String, desc: String) -> void
58
- def finish: (result: BCDD::Result) -> void
140
+ def exec: (untyped, untyped) { () -> untyped } -> untyped
141
+ def err!: (::Exception, untyped) -> void
59
142
  def reset!: () -> void
60
143
  def record: (BCDD::Result) -> void
61
- def record_and_then: ((untyped), untyped, untyped) { () -> BCDD::Result } -> BCDD::Result
144
+ def record_and_then: ((untyped), untyped) { () -> untyped } -> untyped
145
+ def reset_and_then!: () -> void
62
146
 
63
147
  private
64
148
 
149
+ def start: (String, String) -> [Transitions::Tree::Node, Hash[Symbol, untyped]]
150
+ def finish: (untyped) -> untyped
151
+
65
152
  TreeNodeValueNormalizer: ^(Integer, Array[untyped]) -> untyped
66
153
 
67
154
  def root_start: (Array[untyped]) -> void
68
155
 
69
156
  def track: (BCDD::Result, time: Time) -> void
157
+ def track_record: (BCDD::Result, Time) -> Hash[Symbol, untyped]
70
158
 
71
159
  def now_in_milliseconds: () -> Integer
160
+
161
+ def map_transitions: () -> Hash[Symbol, untyped]
162
+
163
+ def build_listener: () -> Listener
72
164
  end
73
165
 
74
166
  module Disabled
75
- def self.start: (name: String, desc: String) -> void
76
- def self.finish: (result: BCDD::Result) -> void
167
+ def self.exec: (untyped, untyped) { () -> untyped } -> untyped
168
+ def self.err!: (::Exception) -> void
77
169
  def self.reset!: () -> void
78
170
  def self.record: (BCDD::Result) -> void
79
- def self.record_and_then: ((untyped), untyped, untyped) { () -> BCDD::Result } -> BCDD::Result
171
+ def self.record_and_then: ((untyped), untyped) { () -> BCDD::Result } -> BCDD::Result
172
+ def self.reset_and_then!: () -> void
173
+
174
+ private
175
+
176
+ def self.start: (String, String) -> void
177
+ def self.finish: (untyped) -> untyped
80
178
  end
81
179
 
82
180
  def self.instance: () -> (Enabled | singleton(Disabled))
@@ -84,6 +182,8 @@ class BCDD::Result
84
182
 
85
183
  THREAD_VAR_NAME: Symbol
86
184
 
185
+ EnsureResult: ^(untyped) -> BCDD::Result
186
+
87
187
  def self.tracking: () -> (Tracking::Enabled | singleton(Tracking::Disabled))
88
188
  end
89
189
  end
data/sig/bcdd/result.rbs CHANGED
@@ -4,17 +4,18 @@ class BCDD::Result
4
4
  private attr_reader type_checker: BCDD::Result::Contract::TypeChecker
5
5
 
6
6
  attr_reader data: BCDD::Result::Data
7
- attr_reader subject: untyped
7
+ attr_reader source: untyped
8
8
  attr_reader terminal: bool
9
9
  attr_reader transitions: Hash[Symbol, untyped]
10
10
 
11
11
  def self.config: -> BCDD::Result::Config
12
- def self.configuration: { (BCDD::Result::Config) -> void } -> BCDD::Result::Config
12
+ def self.configuration: (freeze: bool) { (BCDD::Result::Config) -> void } -> (bool | BCDD::Result::Config)
13
+ def self.transitions: (name: untyped, desc: untyped) { () -> untyped } -> BCDD::Result
13
14
 
14
15
  def initialize: (
15
16
  type: Symbol,
16
17
  value: untyped,
17
- ?subject: untyped,
18
+ ?source: untyped,
18
19
  ?expectations: BCDD::Result::Contract::Evaluator,
19
20
  ?terminal: bool
20
21
  ) -> void
@@ -33,7 +34,9 @@ class BCDD::Result
33
34
  def on_failure: (*Symbol) { (untyped, Symbol) -> void } -> BCDD::Result
34
35
  def on_unknown: () { (untyped, Symbol) -> void } -> BCDD::Result
35
36
 
36
- def and_then: (?Symbol method_name, ?untyped context) ?{ (untyped) -> untyped } -> untyped
37
+ def and_then: (?Symbol method_name, ?untyped injected_value) ?{ (untyped) -> untyped } -> untyped
38
+
39
+ def and_then!: (untyped, ?untyped injected_value, _call: (Symbol | nil)) -> untyped
37
40
 
38
41
  def handle: () { (BCDD::Result::Handler) -> void } -> untyped
39
42
 
@@ -51,10 +54,11 @@ class BCDD::Result
51
54
 
52
55
  def kind: -> Symbol
53
56
  def known: (Proc) -> untyped
54
- def call_and_then_subject_method: (Symbol, untyped) -> BCDD::Result
55
- def call_and_then_subject_method!: (untyped, untyped) -> BCDD::Result
57
+ def call_and_then_source_method: (Symbol, untyped) -> BCDD::Result
58
+ def call_and_then_source_method!: (untyped, untyped) -> BCDD::Result
56
59
  def call_and_then_block: (untyped) -> BCDD::Result
57
60
  def call_and_then_block!: (untyped) -> BCDD::Result
61
+ def call_and_then_callable!: (untyped, value: untyped, injected_value: untyped, method_name: (Symbol | nil)) -> BCDD::Result
58
62
  def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Result
59
63
  end
60
64
 
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcdd-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-02 00:00:00.000000000 Z
11
+ date: 2024-02-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Empower Ruby apps with pragmatic use of Result pattern (monad), Railway
14
- Oriented Programming, and B/CDD.
13
+ description: Unleash a pragmatic and observable use of Result Pattern and Railway-Oriented
14
+ Programming in Ruby.
15
15
  email:
16
16
  - rodrigo.serradura@gmail.com
17
17
  executables: []
@@ -26,8 +26,43 @@ files:
26
26
  - README.md
27
27
  - Rakefile
28
28
  - Steepfile
29
+ - examples/multiple_listeners/Rakefile
30
+ - examples/multiple_listeners/app/models/account.rb
31
+ - examples/multiple_listeners/app/models/account/member.rb
32
+ - examples/multiple_listeners/app/models/account/owner_creation.rb
33
+ - examples/multiple_listeners/app/models/user.rb
34
+ - examples/multiple_listeners/app/models/user/creation.rb
35
+ - examples/multiple_listeners/app/models/user/token.rb
36
+ - examples/multiple_listeners/app/models/user/token/creation.rb
37
+ - examples/multiple_listeners/config.rb
38
+ - examples/multiple_listeners/config/boot.rb
39
+ - examples/multiple_listeners/config/initializers/bcdd.rb
40
+ - examples/multiple_listeners/db/setup.rb
41
+ - examples/multiple_listeners/lib/bcdd/result/rollback_on_failure.rb
42
+ - examples/multiple_listeners/lib/bcdd/result/transitions_record.rb
43
+ - examples/multiple_listeners/lib/runtime_breaker.rb
44
+ - examples/multiple_listeners/lib/transitions_listener/stdout.rb
45
+ - examples/single_listener/Rakefile
46
+ - examples/single_listener/app/models/account.rb
47
+ - examples/single_listener/app/models/account/member.rb
48
+ - examples/single_listener/app/models/account/owner_creation.rb
49
+ - examples/single_listener/app/models/user.rb
50
+ - examples/single_listener/app/models/user/creation.rb
51
+ - examples/single_listener/app/models/user/token.rb
52
+ - examples/single_listener/app/models/user/token/creation.rb
53
+ - examples/single_listener/config.rb
54
+ - examples/single_listener/config/boot.rb
55
+ - examples/single_listener/config/initializers/bcdd.rb
56
+ - examples/single_listener/db/setup.rb
57
+ - examples/single_listener/lib/bcdd/result/rollback_on_failure.rb
58
+ - examples/single_listener/lib/runtime_breaker.rb
59
+ - examples/single_listener/lib/single_transitions_listener.rb
29
60
  - lib/bcdd-result.rb
30
61
  - lib/bcdd/result.rb
62
+ - lib/bcdd/result/callable_and_then.rb
63
+ - lib/bcdd/result/callable_and_then/caller.rb
64
+ - lib/bcdd/result/callable_and_then/config.rb
65
+ - lib/bcdd/result/callable_and_then/error.rb
31
66
  - lib/bcdd/result/config.rb
32
67
  - lib/bcdd/result/config/options.rb
33
68
  - lib/bcdd/result/config/switcher.rb
@@ -36,6 +71,7 @@ files:
36
71
  - lib/bcdd/result/config/switchers/features.rb
37
72
  - lib/bcdd/result/config/switchers/pattern_matching.rb
38
73
  - lib/bcdd/result/context.rb
74
+ - lib/bcdd/result/context/callable_and_then.rb
39
75
  - lib/bcdd/result/context/expectations.rb
40
76
  - lib/bcdd/result/context/expectations/mixin.rb
41
77
  - lib/bcdd/result/context/failure.rb
@@ -57,16 +93,21 @@ files:
57
93
  - lib/bcdd/result/failure/methods.rb
58
94
  - lib/bcdd/result/handler.rb
59
95
  - lib/bcdd/result/handler/allowed_types.rb
96
+ - lib/bcdd/result/ignored_types.rb
60
97
  - lib/bcdd/result/mixin.rb
61
98
  - lib/bcdd/result/success.rb
62
99
  - lib/bcdd/result/success/methods.rb
63
100
  - lib/bcdd/result/transitions.rb
101
+ - lib/bcdd/result/transitions/config.rb
102
+ - lib/bcdd/result/transitions/listener.rb
103
+ - lib/bcdd/result/transitions/listeners.rb
64
104
  - lib/bcdd/result/transitions/tracking.rb
65
105
  - lib/bcdd/result/transitions/tracking/disabled.rb
66
106
  - lib/bcdd/result/transitions/tracking/enabled.rb
67
107
  - lib/bcdd/result/transitions/tree.rb
68
108
  - lib/bcdd/result/version.rb
69
109
  - sig/bcdd/result.rbs
110
+ - sig/bcdd/result/callable_and_then.rbs
70
111
  - sig/bcdd/result/config.rbs
71
112
  - sig/bcdd/result/context.rbs
72
113
  - sig/bcdd/result/contract.rbs
@@ -74,6 +115,7 @@ files:
74
115
  - sig/bcdd/result/error.rbs
75
116
  - sig/bcdd/result/expectations.rbs
76
117
  - sig/bcdd/result/handler.rbs
118
+ - sig/bcdd/result/ignored_types.rbs
77
119
  - sig/bcdd/result/mixin.rbs
78
120
  - sig/bcdd/result/transitions.rbs
79
121
  - sig/bcdd/result/version.rbs
@@ -104,6 +146,6 @@ requirements: []
104
146
  rubygems_version: 3.5.3
105
147
  signing_key:
106
148
  specification_version: 4
107
- summary: Empower Ruby apps with pragmatic use of Result pattern (monad), Railway Oriented
108
- Programming, and B/CDD.
149
+ summary: Unleash a pragmatic and observable use of Result Pattern and Railway-Oriented
150
+ Programming in Ruby.
109
151
  test_files: []