fear 1.0.0 → 2.0.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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +27 -0
  3. data/.github/workflows/rubocop.yml +39 -0
  4. data/.github/workflows/spec.yml +42 -0
  5. data/.rubocop.yml +4 -60
  6. data/.simplecov +17 -0
  7. data/CHANGELOG.md +29 -1
  8. data/Gemfile +5 -5
  9. data/Gemfile.lock +86 -50
  10. data/README.md +240 -209
  11. data/Rakefile +72 -65
  12. data/examples/pattern_extracting.rb +10 -8
  13. data/examples/pattern_matching_binary_tree_set.rb +7 -2
  14. data/examples/pattern_matching_number_in_words.rb +48 -42
  15. data/fear.gemspec +33 -34
  16. data/lib/dry/types/fear/option.rb +125 -0
  17. data/lib/dry/types/fear.rb +8 -0
  18. data/lib/fear/await.rb +33 -0
  19. data/lib/fear/awaitable.rb +28 -0
  20. data/lib/fear/either.rb +15 -4
  21. data/lib/fear/either_api.rb +4 -0
  22. data/lib/fear/either_pattern_match.rb +9 -5
  23. data/lib/fear/empty_partial_function.rb +3 -1
  24. data/lib/fear/failure.rb +7 -7
  25. data/lib/fear/failure_pattern_match.rb +4 -0
  26. data/lib/fear/for.rb +4 -2
  27. data/lib/fear/for_api.rb +5 -1
  28. data/lib/fear/future.rb +157 -82
  29. data/lib/fear/future_api.rb +17 -4
  30. data/lib/fear/left.rb +3 -9
  31. data/lib/fear/left_pattern_match.rb +2 -0
  32. data/lib/fear/none.rb +28 -10
  33. data/lib/fear/none_pattern_match.rb +2 -0
  34. data/lib/fear/option.rb +30 -2
  35. data/lib/fear/option_api.rb +4 -0
  36. data/lib/fear/option_pattern_match.rb +8 -3
  37. data/lib/fear/partial_function/and_then.rb +4 -2
  38. data/lib/fear/partial_function/any.rb +2 -0
  39. data/lib/fear/partial_function/combined.rb +3 -1
  40. data/lib/fear/partial_function/empty.rb +6 -0
  41. data/lib/fear/partial_function/guard/and.rb +2 -0
  42. data/lib/fear/partial_function/guard/and3.rb +2 -0
  43. data/lib/fear/partial_function/guard/or.rb +2 -0
  44. data/lib/fear/partial_function/guard.rb +8 -6
  45. data/lib/fear/partial_function/lifted.rb +2 -0
  46. data/lib/fear/partial_function/or_else.rb +5 -1
  47. data/lib/fear/partial_function.rb +18 -9
  48. data/lib/fear/partial_function_class.rb +3 -1
  49. data/lib/fear/pattern_match.rb +3 -11
  50. data/lib/fear/pattern_matching_api.rb +6 -28
  51. data/lib/fear/promise.rb +7 -5
  52. data/lib/fear/right.rb +3 -9
  53. data/lib/fear/right_biased.rb +5 -3
  54. data/lib/fear/right_pattern_match.rb +4 -0
  55. data/lib/fear/some.rb +35 -8
  56. data/lib/fear/some_pattern_match.rb +2 -0
  57. data/lib/fear/struct.rb +237 -0
  58. data/lib/fear/success.rb +7 -8
  59. data/lib/fear/success_pattern_match.rb +4 -0
  60. data/lib/fear/try.rb +8 -2
  61. data/lib/fear/try_api.rb +4 -0
  62. data/lib/fear/try_pattern_match.rb +9 -5
  63. data/lib/fear/unit.rb +6 -2
  64. data/lib/fear/utils.rb +14 -2
  65. data/lib/fear/version.rb +4 -1
  66. data/lib/fear.rb +26 -44
  67. data/spec/dry/types/fear/option/constrained_spec.rb +22 -0
  68. data/spec/dry/types/fear/option/core_spec.rb +77 -0
  69. data/spec/dry/types/fear/option/default_spec.rb +21 -0
  70. data/spec/dry/types/fear/option/hash_spec.rb +58 -0
  71. data/spec/dry/types/fear/option/option_spec.rb +97 -0
  72. data/spec/fear/awaitable_spec.rb +19 -0
  73. data/spec/fear/done_spec.rb +7 -5
  74. data/spec/fear/either/mixin_spec.rb +4 -2
  75. data/spec/fear/either_pattern_match_spec.rb +10 -8
  76. data/spec/fear/either_pattern_matching_spec.rb +28 -0
  77. data/spec/fear/either_spec.rb +26 -0
  78. data/spec/fear/failure_spec.rb +57 -70
  79. data/spec/fear/for/mixin_spec.rb +15 -0
  80. data/spec/fear/for_spec.rb +19 -17
  81. data/spec/fear/future_spec.rb +477 -237
  82. data/spec/fear/guard_spec.rb +136 -24
  83. data/spec/fear/left_spec.rb +57 -70
  84. data/spec/fear/none_spec.rb +39 -43
  85. data/spec/fear/option/mixin_spec.rb +9 -7
  86. data/spec/fear/option_pattern_match_spec.rb +10 -8
  87. data/spec/fear/option_pattern_matching_spec.rb +34 -0
  88. data/spec/fear/option_spec.rb +142 -0
  89. data/spec/fear/partial_function/any_spec.rb +25 -0
  90. data/spec/fear/partial_function/empty_spec.rb +12 -10
  91. data/spec/fear/partial_function_and_then_spec.rb +39 -37
  92. data/spec/fear/partial_function_composition_spec.rb +46 -44
  93. data/spec/fear/partial_function_or_else_spec.rb +92 -90
  94. data/spec/fear/partial_function_spec.rb +91 -61
  95. data/spec/fear/pattern_match_spec.rb +19 -51
  96. data/spec/fear/pattern_matching_api_spec.rb +31 -0
  97. data/spec/fear/promise_spec.rb +23 -23
  98. data/spec/fear/right_biased/left.rb +28 -26
  99. data/spec/fear/right_biased/right.rb +51 -49
  100. data/spec/fear/right_spec.rb +48 -68
  101. data/spec/fear/some_spec.rb +30 -40
  102. data/spec/fear/success_spec.rb +40 -60
  103. data/spec/fear/try/mixin_spec.rb +19 -3
  104. data/spec/fear/try_api_spec.rb +23 -0
  105. data/spec/fear/try_pattern_match_spec.rb +10 -8
  106. data/spec/fear/try_pattern_matching_spec.rb +34 -0
  107. data/spec/fear/utils_spec.rb +16 -14
  108. data/spec/spec_helper.rb +13 -7
  109. data/spec/struct_pattern_matching_spec.rb +36 -0
  110. data/spec/struct_spec.rb +194 -0
  111. data/spec/support/dry_types.rb +6 -0
  112. metadata +128 -87
  113. data/.travis.yml +0 -13
  114. data/lib/fear/extractor/anonymous_array_splat_matcher.rb +0 -8
  115. data/lib/fear/extractor/any_matcher.rb +0 -15
  116. data/lib/fear/extractor/array_head_matcher.rb +0 -34
  117. data/lib/fear/extractor/array_matcher.rb +0 -38
  118. data/lib/fear/extractor/array_splat_matcher.rb +0 -14
  119. data/lib/fear/extractor/empty_list_matcher.rb +0 -18
  120. data/lib/fear/extractor/extractor_matcher.rb +0 -42
  121. data/lib/fear/extractor/grammar.rb +0 -201
  122. data/lib/fear/extractor/grammar.treetop +0 -129
  123. data/lib/fear/extractor/identifier_matcher.rb +0 -16
  124. data/lib/fear/extractor/matcher/and.rb +0 -36
  125. data/lib/fear/extractor/matcher.rb +0 -54
  126. data/lib/fear/extractor/named_array_splat_matcher.rb +0 -15
  127. data/lib/fear/extractor/pattern.rb +0 -55
  128. data/lib/fear/extractor/typed_identifier_matcher.rb +0 -24
  129. data/lib/fear/extractor/value_matcher.rb +0 -17
  130. data/lib/fear/extractor.rb +0 -108
  131. data/lib/fear/extractor_api.rb +0 -33
  132. data/spec/fear/extractor/array_matcher_spec.rb +0 -228
  133. data/spec/fear/extractor/extractor_matcher_spec.rb +0 -151
  134. data/spec/fear/extractor/grammar_array_spec.rb +0 -23
  135. data/spec/fear/extractor/identified_matcher_spec.rb +0 -47
  136. data/spec/fear/extractor/identifier_matcher_spec.rb +0 -66
  137. data/spec/fear/extractor/pattern_spec.rb +0 -32
  138. data/spec/fear/extractor/typed_identifier_matcher_spec.rb +0 -62
  139. data/spec/fear/extractor/value_matcher_number_spec.rb +0 -77
  140. data/spec/fear/extractor/value_matcher_string_spec.rb +0 -86
  141. data/spec/fear/extractor/value_matcher_symbol_spec.rb +0 -69
  142. data/spec/fear/extractor_api_spec.rb +0 -113
  143. data/spec/fear/extractor_spec.rb +0 -59
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fear
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tema Bolshakov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-29 00:00:00.000000000 Z
11
+ date: 2022-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: lru_redux
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: treetop
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
13
  - !ruby/object:Gem::Dependency
