bcdd-result 0.4.0 → 0.6.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.
data/sig/bcdd/result.rbs CHANGED
@@ -6,14 +6,20 @@ end
6
6
 
7
7
  class BCDD::Result
8
8
  private attr_accessor unknown: bool
9
+ private attr_reader type_checker: BCDD::Result::Expectations::TypeChecker
9
10
 
10
- attr_reader _type: BCDD::Result::Type
11
- attr_reader value: untyped
11
+ attr_reader data: BCDD::Result::Data
12
12
  attr_reader subject: untyped
13
13
 
14
- def initialize: (type: Symbol, value: untyped, ?subject: untyped) -> void
14
+ def initialize: (
15
+ type: Symbol,
16
+ value: untyped,
17
+ ?subject: untyped,
18
+ ?expectations: BCDD::Result::Expectations::Contract::Evaluator
19
+ ) -> void
15
20
 
16
21
  def type: -> Symbol
22
+ def value: -> untyped
17
23
 
18
24
  def success?: (?Symbol type) -> bool
19
25
  def failure?: (?Symbol type) -> bool
@@ -25,11 +31,9 @@ class BCDD::Result
25
31
  def on_failure: (*Symbol) { (untyped, Symbol) -> void } -> BCDD::Result
26
32
  def on_unknown: () { (untyped, Symbol) -> void } -> BCDD::Result
27
33
 
28
- def and_then: (?Symbol method_name) { (untyped) -> untyped } -> BCDD::Result
34
+ def and_then: (?Symbol method_name, ?untyped context) ?{ (untyped) -> untyped } -> BCDD::Result
29
35
 
30
- def handle: { (BCDD::Result::Handler) -> void } -> untyped
31
-
32
- def data: -> BCDD::Result::Data
36
+ def handle: () { (BCDD::Result::Handler) -> void } -> untyped
33
37
 
34
38
  def ==: (untyped) -> bool
35
39
  def hash: -> Integer
@@ -45,7 +49,7 @@ class BCDD::Result
45
49
 
46
50
  def name: -> Symbol
47
51
  def known: (Proc) -> untyped
48
- def call_subject_method: (Symbol) -> BCDD::Result
52
+ def call_subject_method: (Symbol, untyped) -> BCDD::Result
49
53
  def ensure_result_object: (untyped, origin: Symbol) -> BCDD::Result
50
54
  end
51
55
 
@@ -65,44 +69,26 @@ end
65
69
 
66
70
  class BCDD::Result
67
71
  module Mixin
68
- def Success: (Symbol type, ?untyped value) -> BCDD::Result::Success
69
-
70
- def Failure: (Symbol type, ?untyped value) -> BCDD::Result::Failure
71
- end
72
- end
73
-
74
- class BCDD::Result
75
- class Handler
76
- UNDEFINED: Object
72
+ module Methods
73
+ def Success: (Symbol type, ?untyped value) -> BCDD::Result::Success
77
74
 
78
- def initialize: (BCDD::Result) -> void
75
+ def Failure: (Symbol type, ?untyped value) -> BCDD::Result::Failure
76
+ end
79
77
 
80
- def []: (*Symbol) { (untyped, Symbol) -> void } -> untyped
81
- def failure: (*Symbol) { (untyped, Symbol) -> void } -> untyped
82
- def success: (*Symbol) { (untyped, Symbol) -> void } -> untyped
83
- def unknown: () { (untyped, Symbol) -> void } -> untyped
78
+ module Addons
79
+ module Continuable
80
+ include BCDD::Result::Mixin::Methods
84
81
 
85
- alias type []
82
+ private def Continue: (untyped) -> BCDD::Result::Success
83
+ end
86
84
 
87
- private
85
+ OPTIONS: Hash[Symbol, Module]
88
86
 
89
- attr_reader _type: BCDD::Result::Type
90
- attr_reader result: BCDD::Result
91
-
92
- def outcome?: -> bool
93
- def outcome=: (Proc) -> void
94
- def outcome: -> untyped
87
+ def self.options: (Array[Symbol]) -> Array[Module]
88
+ end
95
89
  end
96
- end
97
-
98
- class BCDD::Result
99
- class Type
100
- attr_reader to_sym: Symbol
101
90
 
102
- def initialize: (Symbol) -> void
103
-
104
- def in?: (Array[Symbol], allow_empty: bool) -> bool
105
- end
91
+ def self.mixin: (?with: Array[Symbol]) -> Module
106
92
  end
107
93
 
108
94
  class BCDD::Result
@@ -113,7 +99,7 @@ class BCDD::Result
113
99
  attr_reader to_h: Hash[Symbol, untyped]
114
100
  attr_reader to_a: [Symbol, Symbol, untyped]
115
101
 
116
- def initialize: (BCDD::Result) -> void
102
+ def initialize: (Symbol, Symbol, untyped) -> void
117
103
 
