bcdd-result 0.11.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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: []