42
14
  name: benchmark-ips
43
15
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +100,14 @@ dependencies:
128
100
  requirements:
129
101
  - - "~>"
130
102
  - !ruby/object:Gem::Version
131
- version: '10.0'
103
+ version: '13.0'
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
108
  - - "~>"
137
109
  - !ruby/object:Gem::Version
138
- version: '10.0'
110
+ version: '13.0'
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: rspec
141
113
  requirement: !ruby/object:Gem::Requirement
@@ -151,21 +123,21 @@ dependencies:
151
123
  - !ruby/object:Gem::Version
152
124
  version: '3.1'
153
125
  - !ruby/object:Gem::Dependency
154
- name: rubocop
126
+ name: rubocop-rspec
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - '='
158
130
  - !ruby/object:Gem::Version
159
- version: 0.65.0
131
+ version: 1.34.0
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
136
  - - '='
165
137
  - !ruby/object:Gem::Version
166
- version: 0.65.0
138
+ version: 1.34.0
167
139
  - !ruby/object:Gem::Dependency
168
- name: rubocop-rspec
140
+ name: rubocop
169
141
  requirement: !ruby/object:Gem::Requirement
170
142
  requirements:
171
143
  - - '='
@@ -178,6 +150,20 @@ dependencies:
178
150
  - - '='