118
104
  def inspect: -> String
119
105
 
@@ -146,5 +132,208 @@ class BCDD::Result
146
132
  def self.build: (subject: untyped, method: ::Method)
147
133
  -> BCDD::Result::Error::WrongSubjectMethodArity
148
134
  end
135
+
136
+ class UnhandledTypes < BCDD::Result::Error
137
+ def self.build: (types: Set[Symbol])
138
+ -> BCDD::Result::Error::UnhandledTypes
139
+ end
140
+ end
141
+ end
142
+
143
+ class BCDD::Result
144
+ class Handler
145
+ UNDEFINED: Object
146
+
147
+ def initialize: (
148
+ BCDD::Result,
149
+ type_checker: BCDD::Result::Expectations::TypeChecker
150
+ ) -> void
151
+
152
+ def []: (*Symbol) { (untyped, Symbol) -> void } -> untyped
153
+ def failure: (*Symbol) { (untyped, Symbol) -> void } -> untyped
154
+ def success: (*Symbol) { (untyped, Symbol) -> void } -> untyped
155
+ def unknown: () { (untyped, Symbol) -> void } -> untyped
156
+
157
+ alias type []
158
+
159
+ private
160
+
161
+ attr_reader result: BCDD::Result
162
+ attr_reader allowed_types: BCDD::Result::Handler::AllowedTypes
163
+
164
+ def outcome?: -> bool
165
+ def outcome=: (Proc) -> void
166
+ def outcome: -> untyped
167
+ end
168
+ end
169
+
170
+ class BCDD::Result::Handler
171
+ class AllowedTypes
172
+ attr_reader unchecked: Set[Symbol]
173
+ attr_reader type_checker: BCDD::Result::Expectations::TypeChecker
174
+
175
+ def initialize: (
176
+ BCDD::Result::Expectations::TypeChecker
177
+ ) -> void
178
+
179
+ def allow?: (Array[Symbol]) -> bool
180
+ def allow_success?: (Array[Symbol]) -> bool
181
+ def allow_failure?: (Array[Symbol]) -> bool
182
+
183
+ def all_checked?: -> bool
184
+
185
+ private
186
+
187
+ def check!: (Array[Symbol], bool) -> bool
188
+ end
189
+ end
190
+
191
+ class BCDD::Result::Expectations
192
+ MIXIN_METHODS: String
193
+
194
+ def self.mixin: (
195
+ ?success: Hash[Symbol, untyped] | Array[Symbol],
196
+ ?failure: Hash[Symbol, untyped] | Array[Symbol]
197
+ ) -> Module
198
+
199
+ def self.evaluate: (
200
+ BCDD::Result::Data,
201
+ BCDD::Result::Expectations::Contract::Evaluator
202
+ ) -> BCDD::Result::Expectations::TypeChecker
203
+
204
+ def initialize: (
205
+ ?subject: untyped,
206
+ ?success: Hash[Symbol, untyped] | Array[Symbol],
207
+ ?failure: Hash[Symbol, untyped] | Array[Symbol],
208
+ ?contract: BCDD::Result::Expectations::Contract::Evaluator
209
+ ) -> void
210
+
211
+ def Success: (Symbol, ?untyped) -> BCDD::Result::Success
212
+ def Failure: (Symbol, ?untyped) -> BCDD::Result::Failure
213
+
214
+ private
215
+
216
+ attr_reader subject: untyped
217
+ attr_reader contract: BCDD::Result::Expectations::Contract::Evaluator
218
+ end
219
+
220
+ module BCDD::Result::Expectations::Mixin
221
+ METHODS: String
222
+
223
+ module Addons
224
+ module Continuable
225
+ private def Continue: (untyped) -> BCDD::Result::Success
226
+ end
227
+
228
+ OPTIONS: Hash[Symbol, Module]
229
+
230
+ def self.options: (Array[Symbol]) -> Array[Module]
231
+ end
232
+ end
233
+
234
+ module BCDD::Result::Expectations::Contract
235
+ NONE: BCDD::Result::Expectations::Contract::Evaluator
236
+
237
+ ToEnsure: ^(Hash[Symbol, untyped] | Array[Symbol])
238
+ -> BCDD::Result::Expectations::Contract::Evaluator
239
+
240
+ def self.new: (
241
+ success: Hash[Symbol, untyped] | Array[Symbol],
242
+ failure: Hash[Symbol, untyped] | Array[Symbol]
243
+ ) -> BCDD::Result::Expectations::Contract::Evaluator
244
+ end
245
+
246
+ class BCDD::Result::Expectations
247
+ class TypeChecker
248
+ attr_reader result_type: Symbol
249
+ attr_reader expectations: BCDD::Result::Expectations::Contract::Evaluator
250
+
251
+ def initialize: (
252
+ Symbol,
253
+ expectations: BCDD::Result::Expectations::Contract::Evaluator
254
+ ) -> void
255
+
256
+ def allow?: (Array[Symbol]) -> bool
257
+ def allow_success?: (Array[Symbol]) -> bool
258
+ def allow_failure?: (Array[Symbol]) -> bool
259
+
260
+ private
261
+
262
+ def validate: (
263
+ Array[Symbol],
264
+ expected: BCDD::Result::Expectations::Contract::Interface,
265
+ allow_empty: bool
266
+ ) -> bool
267
+ end
268
+ end
269
+
270
+ class BCDD::Result::Expectations::Error < BCDD::Result::Error
271
+ class UnexpectedType < BCDD::Result::Expectations::Error
272
+ def self.build: (type: Symbol, allowed_types: Set[Symbol])
273
+ -> BCDD::Result::Expectations::Error::UnexpectedType
274
+ end
275
+
276
+ class UnexpectedValue < BCDD::Result::Expectations::Error
277
+ def self.build: (type: Symbol, value: untyped)
278
+ -> BCDD::Result::Expectations::Error::UnexpectedValue
279
+ end
280
+ end
281
+
282
+ module BCDD::Result::Expectations::Contract
283
+ module Interface
284
+ def ==: (BCDD::Result::Expectations::Contract::Interface) -> bool
285
+
286
+ def allowed_types: -> Set[Symbol]
287
+
288
+ def type?: (Symbol) -> bool
289
+
290
+ def type!: (Symbol) -> Symbol
291
+
292
+ def type_and_value!: (BCDD::Result::Data) -> void
293
+
294
+ def !=: (untyped) -> bool
295
+ end
296
+ end
297
+
298
+ module BCDD::Result::Expectations::Contract
299
+ module Disabled
300
+ extend Interface
301
+
302
+ EMPTY_SET: Set[Symbol]
303
+ end
304
+ end
305
+
306
+ module BCDD::Result::Expectations::Contract
307
+ class ForTypes
308
+ include Interface
309
+
310
+ def initialize: (Array[Symbol]) -> void
311
+ end
312
+ end
313
+
314
+ module BCDD::Result::Expectations::Contract
315
+ class ForTypesAndValues
316
+ include Interface
317
+
318
+ def initialize: (Hash[Symbol, untyped]) -> void
319
+ end
320
+ end
321
+
322
+ module BCDD::Result::Expectations::Contract
323
+ class Evaluator
324
+ include Interface
325
+
326
+ attr_reader allowed_types: Set[Symbol]
327
+ attr_reader success: BCDD::Result::Expectations::Contract::Interface
328
+ attr_reader failure: BCDD::Result::Expectations::Contract::Interface
329
+
330
+ def initialize: (
331
+ BCDD::Result::Expectations::Contract::Interface,
332
+ BCDD::Result::Expectations::Contract::Interface
333
+ ) -> void
334
+
335
+ private
336
+
337
+ def for: (BCDD::Result::Data) -> BCDD::Result::Expectations::Contract::Interface
149
338
  end
