strum 0.0.38 → 0.0.40

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7c8a20f6179dc0c1358fae87f00c2f6fb0be85c42cddd9f545e854431dba4217
4
- data.tar.gz: 17531b732f1aff37adea4e64fa5ac7960704f2e283a4677d0bbaba99f22623ad
3
+ metadata.gz: 669c2365f0c1acb88593f40bf72fa07d578d50f45002ff050bcec003f6ef5b88
4
+ data.tar.gz: 01c3a81de20d453c75c331668967bcc43513839293477b30179d770908cfeaac
5
5
  SHA512:
6
- metadata.gz: 87ffae962e4b0873239afc21e32768221071db8d5fc74fa03eba275c0f12b1f230e9db26d3b2e79d29daea92fe5fc54ce030475c3569ef2f334d54a79f665f93
7
- data.tar.gz: 06af32c6691ebbea36a646cb0e5b6311f426fee26ffd1ee2e2a07c11c7fa52d89d19f1c9109a09925242d93184a317c3717b78b8523ad407e2bb74d9aa08ea38
6
+ metadata.gz: 310fa01411570abe606bcdaf6dbfcd69c0952d50fd2ff3dd788d8142cec9e28aedcba8b5bf8c80f7cde172d726faba41d2909e2e6fdccf0c768c91852eaeeb6c
7
+ data.tar.gz: ce8f1eff59478e10650f902c974538de4e3c312a313d7ba0424feed717d5866865c0bfe628bc6f8dad1cb923738177b90e50496ae56553fa90b079465a5d3694
@@ -1,23 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- strum (0.0.37)
4
+ strum (0.0.40)
5
5
  dry-inflector (~> 0.2.0)
6
- dry-matcher (~> 0.8.2)
7
6
  thor (~> 0.20)
8
7
 
9
8
  GEM
10
9
  remote: https://rubygems.org/
11
10
  specs:
12
11
  ast (2.4.0)
13
- concurrent-ruby (1.1.5)
14
12
  diff-lcs (1.3)
15
- dry-core (0.4.9)
16
- concurrent-ruby (~> 1.0)
17
13
  dry-inflector (0.2.0)
18
- dry-matcher (0.8.3)
19
- dry-core (>= 0.4.8)
20
- io-console (0.5.4)
14
+ io-console (0.5.5)
21
15
  irb (1.2.1)
22
16
  reline (>= 0.0.1)
23
17
  jaro_winkler (1.5.4)
@@ -49,11 +43,11 @@ GEM
49
43
  ruby-progressbar (~> 1.7)
50
44
  unicode-display_width (>= 1.4.0, < 1.7)
51
45
  ruby-progressbar (1.10.1)
52
- sequel (5.28.0)
46
+ sequel (5.29.0)
53
47
  sequel-annotate (1.4.0)
54
48
  sequel (>= 4)
55
49
  thor (0.20.3)
56
- unicode-display_width (1.6.0)
50
+ unicode-display_width (1.6.1)
57
51
 
58
52
  PLATFORMS
59
53
  ruby
@@ -1,27 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/matcher"
4
-
5
3
  module Strum
6
4
  # Module
7
5
  module Service
8
6
  class Failure < StandardError; end
9
7
 
10
- StrumMatcher = Dry::Matcher.new(
11
- success: Dry::Matcher::Case.new(
12
- match: lambda do |value, *pattern|
13
- value[0] && (pattern.any? ? pattern.include?(value[1]) : true)
14
- end,
15
- resolve: ->(value) { value.last }
16
- ),
17
- failure: Dry::Matcher::Case.new(
18
- match: lambda do |value, *pattern|
19
- !value[0] && (pattern.any? ? pattern.include?(value[1]) : true)
20
- end,
21
- resolve: ->(value) { value.last }
22
- )
23
- )
24
-
25
8
  def self.included(base)
26
9
  base.class_eval do
27
10
  extend ClassMethods