179
151
  - !ruby/object:Gem::Version
180
152
  version: 1.32.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: ruby_coding_standard
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: yard
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +178,62 @@ dependencies:
192
178
  - - ">="
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: dry-types
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: fear-rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: simplecov-lcov
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
195
237
  description: Ruby port of some Scala's monads.
196
238
  email:
197
239
  - abolshakov@spbtv.com
@@ -199,10 +241,13 @@ executables: []
199
241
  extensions: []
200
242
  extra_rdoc_files: []
201
243
  files:
244
+ - ".github/dependabot.yml"
245
+ - ".github/workflows/rubocop.yml"
246
+ - ".github/workflows/spec.yml"
202
247
  - ".gitignore"
203
248
  - ".rspec"
204
249
  - ".rubocop.yml"
205
- - ".travis.yml"
250
+ - ".simplecov"
206
251
  - ".yardopts"
207
252
  - CHANGELOG.md
208
253
  - Gemfile
@@ -226,29 +271,15 @@ files:
226
271
  - examples/pattern_matching_binary_tree_set.rb
227
272
  - examples/pattern_matching_number_in_words.rb
228
273
  - fear.gemspec
274
+ - lib/dry/types/fear.rb
275
+ - lib/dry/types/fear/option.rb
229
276
  - lib/fear.rb
277
+ - lib/fear/await.rb
278
+ - lib/fear/awaitable.rb
230
279
  - lib/fear/either.rb
231
280
  - lib/fear/either_api.rb
232
281
  - lib/fear/either_pattern_match.rb
233
282
  - lib/fear/empty_partial_function.rb
234
- - lib/fear/extractor.rb
235
- - lib/fear/extractor/anonymous_array_splat_matcher.rb
236
- - lib/fear/extractor/any_matcher.rb
237
- - lib/fear/extractor/array_head_matcher.rb
238
- - lib/fear/extractor/array_matcher.rb
239
- - lib/fear/extractor/array_splat_matcher.rb
240
- - lib/fear/extractor/empty_list_matcher.rb
241
- - lib/fear/extractor/extractor_matcher.rb
242
- - lib/fear/extractor/grammar.rb
243
- - lib/fear/extractor/grammar.treetop
244
- - lib/fear/extractor/identifier_matcher.rb
245
- - lib/fear/extractor/matcher.rb
246
- - lib/fear/extractor/matcher/and.rb
247
- - lib/fear/extractor/named_array_splat_matcher.rb
248
- - lib/fear/extractor/pattern.rb
249
- - lib/fear/extractor/typed_identifier_matcher.rb
250
- - lib/fear/extractor/value_matcher.rb
251
- - lib/fear/extractor_api.rb
252
283
  - lib/fear/failure.rb
