strum 0.0.38 → 0.0.40

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.
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