u-case 3.0.0.rc3 → 3.0.0.rc4

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.
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