253
284
  - lib/fear/failure_pattern_match.rb
254
285
  - lib/fear/for.rb
@@ -282,6 +313,7 @@ files:
282
313
  - lib/fear/right_pattern_match.rb
283
314
  - lib/fear/some.rb
284
315
  - lib/fear/some_pattern_match.rb
316
+ - lib/fear/struct.rb
285
317
  - lib/fear/success.rb
286
318
  - lib/fear/success_pattern_match.rb
287
319
  - lib/fear/try.rb
@@ -290,22 +322,19 @@ files:
290
322
  - lib/fear/unit.rb
291
323
  - lib/fear/utils.rb
292
324
  - lib/fear/version.rb
325
+ - spec/dry/types/fear/option/constrained_spec.rb
326
+ - spec/dry/types/fear/option/core_spec.rb
327
+ - spec/dry/types/fear/option/default_spec.rb
328
+ - spec/dry/types/fear/option/hash_spec.rb
329
+ - spec/dry/types/fear/option/option_spec.rb
330
+ - spec/fear/awaitable_spec.rb
293
331
  - spec/fear/done_spec.rb
294
332
  - spec/fear/either/mixin_spec.rb
295
333
  - spec/fear/either_pattern_match_spec.rb
296
- - spec/fear/extractor/array_matcher_spec.rb
297
- - spec/fear/extractor/extractor_matcher_spec.rb
298
- - spec/fear/extractor/grammar_array_spec.rb
299
- - spec/fear/extractor/identified_matcher_spec.rb
300
- - spec/fear/extractor/identifier_matcher_spec.rb
301
- - spec/fear/extractor/pattern_spec.rb
302
- - spec/fear/extractor/typed_identifier_matcher_spec.rb
303
- - spec/fear/extractor/value_matcher_number_spec.rb
304
- - spec/fear/extractor/value_matcher_string_spec.rb
305
- - spec/fear/extractor/value_matcher_symbol_spec.rb
306
- - spec/fear/extractor_api_spec.rb
307
- - spec/fear/extractor_spec.rb
334
+ - spec/fear/either_pattern_matching_spec.rb
335
+ - spec/fear/either_spec.rb
308
336
  - spec/fear/failure_spec.rb
337
+ - spec/fear/for/mixin_spec.rb
309
338
  - spec/fear/for_spec.rb
310
339
  - spec/fear/future_spec.rb
311
340
  - spec/fear/guard_spec.rb
@@ -313,12 +342,16 @@ files:
313
342
  - spec/fear/none_spec.rb
314
343
  - spec/fear/option/mixin_spec.rb
315
344
  - spec/fear/option_pattern_match_spec.rb
345
+ - spec/fear/option_pattern_matching_spec.rb
346
+ - spec/fear/option_spec.rb
347
+ - spec/fear/partial_function/any_spec.rb
316
348
  - spec/fear/partial_function/empty_spec.rb
317
349
  - spec/fear/partial_function_and_then_spec.rb
318
350
  - spec/fear/partial_function_composition_spec.rb
319
351
  - spec/fear/partial_function_or_else_spec.rb
320
352
  - spec/fear/partial_function_spec.rb
321
353
  - spec/fear/pattern_match_spec.rb
354
+ - spec/fear/pattern_matching_api_spec.rb
322
355
  - spec/fear/promise_spec.rb
323
356
  - spec/fear/right_biased/left.rb
324
357
  - spec/fear/right_biased/right.rb
@@ -326,17 +359,19 @@ files:
326
359
  - spec/fear/some_spec.rb
327
360
  - spec/fear/success_spec.rb
328
361
  - spec/fear/try/mixin_spec.rb
362
+ - spec/fear/try_api_spec.rb
329
363
  - spec/fear/try_pattern_match_spec.rb
364
+ - spec/fear/try_pattern_matching_spec.rb
330
365
  - spec/fear/utils_spec.rb
331
366
  - spec/spec_helper.rb
367
+ - spec/struct_pattern_matching_spec.rb
368
+ - spec/struct_spec.rb
369
+ - spec/support/dry_types.rb
332
370
  homepage: https://github.com/bolshakov/fear
333
371
  licenses:
334
372
  - MIT
335
373
  metadata: {}
336
- post_install_message: |2
337
- Fear v0.11.0 introduces backwards-incompatible changes.
338
- Please see https://github.com/bolshakov/fear/blob/master/CHANGELOG.md#0110 for details.
339
- Successfully installed fear-1.0.0
374
+ post_install_message:
340
375
  rdoc_options: []
