u-case 4.0.0 → 4.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Micro
4
+ module Cases
5
+ class Map
6
+ IsAUseCaseOrFlowWithDefaults = -> arg { arg.is_a?(Array) && Micro.case_or_flow?(arg[0]) && arg[1].is_a?(Hash) }
7
+ IsAUseCaseOrFlow = -> arg { Micro.case_or_flow?(arg) || IsAUseCaseOrFlowWithDefaults[arg] }
8
+ HasValidArgs = -> (args) { Kind.of(Array, args).all?(&IsAUseCaseOrFlow) }
9
+
10
+ attr_reader :use_cases
11
+
12
+ def self.build(args)
13
+ raise Error::InvalidUseCases unless HasValidArgs[args]
14
+
15
+ new(args)
16
+ end
17
+
18
+ def initialize(use_cases)
19
+ @use_cases = use_cases
20
+ end
21
+
22
+ GetUseCaseResult = -> (hash) do
23
+ -> (use_case) do
24
+ return use_case.call(hash) unless use_case.is_a?(Array)
25
+
26
+ use_case[0].call(hash.merge(use_case[1]))
27
+ end
28
+ end
29
+
30
+ def call(arg = {})
31
+ hash = Kind.of(Hash, arg)
32
+
33
+ use_cases.map(&GetUseCaseResult[hash])
34
+ end
35
+
36
+ private_constant :HasValidArgs, :IsAUseCaseOrFlow, :IsAUseCaseOrFlowWithDefaults, :GetUseCaseResult
37
+ end
38
+ end
39
+ end
@@ -4,8 +4,8 @@ module Micro
4
4
  module Cases
5
5
  module Safe
6
6
  class Flow < Cases::Flow
7
- private def __case_use_case(use_case, result, input)
8
- instance = use_case.__new__(result, input)
7
+ private def __call_use_case(use_case, result, input)
8
+ instance = __build_use_case(use_case, result, input)
9
9
  instance.__call__
10
10
  rescue => exception
11
11
  raise exception if Case::Error.by_wrong_usage?(exception)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Micro
4
+ module Cases
5
+
6
+ module Utils
7
+ def self.map_use_cases(args)
8
+ collection = args.is_a?(Array) && args.size == 1 ? args[0] : args
9
+
10
+ Array(collection).each_with_object([]) do |arg, memo|
11
+ if arg.is_a?(Flow)
12
+ arg.use_cases.each { |use_case| memo << use_case }
13
+ else
14
+ memo << arg
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+ 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: 4.0.0
4
+ version: 4.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2020-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind
@@ -97,14 +97,18 @@ files:
97
97
  - lib/micro/case/error.rb
98
98
  - lib/micro/case/result.rb
99
99
  - lib/micro/case/result/transitions.rb
100
+ - lib/micro/case/result/wrapper.rb
100
101
  - lib/micro/case/safe.rb
101
102
  - lib/micro/case/strict.rb
102
103
  - lib/micro/case/utils.rb
103
104
  - lib/micro/case/version.rb
104
105
  - lib/micro/case/with_activemodel_validation.rb
105
106
  - lib/micro/cases.rb
107
+ - lib/micro/cases/error.rb
106
108
  - lib/micro/cases/flow.rb
109
+ - lib/micro/cases/map.rb
107
110
  - lib/micro/cases/safe/flow.rb
111
+ - lib/micro/cases/utils.rb
108
112
  - lib/u-case.rb
109
113
  - lib/u-case/with_activemodel_validation.rb
110
114
  - test.sh