u-case 2.0.0.pre.3 → 2.0.0.pre.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1faaf3599f7b9e24aca4fcab71c448b7078756a6ca9abce84426a456673c4f50
4
- data.tar.gz: 329095160dc157bd6ac3dda112c83637e8fe169050497bd5e3e2698c095415cd
3
+ metadata.gz: 7108e24cbd9380af05232f2fa160a1131cb0fc3a717faf44a157ad577a5e1d70
4
+ data.tar.gz: e2ca33aea49622868611af975e31a39d987c52401f8e3efccce0bbc1940395c6
5
5
  SHA512:
6
- metadata.gz: f02f2e9db0044e56e9ec690d69f69d302f666b99ccff37106369a63cf6a39c0d15cefe9d07d28464a75bbb1f236b1fd6ad3eddc40f25dd473e54b0ee2d77c02d
7
- data.tar.gz: 6b81d3c72c67596229689b3bc9cccc3a9ef20c9d7fd45d506913215d3fa759e174aa94d7105aeba6dfb184278b54fbfd1a9e5d7e56cdb4468968a06a96e4f7cd
6
+ metadata.gz: da0de298a0a3f889c13244fd60095ab6268dd35eab881aa8e10c35c3fb2c051670dc2563aef3c52e23366adba9554f31822f565c0a892fc9e0c69363f7c07c94
7
+ data.tar.gz: 73b1fbaec0d6e15adb5d714491081bbf592920757b134139021ad7058e42c5eefa8ab420b7215442fcf9777ecc338cac0e4fa3b4dd8b833f4eb00fb70e1f9ab7
data/README.md CHANGED
@@ -30,6 +30,7 @@ The main goals of this project are:
30
30
  - [What happens if a result hook is declared multiple times?](#what-happens-if-a-result-hook-is-declared-multiple-times)
31
31
  - [How to compose uses cases to represents complex ones?](#how-to-compose-uses-cases-to-represents-complex-ones)
32
32
  - [Is it possible to compose a use case flow with other ones?](#is-it-possible-to-compose-a-use-case-flow-with-other-ones)
33
+ - [Is it possible a flow accumulates its input and merges each success result to use as the argument of their use cases?](#is-it-possible-a-flow-accumulates-its-input-and-merges-each-success-result-to-use-as-the-argument-of-their-use-cases)
33
34
  - [What is a strict use case?](#what-is-a-strict-use-case)
34
35
  - [Is there some feature to auto handle exceptions inside of a use case or flow?](#is-there-some-feature-to-auto-handle-exceptions-inside-of-a-use-case-or-flow)
35
36
  - [How to validate use case attributes?](#how-to-validate-use-case-attributes)
@@ -318,7 +319,7 @@ class Double < Micro::Case
318
319
 
319
320
  def call!
320
321
  return Failure(:invalid) unless number.is_a?(Numeric)
321
- return Failure(:lte_zero) if number <= 0
322
+ return Failure(:lte_zero) { number } if number <= 0
322
323
 
323
324
  Success(number * 2)
324
325
  end
@@ -404,7 +405,8 @@ result.value * 4 == accum # true
404
405
 
405
406
  ### How to compose uses cases to represents complex ones?
406
407
 
407
- In this case, this will be a **flow**. The main idea is to use/reuse use cases as steps of a new use case.
408
+ In this case, this will be a **flow** (`Micro::Case::Flow`).
409
+ The main idea of this feature is to use/reuse use cases as steps of a new use case.
408
410
 
409
411
  ```ruby
410
412
  module Steps
@@ -567,6 +569,10 @@ Note: You can blend any of the [available syntaxes/approaches](#how-to-create-a-
567
569
 
568
570
  [⬆️ Back to Top](#table-of-contents-)
569
571
 
572
+ #### Is it possible a flow accumulates its input and merges each success result to use as the argument of their use cases?
573
+
574
+ Answer: Yes, it is! Check out these test examples [Micro::Case::Flow](https://github.com/serradura/u-case/blob/e0066d8a6e3a9404069dfcb9bf049b854f08a33c/test/micro/case/flow/reducer_test.rb) and [Micro::Case::Safe::Flow](https://github.com/serradura/u-case/blob/e0066d8a6e3a9404069dfcb9bf049b854f08a33c/test/micro/case/safe/flow/reducer_test.rb) to see different use cases sharing their own data.
575
+
570
576
  ### What is a strict use case?
571
577
 
572
578
  Answer: Is a use case which will require all the keywords (attributes) on its initialization.
@@ -26,10 +26,15 @@ module Micro
26
26
  end
27
27
 
28
28
  def call(arg = {})
29
+ memo = arg.is_a?(Hash) ? arg.dup : {}
30
+
29
31
  @use_cases.reduce(initial_result(arg)) do |result, use_case|
30
32
  break result if result.failure?
31
33
 
32
- use_case.__new__(result, result.value).call
34
+ value = result.value
35
+ input = value.is_a?(Hash) ? memo.tap { |data| data.merge!(value) } : value
36
+
37
+ use_case_result(use_case, result, input)
33
38
  end
34
39
  end
35
40
 
@@ -47,6 +52,10 @@ module Micro
47
52
 
48
53
  private
49
54
 
55
+ def use_case_result(use_case, result, input)
56
+ use_case.__new__(result, input).call
57
+ end
58
+
50
59
  def initial_result(arg)
51
60
  return arg.call if arg_to_call?(arg)
52
61
  return arg if arg.is_a?(Micro::Case::Result)
@@ -11,14 +11,6 @@ module Micro
11
11
  end
12
12
 
13
13
  class Reducer < ::Micro::Case::Flow::Reducer
14
- def call(arg = {})
15
- @use_cases.reduce(initial_result(arg)) do |result, use_case|
16
- break result if result.failure?
17
-
18
- use_case_result(use_case, result)
19
- end
20
- end
21
-
22
14
  alias_method :&, :>>
23
15
 
24
16
  def >>(arg)
@@ -27,9 +19,9 @@ module Micro
27
19
 
28
20
  private
29
21
 
30
- def use_case_result(use_case, result)
22
+ def use_case_result(use_case, result, input)
31
23
  begin
32
- instance = use_case.__new__(result, result.value)
24
+ instance = use_case.__new__(result, input)
33
25
  instance.call
34
26
  rescue => exception
35
27
  raise exception if Error::ByWrongUsage.check(exception)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  class Case
5
- VERSION = '2.0.0.pre.3'.freeze
5
+ VERSION = '2.0.0.pre.4'.freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u-case
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.3
4
+ version: 2.0.0.pre.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-14 00:00:00.000000000 Z
11
+ date: 2019-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: u-attributes