u-case 3.0.0.rc1 → 3.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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'