u-case 3.0.0.rc3 → 3.0.0.rc4

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: de27799d2fbf95d3399af2caa3053038fd9817c6f800747213eb8ee3722604b5
4
- data.tar.gz: dc2f1b40964d646978d28ffb44c049a58ddca614440e296ff5fa7f35e347def1
3
+ metadata.gz: b3374584a2cf58a68aa1bed216c91bfd715cc4365d2e7972e5693a8c3acb52eb
4
+ data.tar.gz: 9bbe75661a2cd53e549cf60692811d47d1aaf5895ee71cf89f3fc7e8f8d72f0b
5
5
  SHA512:
6
- metadata.gz: 90af10df71576124850933260f703e7a2f9c6a67df5e5add06d7d657de34a291879e279eec59795bfd548c0e0f898dc3795657de1de524e3aac16dddf25b24cf
7
- data.tar.gz: e5b374929b87a7a5a0f604afa5742195910809b9198c11d01110bb8cf9f2540de73aa80fedb4432357ee86b96fe5e81b91a003fd410da989ac5b22b9ad40aa30
6
+ metadata.gz: d43a4e404c554e4e489cd4875af61bf66ab41bec68a84c6022b04b3ae8dd79975f8522e8ecf8c0211ae0f08cbd4fe95ac6d7320a94d0c140ce3c436d26650afb
7
+ data.tar.gz: '084cabc2b47f424a789f0e0cc9f120bfa50516771e669763207bed6c2884b4f6c3b8731be495eafc5bf1dc1c68b1b82b85a308c4a77cb546d77d99f6a088a827'
data/Gemfile CHANGED
@@ -37,6 +37,8 @@ pry_version =
37
37
  group :development, :test do
38
38
  gem 'awesome_print', '~> 1.8'
39
39
 
40
+ gem 'byebug', '~> 10.0', '>= 10.0.2' if RUBY_VERSION =~ /\A2.2/
41
+
40
42
  gem 'pry', "~> #{pry_version}"
41
43
  gem 'pry-byebug', "~> #{pry_byebug_version}"
42
44
  end
