u-case 3.0.0.rc1 → 3.0.0.rc6

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.rc1'.freeze
5
+ VERSION = '3.0.0.rc6'.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
 
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.required_ruby_version = '>= 2.2.0'
27
27
 
28
- spec.add_runtime_dependency 'kind', '~> 3.0'
28
+ spec.add_runtime_dependency 'kind', '>= 3.0', '< 5.0'
29
29
  spec.add_runtime_dependency 'u-attributes', '~> 1.1'
30
30
 
31
31
  spec.add_development_dependency 'bundler'
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u-case
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc1
4
+ version: 3.0.0.rc6
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-21 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
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '3.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: u-attributes
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +72,7 @@ dependencies:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
74
  version: '13.0'
69
- description: Create simple and powerful use cases as objects.
75
+ description: Create simple and powerful use cases as Ruby objects.
70
76
  email:
71
77
  - rodrigo.serradura@gmail.com
72
78
  executables: []
@@ -81,10 +87,12 @@ files:
81
87
  - Gemfile
82
88
  - LICENSE.txt
83
89
  - README.md
90
+ - README.pt-BR.md
84
91
  - Rakefile
85
92
  - bin/console
86
93
  - bin/setup
87
94
  - lib/micro/case.rb
95
+ - lib/micro/case/config.rb
88
96
  - lib/micro/case/error.rb
89
97
  - lib/micro/case/result.rb
90
98
  - lib/micro/case/safe.rb
@@ -97,7 +105,6 @@ files:
97
105
  - lib/micro/cases/safe/flow.rb
98
106
  - lib/u-case.rb
99
107
  - lib/u-case/with_activemodel_validation.rb
100
- - lib/u-case/with_validation.rb
101
108
  - test.sh
102
109
  - u-case.gemspec
103
110
  homepage: https://github.com/serradura/u-case
@@ -122,5 +129,5 @@ requirements: []
122
129
  rubygems_version: 3.0.6
123
130
  signing_key:
124
131
  specification_version: 4
125
- summary: Create simple and powerful use cases as objects.
132
+ summary: Create simple and powerful use cases as Ruby objects.
126
133
  test_files: []
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- warn 'Deprecation: "u-case/with_validation" will be deprecated in the next major release.' \
4
- 'Please use "u-case/with_activemodel_validation" instead of it.'
5
-
6
- require 'u-case/with_activemodel_validation'