341
376
  require_paths:
342
377
  - lib
@@ -344,34 +379,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
344
379
  requirements:
345
380
  - - ">="
346
381
  - !ruby/object:Gem::Version
347
- version: '0'
382
+ version: 2.6.0
348
383
  required_rubygems_version: !ruby/object:Gem::Requirement
349
384
  requirements:
350
385
  - - ">="
351
386
  - !ruby/object:Gem::Version
352
387
  version: '0'
353
388
  requirements: []
354
- rubygems_version: 3.0.1
355
- signing_key:
389
+ rubygems_version: 3.3.7
390
+ signing_key:
356
391
  specification_version: 4
357
392
  summary: "%q{Ruby port of some Scala's monads.}"
358
393
  test_files:
394
+ - spec/dry/types/fear/option/constrained_spec.rb
395
+ - spec/dry/types/fear/option/core_spec.rb
396
+ - spec/dry/types/fear/option/default_spec.rb
397
+ - spec/dry/types/fear/option/hash_spec.rb
398
+ - spec/dry/types/fear/option/option_spec.rb
399
+ - spec/fear/awaitable_spec.rb
359
400
  - spec/fear/done_spec.rb
360
401
  - spec/fear/either/mixin_spec.rb
361
402
  - spec/fear/either_pattern_match_spec.rb
362
- - spec/fear/extractor/array_matcher_spec.rb
363
- - spec/fear/extractor/extractor_matcher_spec.rb
364
- - spec/fear/extractor/grammar_array_spec.rb
365
- - spec/fear/extractor/identified_matcher_spec.rb
366
- - spec/fear/extractor/identifier_matcher_spec.rb
367
- - spec/fear/extractor/pattern_spec.rb
368
- - spec/fear/extractor/typed_identifier_matcher_spec.rb
369
- - spec/fear/extractor/value_matcher_number_spec.rb
370
- - spec/fear/extractor/value_matcher_string_spec.rb
371
- - spec/fear/extractor/value_matcher_symbol_spec.rb
372
- - spec/fear/extractor_api_spec.rb
373
- - spec/fear/extractor_spec.rb
403
+ - spec/fear/either_pattern_matching_spec.rb
404
+ - spec/fear/either_spec.rb
374
405
  - spec/fear/failure_spec.rb
406
+ - spec/fear/for/mixin_spec.rb
375
407
  - spec/fear/for_spec.rb
376
408
  - spec/fear/future_spec.rb
377
409
  - spec/fear/guard_spec.rb
@@ -379,12 +411,16 @@ test_files:
379
411
  - spec/fear/none_spec.rb
380
412
  - spec/fear/option/mixin_spec.rb
381
413
  - spec/fear/option_pattern_match_spec.rb
414
+ - spec/fear/option_pattern_matching_spec.rb
415
+ - spec/fear/option_spec.rb
416
+ - spec/fear/partial_function/any_spec.rb
382
417
  - spec/fear/partial_function/empty_spec.rb
383
418
  - spec/fear/partial_function_and_then_spec.rb
384
419
  - spec/fear/partial_function_composition_spec.rb
385
420
  - spec/fear/partial_function_or_else_spec.rb
386
421
  - spec/fear/partial_function_spec.rb
387
422
  - spec/fear/pattern_match_spec.rb
423
+ - spec/fear/pattern_matching_api_spec.rb
388
424
  - spec/fear/promise_spec.rb
389
425
  - spec/fear/right_biased/left.rb
390
426
  - spec/fear/right_biased/right.rb
@@ -392,6 +428,11 @@ test_files:
392
428
  - spec/fear/some_spec.rb
393
429
  - spec/fear/success_spec.rb
394
430
  - spec/fear/try/mixin_spec.rb
431
+ - spec/fear/try_api_spec.rb
395
432
  - spec/fear/try_pattern_match_spec.rb
433
+ - spec/fear/try_pattern_matching_spec.rb
396
434
  - spec/fear/utils_spec.rb
397
435
  - spec/spec_helper.rb