data/README.md CHANGED
@@ -37,7 +37,8 @@ Version | Documentation
37
37
  - [How to define custom result types?](#how-to-define-custom-result-types)
38
38
  - [Is it possible to define a custom result type without a block?](#is-it-possible-to-define-a-custom-result-type-without-a-block)
39
39
  - [How to use the result hooks?](#how-to-use-the-result-hooks)
40
- - [Why the failure hook (without a type) exposes result itself?](#why-the-failure-hook-without-a-type-exposes-result-itself)
40
+ - [Why the hook usage without a type exposes the result itself?](#why-the-hook-usage-without-a-type-exposes-the-result-itself)
41
+ - [Using decomposition to access the result data and type](#using-decomposition-to-access-the-result-data-and-type)
41
42
  - [What happens if a result hook was declared multiple times?](#what-happens-if-a-result-hook-was-declared-multiple-times)
42
43
  - [How to use the `Micro::Case::Result#then` method?](#how-to-use-the-microcaseresultthen-method)
43
44
  - [What does happens when a `Micro::Case::Result#then` receives a block?](#what-does-happens-when-a-microcaseresultthen-receives-a-block)
@@ -145,14 +146,6 @@ bad_result = Multiply.call(a: 2, b: '2')
145
146
  bad_result.failure? # true
146
147
  bad_result.data # { message: "`a` and `b` attributes must be numeric" }
147
148
 
148
- #-----------------------------#
149
- # Calling a use case instance #
150
- #-----------------------------#
151
-
152
- result = Multiply.new(a: 2, b: 3).call
153
-
154
- result.value # { number: 6 }
155
-
156
149
  # Note:
157
150
  # ----
158
151
  # The result of a Micro::Case.call
@@ -360,7 +353,7 @@ Double
360
353
  # The use case responsible for the failure will be accessible as the second hook argument
361
354
  ```
362
355
 
363
- #### Why the failure hook (without a type) exposes result itself?
356
+ #### Why the hook usage without a type exposes the result itself?
364
357
 
365
358
  Answer: To allow you to define how to handle the program flow using some
366
359
  conditional statement (like an `if`, `case/when`).
@@ -377,12 +370,8 @@ class Double < Micro::Case
377
370
  end
378
371
  end
379
372
 
380
- #=================================#
381
- # Using the result type and value #
382
- #=================================#
383
-
384
373
  Double
385
- .call(-1)
374
+ .call(number: -1)
386
375
  .on_failure do |result, use_case|
387
376
  case result.type
388
377
  when :invalid then raise TypeError, "number must be a numeric value"
@@ -394,19 +383,20 @@ Double
394
383
  # The output will be the exception:
395
384
  #
396
385
  # ArgumentError (number `-1` must be greater than 0)
386
+ ```
397
387
 
398
- #=========================================================#
399
- # Using decomposition to access the result data and type #
400
- #=========================================================#
388
+ > **Note:** The same that was did in the previous examples could be done with `#on_success` hook!
401
389
 
402
- # The syntax to decompose an Array can be used in methods, blocks and assigments.
403
- # If you doesn't know it, check out the Ruby doc:
404
- # https://ruby-doc.org/core-2.2.0/doc/syntax/assignment_rdoc.html#label-Array+Decomposition
405
- #
406
- # The object exposed in the hook failure is a Micro::Case::Result, and it can be decomposed using this syntax. e.g:
390
+ ##### Using decomposition to access the result data and type
391
+
392
+ The syntax to decompose an Array can be used in methods, blocks and assigments.
393
+ If you doesn't know it, check out the [Ruby doc](https://ruby-doc.org/core-2.2.0/doc/syntax/assignment_rdoc.html#label-Array+Decomposition).
394
+
395
+ ```ruby
396
+ # The object exposed in the hook is a Micro::Case::Result, and it can be decomposed using this syntax. e.g:
407
397
 
408
398
  Double
409
- .call(-2)
399
+ .call(number: -2)
410
400
  .on_failure do |(data, type), use_case|
411
401
  case type
412
402
  when :invalid then raise TypeError, 'number must be a numeric value'
@@ -420,6 +410,8 @@ Double
420
410
  # ArgumentError (the number `-2` must be greater than 0)
421
411
  ```
422
412
 
413
+ > **Note:** The same that was did in the previous examples could be done with `#on_success` hook!
414
+
423
415
  [⬆️ Back to Top](#table-of-contents-)
424
416
 
425
417
  #### What happens if a result hook was declared multiple times?
@@ -445,10 +437,11 @@ result[:number] * 4 # 24
445
437
 
446
438
  accum = 0
447
439
 
448
- result.on_success { |result| accum += result[:number] }
449
- .on_success { |result| accum += result[:number] }
450
- .on_success(:computed) { |result| accum += result[:number] }
451
- .on_success(:computed) { |result| accum += result[:number] }
440
+ result
441
+ .on_success { |result| accum += result[:number] }
442
+ .on_success { |result| accum += result[:number] }
443
+ .on_success(:computed) { |result| accum += result[:number] }
444
+ .on_success(:computed) { |result| accum += result[:number] }
452
445
 
453
446
  accum # 24
454
447
 
@@ -621,9 +614,9 @@ class DoubleAllNumbers < Micro::Case
621
614
  Steps::Double
622
615
  end
623
616
 
624
- DoubleAllNumbers
625
- .call(numbers: %w[1 1 b 2 3 4])
626
- .on_failure { |message| p message } # "numbers must contain only numeric types"
617
+ DoubleAllNumbers.
618
+ call(numbers: %w[1 1 b 2 3 4]).
619
+ on_failure { |result| puts result[:message] } # "numbers must contain only numeric types"
627
620
 
628
621
  # Note:
629
622
  # ----
@@ -705,11 +698,11 @@ DoubleAllNumbersAndSquareAndAdd2 =
705
698
 
706
699
  SquareAllNumbersAndDouble
707
700
  .call(numbers: %w[1 1 2 2 3 4])
708
- .on_success { |value| p value[:numbers] } # [6, 6, 12, 12, 22, 36]
701
+ .on_success { |result| p result[:numbers] } # [6, 6, 12, 12, 22, 36]
709
702
 
710
703
  DoubleAllNumbersAndSquareAndAdd2
711
704
  .call(numbers: %w[1 1 2 2 3 4])
712
- .on_success { |value| p value[:numbers] } # [6, 6, 18, 18, 38, 66]
705
+ .on_success { |result| p result[:numbers] } # [6, 6, 18, 18, 38, 66]
713
706
  ```
714
707
 
715
708
  Note: You can blend any of the [available syntaxes/approaches](#how-to-create-a-flow-which-has-reusable-steps-to-define-a-complex-use-case) to create use case flows - [examples](https://github.com/serradura/u-case/blob/714c6b658fc6aa02617e6833ddee09eddc760f2a/test/micro/cases/flow/blend_test.rb#L5-L35).
@@ -956,8 +949,8 @@ result.type == :exception # true
956
949
  result.data # { exception: #<ZeroDivisionError...> }
957
950
  result[:exception].is_a?(ZeroDivisionError) # true
958
951
 
959
- result.on_failure(:exception) do |exception|
960
- AppLogger.error(exception.message) # E, [2019-08-21T00:05:44.195506 #9532] ERROR -- : divided by 0
952
+ result.on_failure(:exception) do |result|
953
+ AppLogger.error(result[:exception].message) # E, [2019-08-21T00:05:44.195506 #9532] ERROR -- : divided by 0
961
954
  end
962
955
 
963
956
  # Note:
@@ -965,8 +958,8 @@ end
965
958
  # If you need to handle a specific error,
966
959
  # I recommend the usage of a case statement. e,g:
967
960
 
968
- result.on_failure(:exception) do |exception, use_case|
969
- case exception
961
+ result.on_failure(:exception) do |data, use_case|
962
+ case exception = data[:exception]
970
963
  when ZeroDivisionError then AppLogger.error(exception.message)
971
964
  else AppLogger.debug("#{use_case.class.name} was the use case responsible for the exception")
972
965
  end
@@ -1163,6 +1156,8 @@ class Todo::List::AddItem < Micro::Case
1163
1156
  end
1164
1157
  ```
1165
1158
 
1159
+ [⬆️ Back to Top](#table-of-contents-)
1160
+
1166
1161
  ## `Micro::Case.config`
1167
1162
 
1168
1163
  The idea of this feature is to allow the configuration of some `u-case` features/modules.
@@ -1180,6 +1175,8 @@ Micro::Case.config do |config|
1180
1175
  end
1181
1176
  ```
1182
1177
 
1178
+ [⬆️ Back to Top](#table-of-contents-)
1179
+
1183
1180
  ## Benchmarks
1184
1181
 
1185
1182
  ### `Micro::Case` (v2.6.0)
@@ -18,26 +18,30 @@ module Micro
18
18
 
19
19
  include Micro::Attributes.without(:strict_initialize)
20
20
 
21
- def self.config
22
- yield(Config.instance)
23
- end
24
-
25
21
  def self.call(options = {})
26
- new(options).call
22
+ new(options).__call__
27
23
  end
28
24
 
29
25
  def self.to_proc
30
26
  Proc.new { |arg| call(arg) }
31
27
  end
32
28
 
33
- def self.call!
34
- self
35
- end
36
-
37
29
  def self.flow(*args)
38
30
  @__flow_use_cases = args
39
31
  end
40
32
 
33
+ class << self
34
+ alias __call__ call
35
+
36
+ def config
37
+ yield(Config.instance)
38
+ end
39
+
40
+ def call!
41
+ self
42
+ end
43
+ end
44
+
41
45
  def self.inherited(subclass)
42
46
  subclass.attributes(self.attributes_data({}))
43
47
  subclass.extend ::Micro::Attributes.const_get('Macros::ForSubclasses'.freeze)
@@ -60,32 +64,32 @@ module Micro
60
64
  input =
61
65
  arg.is_a?(Hash) ? result.__set_transitions_accessible_attributes__(arg) : arg
62
66
 
63
- __new__(result, input).call
67
+ __new__(result, input).__call__
64
68
  end
65
69
 
66
- def self.__flow_builder
70
+ def self.__flow_builder__
67
71
  Cases::Flow
68
72
  end
69
73
 
70
- def self.__flow_get
74
+ def self.__flow_get__
71
75
  return @__flow if defined?(@__flow)
72
76
  end
73
77
 
74
78
  private_class_method def self.__flow_set(args)
75
- return if __flow_get
79
+ return if __flow_get__
76
80
 
77
- def self.use_cases; __flow_get.use_cases; end
81
+ def self.use_cases; __flow_get__.use_cases; end
78
82
 
79
83
  self.class_eval('def use_cases; self.class.use_cases; end')
80
84
 
81
- @__flow = __flow_builder.build(args)
85
+ @__flow = __flow_builder__.build(args)
82
86
  end
83
87
 
84
88
  FLOW_STEP = 'Flow_Step'.freeze
85
89
 
86
90
  private_constant :FLOW_STEP
87
91
 
88
- def self.__call!
92
+ def self.__call__!
89
93
  return const_get(FLOW_STEP) if const_defined?(FLOW_STEP, false)
90
94
 
91
95
  class_eval("class #{FLOW_STEP} < #{self.name}; private def __call; __call_use_case; end; end")
@@ -97,11 +101,11 @@ module Micro
97
101
 
98
102
  private_class_method def self.__flow_use_cases_get
99
103
  Array(__flow_use_cases)
100
- .map { |use_case| use_case == self ? self.__call! : use_case }
104
+ .map { |use_case| use_case == self ? self.__call__! : use_case }
101
105
  end
102
106
 
103
- def self.__flow_set!
104
- __flow_set(__flow_use_cases_get) if !__flow_get && __flow_use_cases
107
+ def self.__flow_set__!
108
+ __flow_set(__flow_use_cases_get) if !__flow_get__ && __flow_use_cases
105
109
  end
106
110
 
107
111
  def initialize(input)
@@ -112,8 +116,8 @@ module Micro
112
116
  raise NotImplementedError
113
117
  end
114
118
 
115
- def call
116
- __call
119
+ def __call__
120
+ __call!
117
121
  end
118
122
 
119
123
  def __set_result__(result)
@@ -125,15 +129,19 @@ module Micro
125
129
 
126
130
  private
127
131
 
132
+ # This method was reserved for a new feature
133
+ def call
134
+ end
135
+
128
136
  def __setup_use_case(input)
129
- self.class.__flow_set!
137
+ self.class.__flow_set__!
130
138
 
131
139
  @__input = input
132
140
 
133
141
  self.attributes = input
134
142
  end
135
143
 
136
- def __call
144
+ def __call!
137
145
  return __call_use_case_flow if __call_use_case_flow?
138
146
 
139
147
  __call_use_case
@@ -144,15 +152,15 @@ module Micro
144
152
 
145
153
  return result if result.is_a?(Result)
146
154
 
147
- raise Error::UnexpectedResult.new(self.class)
155
+ raise Error::UnexpectedResult.new("#{self.class.name}#call!")
148
156
  end
149
157
 
150
158
  def __call_use_case_flow?
151
- self.class.__flow_get
159
+ self.class.__flow_get__
152
160
  end
153
161
 
154
162
  def __call_use_case_flow
155
- self.class.__flow_get.call(@__input)
163
+ self.class.__flow_get__.call(@__input)
156
164
  end
157
165
 
158
166
  def Success(type = :ok, result: nil)
@@ -177,14 +185,22 @@ module Micro
177
185
  __get_result(false, value, type)
178
186
  end
179
187
 
180
- def __result__
188
+ def __result
181
189
  @__result ||= Result.new
182
190
  end
183
191
 
184
192
  def __get_result(is_success, value, type)
185
- __result__.__set__(is_success, value, type, self)
193
+ __result.__set__(is_success, value, type, self)
186
194
  end
187
195
 
188
196
  private_constant :MapFailureType
189
197
  end
198
+
199
+ def self.case?(arg)
200
+ (arg.is_a?(Class) && arg < Case) || arg.is_a?(Case)
201
+ end
202
+
203
+ def self.case_or_flow?(arg)
204
+ case?(arg) || arg.is_a?(Cases::Flow)
205
+ end
190
206
  end
@@ -4,9 +4,11 @@ module Micro
4
4
  class Case
5
5
  module Error
6
6
  class UnexpectedResult < TypeError
7
- MESSAGE = '#call! must return an instance of Micro::Case::Result'.freeze
7
+ MESSAGE = 'must return an instance of Micro::Case::Result'.freeze
8
8
 
9
- def initialize(klass); super(klass.name + MESSAGE); end
9
+ def initialize(context)
10
+ super("#{context} #{MESSAGE}")
11
+ end
10
12
  end
11
13
 
12
14
  class ResultIsAlreadyDefined < ArgumentError
@@ -11,7 +11,7 @@ module Micro
11
11
 
12
12
  attr_reader :type, :data, :use_case
13
13
 
14
- alias_method :value, :data
14
+ alias value data
15
15
 
16
16
  def initialize
17
17
  @__transitions__ = []
@@ -39,7 +39,7 @@ module Micro
39
39
  end
40
40
 
41
41
  def on_success(expected_type = nil)
42
- return self unless success_type?(expected_type)
42
+ return self unless __success_type?(expected_type)
43
43
 
44
44
  hook_data = expected_type.nil? ? self : data
45
45
 
@@ -49,7 +49,7 @@ module Micro
49
49
  end
50
50
 
51
51
  def on_failure(expected_type = nil)
52
- return self unless failure_type?(expected_type)
52
+ return self unless __failure_type?(expected_type)
53
53
 
54
54
  hook_data = expected_type.nil? ? self : data
55
55
 
@@ -59,7 +59,7 @@ module Micro
59
59
  end
60
60
 
61
61
  def on_exception(expected_exception = nil)
62
- return self unless failure_type?(:exception)
62
+ return self unless __failure_type?(:exception)
63
63
 
64
64
  if !expected_exception || (Kind.is(Exception, expected_exception) && data.fetch(:exception).is_a?(expected_exception))
65
65
  yield(data, @use_case)
@@ -68,27 +68,42 @@ module Micro
68
68
  self
69
69
  end
70
70
 
71
- def then(arg = nil, attributes = nil, &block)
71
+ def then(use_case = nil, attributes = nil, &block)
72
72
  can_yield_self = respond_to?(:yield_self)
73
73
 
74
74
  if block
75
- raise Error::InvalidInvocationOfTheThenMethod if arg
75
+ raise Error::InvalidInvocationOfTheThenMethod if use_case
76
76
  raise NotImplementedError if !can_yield_self
77
77
 
78
78
  yield_self(&block)
79
79
  else
80
- return yield_self if !arg && can_yield_self
80
+ return yield_self if !use_case && can_yield_self
81
81
 
82
- raise Error::InvalidInvocationOfTheThenMethod if !is_a_use_case?(arg)
82
+ if use_case.is_a?(Proc)
83
+ return failure? ? self : __call_proc(use_case, expected: 'then(-> {})'.freeze)
84
+ end
85
+
86
+ # TODO: Test the then method with a Micro::Cases.{flow,safe_flow}() instance.
87
+ raise Error::InvalidInvocationOfTheThenMethod unless ::Micro.case_or_flow?(use_case)
83
88
 
84
89
  return self if failure?
85
90
 
86
91
  input = attributes.is_a?(Hash) ? self.data.merge(attributes) : self.data
87
92
 
88
- arg.__call_and_set_transition__(self, input)
93
+ use_case.__call_and_set_transition__(self, input)
89
94
  end
90
95
  end
91
96
 
97
+ def |(arg)
98
+ return self if failure?
99
+
100
+ return __call_proc(arg, expected: '| -> {}'.freeze) if arg.is_a?(Proc)
101
+
102
+ raise Error::InvalidInvocationOfTheThenMethod unless ::Micro.case_or_flow?(arg)
103
+
104
+ failure? ? self : arg.__call_and_set_transition__(self, data)
105
+ end
106
+
92
107
  def transitions
93
108
  @__transitions__.clone
94
109
  end
@@ -102,7 +117,7 @@ module Micro
102
117
 
103
118
  def __set__(is_success, data, type, use_case)
104
119
  raise Error::InvalidResultType unless type.is_a?(Symbol)
105
- raise Error::InvalidUseCase if !is_a_use_case?(use_case)
120
+ raise Error::InvalidUseCase unless ::Micro.case?(use_case)
106
121
 
107
122
  @success, @type, @use_case = is_success, type, use_case
108
123
 
@@ -110,7 +125,7 @@ module Micro
110
125
 
111
126
  raise Micro::Case::Error::InvalidResult.new(is_success, type, use_case) unless @data
112
127
 
113
- __set_transition__ unless @@transition_tracking_disabled
128
+ __set_transition unless @@transition_tracking_disabled
114
129
 
115
130
  self
116
131
  end
@@ -118,39 +133,39 @@ module Micro
118
133
  def __set_transitions_accessible_attributes__(attributes_data)
119
134
  return attributes_data if @@transition_tracking_disabled
120
135
 
121
- __set_transitions_accessible_attributes__!(attributes_data)
136
+ attributes = Utils.symbolize_hash_keys(attributes_data)
137
+
138
+ __update_transitions_accessible_attributes(attributes)
122
139
  end
123
140
 
124
141
  private
125
142
 
126
- def success_type?(expected_type)
127
- success? && (expected_type.nil? || expected_type == type)
128
- end
143
+ def __call_proc(arg, expected:)
144
+ result = arg.arity.zero? ? arg.call : arg.call(data.clone)
129
145
 
130
- def failure_type?(expected_type)
131
- failure? && (expected_type.nil? || expected_type == type)
132
- end
146
+ return result if result.is_a?(Result)
133
147
 
134
- def is_a_use_case?(arg)
135
- (arg.is_a?(Class) && arg < ::Micro::Case) || arg.is_a?(::Micro::Case)
148
+ raise Error::UnexpectedResult.new("#{Result.name}##{expected}")
136
149
  end
137
150
 
138
- def __set_transitions_accessible_attributes__!(attributes_data)
139
- attributes = Utils.symbolize_hash_keys(attributes_data)
151
+ def __success_type?(expected_type)
152
+ success? && (expected_type.nil? || expected_type == type)
153
+ end
140
154
 
141
- __update_transitions_accessible_attributes__(attributes)
155
+ def __failure_type?(expected_type)
156
+ failure? && (expected_type.nil? || expected_type == type)
142
157
  end
143
158
 
144
- def __update_transitions_accessible_attributes__(attributes)
159
+ def __update_transitions_accessible_attributes(attributes)
145
160
  @__transitions_accessible_attributes__.merge!(attributes)
146
161
  @__transitions_accessible_attributes__
147
162
  end
148
163
 
149
- def __set_transition__
164
+ def __set_transition
150
165
  use_case_class = @use_case.class
151
166
  use_case_attributes = Utils.symbolize_hash_keys(@use_case.attributes)
152
167
 
153
- __update_transitions_accessible_attributes__(use_case_attributes)
168
+ __update_transitions_accessible_attributes(use_case_attributes)
154
169
 
155
170
  result = @success ? :success : :failure
156
171
 
@@ -7,8 +7,8 @@ module Micro
7
7
  Cases::Safe::Flow
8
8
  end
9
9
 
10
- def call
11
- __call
10
+ def __call__
11
+ __call!
12
12
  rescue => exception
13
13
  raise exception if Error.by_wrong_usage?(exception)
14
14
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  class Case
5
- VERSION = '3.0.0.rc3'.freeze
5
+ VERSION = '3.0.0.rc4'.freeze
6
6
  end
7
7
  end
@@ -31,7 +31,7 @@ module Micro
31
31
 
32
32
  return result if result.is_a?(Result)
33
33
 
34
- raise Error::UnexpectedResult.new(self.class)
34
+ raise Error::UnexpectedResult.new("#{self.class.name}#call!")
35
35
  end
36
36
 
37
37
  def failure_by_validation_error(object)
@@ -32,55 +32,51 @@ module Micro
32
32
  def call(arg = {})
33
33
  memo = arg.is_a?(Hash) ? arg.dup : {}
34
34
 
35
- first_result = first_use_case_result(arg)
35
+ first_result = __first_use_case_result(arg)
36
36
 
37
37
  return first_result if @next_use_cases.empty?
38
38
 
39
- next_use_cases_result(first_result, memo)
39
+ __next_use_cases_result(first_result, memo)
40
40
  end
41
41
 
42
+ alias __call__ call
43
+
42
44
  def to_proc
43
45
  Proc.new { |arg| call(arg) }
44
46
  end
45
47
 
46
48
  private
47
49
 
48
- def is_a_result?(arg)
50
+ def __is_a_result?(arg)
49
51
  arg.is_a?(Case::Result)
50
52
  end
51
53
 
52
- def arg_to_call?(arg)
53
- return true if arg.is_a?(::Micro::Case) || arg.is_a?(Flow)
54
- return true if arg.is_a?(Class) && arg < ::Micro::Case
55
- return false
56
- end
57
-
58
- def call_arg(arg)
59
- output = arg.call
54
+ def __call_arg(arg)
55
+ output = arg.__call__
60
56
 
61
- is_a_result?(output) ? output.value : output
57
+ __is_a_result?(output) ? output.value : output
62
58
  end
63
59
 
64
- def first_use_case_input(arg)
65
- return call_arg(arg) if arg_to_call?(arg)
66
- return arg.value if is_a_result?(arg)
60
+ def __first_use_case_input(arg)
61
+ return __call_arg(arg) if ::Micro.case_or_flow?(arg)
62
+ return arg.value if __is_a_result?(arg)
67
63
 
68
64
  arg
69
65
  end
70
66
 
71
- def first_use_case_result(arg)
72
- input = first_use_case_input(arg)
67
+ def __first_use_case_result(arg)
68
+ input = __first_use_case_input(arg)
73
69
 
74
70
  result = Case::Result.new
75
71
 
76
72
  @first_use_case.__call_and_set_transition__(result, input)
77
73
  end
78
74
 
79
- def next_use_case_result(use_case, result, input)
80
- use_case.__new__(result, input).call
75
+ def __next_use_case_result(use_case, result, input)
76
+ use_case.__new__(result, input).__call__
81
77
  end
82
78
 
83
- def next_use_cases_result(first_result, memo)
79
+ def __next_use_cases_result(first_result, memo)
84
80
  @next_use_cases.reduce(first_result) do |result, use_case|
85
81
  break result if result.failure?
86
82
 
@@ -88,7 +84,7 @@ module Micro
88
84
 
89
85
  result.__set_transitions_accessible_attributes__(memo)
90
86
 
91
- next_use_case_result(use_case, result, memo)
87
+ __next_use_case_result(use_case, result, memo)
92
88
  end
93
89
  end
94
90
  end
@@ -4,9 +4,9 @@ module Micro
4
4
  module Cases
5
5
  module Safe
6
6
  class Flow < Cases::Flow
7
- private def next_use_case_result(use_case, result, input)
7
+ private def __next_use_case_result(use_case, result, input)
8
8
  instance = use_case.__new__(result, input)
9
- instance.call
9
+ instance.__call__
10
10
  rescue => exception
11
11
  raise exception if Case::Error.by_wrong_usage?(exception)
12
12
 
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: 3.0.0.rc3
4
+ version: 3.0.0.rc4
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-07-30 00:00:00.000000000 Z
11
+ date: 2020-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind