u-case 3.0.0.rc2 → 3.0.0.rc7

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.
@@ -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
 
@@ -14,6 +14,13 @@ module Micro
14
14
  end
15
15
  end
16
16
  end
17
+ def self.slice_hash(hash, keys)
18
+ if Kind::Of::Hash(hash).respond_to?(:slice)
19
+ hash.slice(*keys)
20
+ else
21
+ hash.select { |key, _value| keys.include?(key) }
22
+ end
23
+ end
17
24
  end
18
25
  end
19
26
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  class Case
5
- VERSION = '3.0.0.rc2'.freeze
5
+ VERSION = '3.0.0.rc7'.freeze
6
6
  end
7
7
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kind/active_model/validation'
4
+
3
5
  require 'micro/case'
4
6
 
5
7
  module Micro
@@ -29,7 +31,7 @@ module Micro
29
31
 
30
32
  return result if result.is_a?(Result)
31
33
 
32
- raise Error::UnexpectedResult.new(self.class)
34
+ raise Error::UnexpectedResult.new("#{self.class.name}#call!")
33
35
  end
34
36
 
35
37
  def failure_by_validation_error(object)
@@ -29,66 +29,50 @@ module Micro
29
29
  @next_use_cases = use_cases[1..-1]
30
30
  end
31
31
 
32
- def call(arg = {})
33
- memo = arg.is_a?(Hash) ? arg.dup : {}
34
-
35
- first_result = first_use_case_result(arg)
32
+ def call!(input:, result:)
33
+ first_result = __next_use_case_result(@first_use_case, result, input)
36
34
 
37
35
  return first_result if @next_use_cases.empty?
38
36
 
39
- next_use_cases_result(first_result, memo)
37
+ __next_use_cases_result(first_result)
40
38
  end
41
39
 
42
- def to_proc
43
- Proc.new { |arg| call(arg) }
40
+ def call(input = Kind::Empty::HASH)
41
+ call!(input: input, result: Case::Result.new)
44
42
  end
45
43
 
46
- private
44
+ alias __call__ call
47
45
 
48
- def is_a_result?(arg)
49
- arg.is_a?(Case::Result)
50
- end
51
-
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
46
+ def to_proc
47
+ Proc.new { |arg| call(arg) }
48
+ end
57
49
 
58
- def call_arg(arg)
59
- output = arg.call
50
+ def then(use_case = nil, &block)
51
+ can_yield_self = respond_to?(:yield_self)
60
52
 
61
- is_a_result?(output) ? output.value : output
62
- end
53
+ if block
54
+ raise Error::InvalidInvocationOfTheThenMethod if use_case
55
+ raise NotImplementedError if !can_yield_self
63
56
 
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)
57
+ yield_self(&block)
58
+ else
59
+ return yield_self if !use_case && can_yield_self
67
60
 
68
- arg
61
+ self.call.then(use_case)
69
62
  end
63
+ end
70
64
 
71
- def first_use_case_result(arg)
72
- input = first_use_case_input(arg)
73
-
74
- result = Case::Result.new
75
-
76
- @first_use_case.__call_and_set_transition__(result, input)
77
- end
65
+ private
78
66
 
79
- def next_use_case_result(use_case, result, input)
80
- use_case.__new__(result, input).call
67
+ def __next_use_case_result(use_case, result, input)
68
+ use_case.__new__(result, input).__call__
81
69
  end
82
70
 
83
- def next_use_cases_result(first_result, memo)
71
+ def __next_use_cases_result(first_result)
84
72
  @next_use_cases.reduce(first_result) do |result, use_case|
85
73
  break result if result.failure?
86
74
 
87
- memo.merge!(result.value)
88
-
89
- result.__set_transitions_accessible_attributes__(memo)
90
-
91
- next_use_case_result(use_case, result, memo)
75
+ __next_use_case_result(use_case, result, result.data)
92
76
  end
93
77
  end
94
78
  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
 
@@ -1,5 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'kind/active_model/validation'
4
-
5
3
  require 'micro/case/with_activemodel_validation'
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Rodrigo Serradura']
10
10
  spec.email = ['rodrigo.serradura@gmail.com']
11
11
 
12
- spec.summary = %q{Create simple and powerful use cases as objects.}
13
- spec.description = %q{Create simple and powerful use cases as objects.}
12
+ spec.summary = %q{Create simple and powerful use cases as Ruby objects.}
13
+ spec.description = %q{Create simple and powerful use cases as Ruby objects.}
14
14
  spec.homepage = 'https://github.com/serradura/u-case'
15
15
  spec.license = 'MIT'
16
16
 
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.rc2
4
+ version: 3.0.0.rc7
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-28 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind
@@ -72,7 +72,7 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '13.0'
75
- description: Create simple and powerful use cases as objects.
75
+ description: Create simple and powerful use cases as Ruby objects.
76
76
  email:
77
77
  - rodrigo.serradura@gmail.com
78
78
  executables: []
@@ -87,10 +87,12 @@ files:
87
87
  - Gemfile
88
88
  - LICENSE.txt
89
89
  - README.md
90
+ - README.pt-BR.md
90
91
  - Rakefile
91
92
  - bin/console
92
93
  - bin/setup
93
94
  - lib/micro/case.rb
95
+ - lib/micro/case/config.rb
94
96
  - lib/micro/case/error.rb
95
97
  - lib/micro/case/result.rb
96
98
  - lib/micro/case/safe.rb
@@ -127,5 +129,5 @@ requirements: []
127
129
  rubygems_version: 3.0.6
128
130
  signing_key:
129
131
  specification_version: 4
130
- summary: Create simple and powerful use cases as objects.
132
+ summary: Create simple and powerful use cases as Ruby objects.
131
133
  test_files: []