150
339
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcdd-result
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.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: 2023-09-29 00:00:00.000000000 Z
11
+ date: 2023-10-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Empower Ruby apps with a pragmatic use of Railway Oriented Programming.
@@ -31,11 +31,21 @@ files:
31
31
  - lib/bcdd/result.rb
32
32
  - lib/bcdd/result/data.rb
33
33
  - lib/bcdd/result/error.rb
34
+ - lib/bcdd/result/expectations.rb
35
+ - lib/bcdd/result/expectations/contract.rb
36
+ - lib/bcdd/result/expectations/contract/disabled.rb
37
+ - lib/bcdd/result/expectations/contract/evaluator.rb
38
+ - lib/bcdd/result/expectations/contract/for_types.rb
39
+ - lib/bcdd/result/expectations/contract/for_types_and_values.rb
40
+ - lib/bcdd/result/expectations/contract/interface.rb
41
+ - lib/bcdd/result/expectations/error.rb
42
+ - lib/bcdd/result/expectations/mixin.rb
43
+ - lib/bcdd/result/expectations/type_checker.rb
34
44
  - lib/bcdd/result/failure.rb
35
45
  - lib/bcdd/result/handler.rb
46
+ - lib/bcdd/result/handler/allowed_types.rb
36
47
  - lib/bcdd/result/mixin.rb
37
48
  - lib/bcdd/result/success.rb
38
- - lib/bcdd/result/type.rb
39
49
  - lib/bcdd/result/version.rb
40
50
  - lib/result.rb
41
51
  - sig/bcdd/result.rbs
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class BCDD::Result
4
- class Type
5
- attr_reader :to_sym
6
-
7
- def initialize(type)
8
- @to_sym = type.to_sym
9
- end
10
-
11
- def in?(types, allow_empty: false)
12
- (allow_empty && types.empty?) || types.any?(to_sym)
13
- end
14
- end
15
-
16
- private_constant :Type
17
- end