436
+ - spec/struct_pattern_matching_spec.rb
437
+ - spec/struct_spec.rb
438
+ - spec/support/dry_types.rb
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- ---
2
- cache:
3
- bundler: true
4
- language: ruby
5
- rvm:
6
- - 2.4.5
7
- - 2.5.3
8
- - 2.6.1
9
- before_script:
10
- - bundle install
11
- script:
12
- - bundle exec rspec
13
- - bundle exec rubocop --fail-level C
@@ -1,8 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Match against array splat, E.g. `[1, 2, *]` or `[1, 2, *_]`
4
- #
5
- class AnonymousArraySplatMatcher < ArraySplatMatcher
6
- end
7
- end
8
- end
@@ -1,15 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Always match, E.g. `_ : Integer` without capturing variable
4
- #
5
- class AnyMatcher < Matcher
6
- def defined_at?(_other)
7
- true
8
- end
9
-
10
- def bindings(_)
11
- EMPTY_HASH
12
- end
13
- end
14
- end
15
- end
@@ -1,34 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Part of recursive array matcher. Match against its head.
4
- # @see ArrayMatcher
5
- class ArrayHeadMatcher < Matcher
6
- # @!attribute matcher
7
- # @return [Matcher]
8
- # @!attribute index
9
- # @return [Types::Strict::Integer]
10
-
11
- # @param other [<>]
12
- def defined_at?(other)
13
- if other.empty?
14
- false
15
- else
16
- matcher.defined_at?(other.first)
17
- end
18
- end
19
-
20
- # @param other [<>]
21
- def bindings(other)
22
- if other.empty?
23
- super
24
- else
25
- matcher.bindings(other.first)
26
- end
27
- end
28
-
29
- def failure_reason(other)
30
- matcher.failure_reason(other.first)
31
- end
32
- end
33
- end
34
- end
@@ -1,38 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Recursive array matcher. Match against its head and tail
4
- #
5
- class ArrayMatcher < Matcher
6
- # @!attribute head
7
- # @return [ArrayHeadMatcher]
8
- # @!attribute tail
9
- # @return [ArrayMatcher | EmptyListMatcher]
10
-
11
- def defined_at?(other)
12
- if other.is_a?(Array)
13
- head.defined_at?(other) && tail.defined_at?(other.slice(1..-1))
14
- end
15
- end
16
-
17
- def bindings(other)
18
- if head.is_a?(ArraySplatMatcher)
19
- head.bindings(other)
20
- else
21
- head.bindings(other).merge(tail.bindings(other.slice(1..-1)))
22
- end
23
- end
24
-
25
- def failure_reason(other)
26
- if other.is_a?(Array)
27
- if head.defined_at?(other)
28
- tail.failure_reason(other.slice(1..-1))
29
- else
30
- head.failure_reason(other)
31
- end
32
- else
33
- super
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,14 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # @abstract
4
- class ArraySplatMatcher < Matcher
5
- def defined_at?(_other)
6
- true
7
- end
8
-
9
- def bindings(_)
10
- EMPTY_HASH
11
- end
12
- end
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Match only if array is empty
4
- #
5
- class EmptyListMatcher < Matcher
6
- # @!attribute index
7
- # @return [Types::Strict::Integer]
8
- #
9
- def defined_at?(other)
10
- other.empty?
11
- end
12
-
13
- def bindings(_)
14
- EMPTY_HASH
15
- end
16
- end
17
- end
18
- end
@@ -1,42 +0,0 @@
1
- module Fear
2
- module Extractor
3
- # Match and extract pattern using registered extractor objects
4
- # E.g. +Some(a : Integer)+
5
- # @see Extractor.register_extractor
6
- class ExtractorMatcher < Matcher
7
- # @!attribute name
8
- # @return [Types::Strict::String]
9
- # @!attribute arguments_matcher
10
- # @return [ArrayMatcher | EmptyListMatcher]
11
- #
12
-
13
- def initialize(*)
14
- super
15
- @extractor = Extractor.find_extractor(name)
16
- end
17
- attr_reader :extractor
18
- private :extractor
19
-
20
- def defined_at?(other)
21
- extractor
22
- .call(other)
23
- .map { |v| arguments_matcher.defined_at?(v) }
24
- .get_or_else(false)
25
- end
26
-
27
- def call_or_else(arg)
28
- extractor.call(arg)
29
- .map { |v| arguments_matcher.call_or_else(v) { yield arg } }
30
- .get_or_else { yield arg }
31
- end
32
-
33
- def failure_reason(other)
34
- extractor.call(other).match do |m|
35
- m.some(->(v) { arguments_matcher.defined_at?(v) }) { Fear.none }
36
- m.some { |v| arguments_matcher.failure_reason(v) }
37
- m.none { super }
38
- end
39
- end
40
- end
41
- end
42
- end