@@ -38,16 +21,24 @@ module Strum
38
21
  # Instance methods
39
22
  def initialize(_input)
40
23
  self.strum_errors = {}
24
+ self.service_handlers = { on: {}, success: {}, failure: {} }
41
25
  self.outputs = {}
42
26
  self._input = _input
43
27
  self._input.freeze
44
28
  self.input = self._input.dup
45
29
  end
46
30
 
47
- def execute(&block)
31
+ def execute
48
32
  audit
49
- call if valid?
50
- valid? ? valid_result(&block) : invalid_result(&block)
33
+ if valid?
34
+ yield(self) if block_given?
35
+ call
36
+ end
37
+ valid? ? valid_result : invalid_result
38
+ end
39
+
40
+ def hook(name, data = self)
41
+ service_handlers[:on][name].is_a?(Proc) && service_handlers[:on][name].call(data)
51
42
  end
52
43
 
53
44
  def valid?
@@ -58,6 +49,18 @@ module Strum
58
49
  strum_errors
59
50
  end
60
51
 
52
+ def on(arg, &block)
53
+ service_handlers[:on][arg] = block
54
+ end
55
+
56
+ def success(arg = nil, &block)
57
+ service_handlers[:success][arg] = block
58
+ end
59
+
60
+ def failure(arg = nil, &block)
61
+ service_handlers[:failure][arg] = block
62
+ end
63
+
61
64
  def method_missing(method_name, *args, &_block)
62
65
  super unless input.is_a?(Hash) && input[method_name.to_sym]
63
66
 
@@ -70,7 +73,7 @@ module Strum
70
73
 
71
74
  protected
72
75
 
73
- attr_accessor :_input, :input, :strum_errors, :outputs
76
+ attr_accessor :_input, :input, :strum_errors, :outputs, :service_handlers
74
77
 
75
78
  def call
76
79
  raise Failure, "call method must be implemented"
@@ -130,17 +133,14 @@ module Strum
130
133
  key
131
134
  end
132
135
 
133
- def valid_result(&block)
134
- return outputs[:default] || outputs unless block_given?
135
- return StrumMatcher.call([true, outputs[:default]], &block) if outputs[:default]
136
-
137
- StrumMatcher.call([true, *outputs.keys, outputs], &block)
136
+ def valid_result
137
+ handler = service_handlers[:success][((outputs.keys << nil) & service_handlers[:success].keys).first]
138
+ handler.is_a?(Proc) ? handler.call(outputs[:default] || outputs) : outputs[:default] || outputs
138
139
  end
139
140
 
140
- def invalid_result(&block)
141
- return nil unless block_given?
142
-
143
- StrumMatcher.call([false, *errors.values, errors], &block)
141
+ def invalid_result
142
+ handler = service_handlers[:failure][((errors.keys << nil) & service_handlers[:failure].keys).first]
143
+ handler.is_a?(Proc) ? handler.call(errors) : errors
144
144
  end
145
145
  end
146
146
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Strum
4
- VERSION = "0.0.38"
4
+ VERSION = "0.0.40"
5
5
  end
@@ -36,7 +36,6 @@ Gem::Specification.new do |spec|
36
36
  spec.require_paths = ["lib"]
37
37
 
38
38
  spec.add_dependency "dry-inflector", "~> 0.2.0"
39
- spec.add_dependency "dry-matcher", "~> 0.8.2"
40
39
  spec.add_dependency "thor", "~> 0.20"
41
40
  spec.add_development_dependency "bundler", "~> 1.17"
42
41
  spec.add_development_dependency "irb"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.38
4
+ version: 0.0.40
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serhiy Nazarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-30 00:00:00.000000000 Z
11
+ date: 2020-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-inflector
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.2.0
27
- - !ruby/object:Gem::Dependency
28
- name: dry-matcher
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.8.2
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.8.2
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: thor
43
29
  requirement: !ruby/object:Gem::Requirement