u-case 4.1.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,38 +4,43 @@ module Micro
4
4
  class Case
5
5
  class Result
6
6
  class Wrapper
7
- def initialize(result)
8
- @__is_unknown = true
7
+ attr_reader :output
9
8
 
9
+ def initialize(result)
10
10
  @result = result
11
+ @output = ::Kind::Undefined
12
+
13
+ @__is_unknown = true
11
14
  end
12
15
 
13
16
  def failure(type = nil)
14
- return if @result.success?
17
+ return if @result.success? || !undefined_output?
15
18
 
16
- if result_type?(type)
17
- @__is_unknown = false
18
-
19
- yield(@result)
20
- end
19
+ set_output(yield(@result)) if result_type?(type)
21
20
  end
22
21
 
23
22
  def success(type = nil)
24
- return if @result.failure?
23
+ return if @result.failure? || !undefined_output?
25
24
 
26
- if result_type?(type)
27
- @__is_unknown = false
28
-
29
- yield(@result)
30
- end
25
+ set_output(yield(@result)) if result_type?(type)
31
26
  end
32
27
 
33
28
  def unknown
34
- return yield(@result) if @__is_unknown
29
+ @output = yield(@result) if @__is_unknown && undefined_output?
35
30
  end
36
31
 
37
32
  private
38
33
 
34
+ def set_output(value)
35
+ @__is_unknown = false
36
+
37
+ @output = value
38
+ end
39
+
40
+ def undefined_output?
41
+ ::Kind::Undefined == @output
42
+ end
43
+
39
44
  def result_type?(type)
40
45
  type.nil? || @result.type == type
41
46
  end
@@ -1,36 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Micro
4
- class Case
5
- module Utils
3
+ module Micro::Case::Utils
6
4
 
7
- module Hashes
8
- def self.respond_to?(hash, method)
9
- Kind.of(Hash, hash).respond_to?(method)
10
- end
11
-
12
- def self.symbolize_keys(hash)
13
- return hash.transform_keys { |key| key.to_sym rescue key } if respond_to?(hash, :transform_keys)
5
+ module Hashes
6
+ def self.respond_to?(hash, method)
7
+ Kind::Hash[hash].respond_to?(method)
8
+ end
14
9
 
15
- hash.each_with_object({}) do |(k, v), memo|
16
- key = k.to_sym rescue k
17
- memo[key] = v
18
- end
19
- end
10
+ def self.symbolize_keys(hash)
11
+ return hash.transform_keys { |key| key.to_sym rescue key } if respond_to?(hash, :transform_keys)
20
12
 
21
- def self.stringify_keys(hash)
22
- return hash.transform_keys(&:to_s) if respond_to?(hash, :transform_keys)
13
+ hash.each_with_object({}) do |(k, v), memo|
14
+ key = k.to_sym rescue k
15
+ memo[key] = v
16
+ end
17
+ end
23
18
 
24
- hash.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v }
25
- end
19
+ def self.stringify_keys(hash)
20
+ return hash.transform_keys(&:to_s) if respond_to?(hash, :transform_keys)
26
21
 
27
- def self.slice(hash, keys)
28
- return hash.slice(*keys) if respond_to?(hash, :slice)
22
+ hash.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v }
23
+ end
29
24
 
30
- hash.select { |key, _value| keys.include?(key) }
31
- end
32
- end
25
+ def self.slice(hash, keys)
26
+ return hash.slice(*keys) if respond_to?(hash, :slice)
33
27
 
28
+ hash.select { |key, _value| keys.include?(key) }
34
29
  end
35
30
  end
31
+
36
32
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  class Case
5
- VERSION = '4.1.0'.freeze
5
+ VERSION = '4.3.0'.freeze
6
6
  end
7
7
  end
@@ -23,7 +23,7 @@ module Micro
23
23
  end
24
24
 
25
25
  def inspect
26
- '<(%s) use_cases=%s>' % [self.class, @use_cases]
26
+ '#<(%s) use_cases=%s>' % [self.class, @use_cases]
27
27
  end
28
28
 
29
29
  def call!(input:, result:)
@@ -39,7 +39,11 @@ module Micro
39
39
 
40
40
  return result unless block_given?
41
41
 
42
- yield ::Micro::Case::Result::Wrapper.new(result)
42
+ result_wrapper = ::Micro::Case::Result::Wrapper.new(result)
43
+
44
+ yield(result_wrapper)
45
+
46
+ result_wrapper.output
43
47
  end
44
48
 
45
49
  alias __call__ call
@@ -5,7 +5,7 @@ module Micro
5
5
  class Map
6
6
  IsAUseCaseOrFlowWithDefaults = -> arg { arg.is_a?(Array) && Micro.case_or_flow?(arg[0]) && arg[1].is_a?(Hash) }
7
7
  IsAUseCaseOrFlow = -> arg { Micro.case_or_flow?(arg) || IsAUseCaseOrFlowWithDefaults[arg] }
8
- HasValidArgs = -> (args) { Kind.of(Array, args).all?(&IsAUseCaseOrFlow) }
8
+ HasValidArgs = -> (args) { Kind::Array[args].all?(&IsAUseCaseOrFlow) }
9
9
 
10
10
  attr_reader :use_cases
11
11
 
@@ -28,7 +28,7 @@ module Micro
28
28
  end
29
29
 
30
30
  def call(arg = {})
31
- hash = Kind.of(Hash, arg)
31
+ hash = Kind::Hash[arg]
32
32
 
33
33
  use_cases.map(&GetUseCaseResult[hash])
34
34
  end
data/u-case.gemspec CHANGED
@@ -25,8 +25,8 @@ 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', '< 5.0'
29
- spec.add_runtime_dependency 'u-attributes', '~> 2.0'
28
+ spec.add_runtime_dependency 'kind', '>= 4.0', '< 6.0'
29
+ spec.add_runtime_dependency 'u-attributes', '>= 2.7', '< 3.0'
30
30
 
31
31
  spec.add_development_dependency 'bundler'
32
32
  spec.add_development_dependency 'rake', '~> 13.0'
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: 4.1.0
4
+ version: 4.3.0
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-10-14 00:00:00.000000000 Z
11
+ date: 2021-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind
@@ -16,34 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.0'
22
+ version: '6.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '3.0'
29
+ version: '4.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.0'
32
+ version: '6.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: u-attributes
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
40
+ - - "<"
38
41
  - !ruby/object:Gem::Version
39
- version: '2.0'
42
+ version: '3.0'
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: '2.0'
49
+ version: '2.7'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: bundler
49
55
  requirement: !ruby/object:Gem::Requirement