resol 0.5.1 → 0.7.1

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: 010d5a745816d85fe7754f0f8cf9ab9bc73803e5daf75b7a07e517b4d64c9432
4
- data.tar.gz: f939bbb9522f095651ef7ff15e050babb786eb4bc1d4d34d51644c6470ae8fb3
3
+ metadata.gz: 5fcf57857ff7296ff6a03d749bf23b753bb7c954f35c646337bafdca35d0b421
4
+ data.tar.gz: 70c0d5f63ec8bd3ee7b75b9a4857138d86ba77afa3186af778f3bae357c7922c
5
5
  SHA512:
6
- metadata.gz: 5342c5148df6bf09ed709152d3962efe079dc7ae3fb88680e930a643bcdb24a1603ce4eb6ffb43780f0b65cfe9221ec2eadcf8269d28f42bb3d807066b0a2053
7
- data.tar.gz: f45af14da0c224877ccfa8f1f156d51f42c3f2e3a2e92f8aa336842a66e0cdb2c1c5b7df93448023d6df20891a8d7439b92d9dfd616d03356bf02dedf3d2923b
6
+ metadata.gz: f1c39188fbbfc3280db5989ad7de4f706f5a2064ebd4a55de1a9b1be16f300ffc11d0e7b40907a7273f5a26d0200af4176a9683979e1cafee1d9c47ef92a0c4b
7
+ data.tar.gz: 9a7fd22c0ca24a6d8bb1470c95a840c2ab8679009eed7fd0b3f32404735e498553432d09c8f009de160b26eeec33f23f6ec8e9b46dad7be074265386f2b70838
data/Gemfile.lock CHANGED
@@ -1,20 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- resol (0.5.1)
4
+ resol (0.7.1)
5
5
  smart_initializer (~> 0.7)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (6.1.4)
10
+ activesupport (6.1.4.1)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (>= 1.6, < 2)
13
13
  minitest (>= 5.1)
14
14
  tzinfo (~> 2.0)
15
15
  zeitwerk (~> 2.3)
16
16
  ast (2.4.2)
17
- bundler-audit (0.8.0)
17
+ bundler-audit (0.9.0.1)
18
18
  bundler (>= 1.2.0, < 3)
19
19
  thor (~> 1.0)
20
20
  ci-helper (0.4.2)
@@ -26,22 +26,22 @@ GEM
26
26
  concurrent-ruby (1.1.9)
27
27
  diff-lcs (1.4.4)
28
28
  docile (1.4.0)
29
- dry-inflector (0.2.0)
30
- i18n (1.8.10)
29
+ dry-inflector (0.2.1)
30
+ i18n (1.8.11)
31
31
  concurrent-ruby (~> 1.0)
32
32
  method_source (1.0.0)
33
33
  minitest (5.14.4)
34
- parallel (1.20.1)
35
- parser (3.0.1.1)
34
+ parallel (1.21.0)
35
+ parser (3.0.3.1)
36
36
  ast (~> 2.4.1)
37
37
  pry (0.14.1)
38
38
  coderay (~> 1.1)
39
39
  method_source (~> 1.0)
40
- qonfig (0.25.0)
40
+ qonfig (0.26.0)
41
41
  rack (2.2.3)
42
42
  rainbow (3.0.0)
43
- rake (13.0.3)
44
- regexp_parser (2.1.1)
43
+ rake (13.0.6)
44
+ regexp_parser (2.2.0)
45
45
  rexml (3.2.5)
46
46
  rspec (3.10.0)
47
47
  rspec-core (~> 3.10.0)
@@ -55,7 +55,7 @@ GEM
55
55
  rspec-mocks (3.10.2)
56
56
  diff-lcs (>= 1.2.0, < 2.0)
57
57
  rspec-support (~> 3.10.0)
58
- rspec-support (3.10.2)
58
+ rspec-support (3.10.3)
59
59
  rubocop (1.17.0)
60
60
  parallel (~> 1.10)
61
61
  parser (>= 3.0.0.0)
@@ -65,7 +65,7 @@ GEM
65
65
  rubocop-ast (>= 1.7.0, < 2.0)
66
66
  ruby-progressbar (~> 1.7)
67
67
  unicode-display_width (>= 1.4.0, < 3.0)
68
- rubocop-ast (1.7.0)
68
+ rubocop-ast (1.14.0)
69
69
  parser (>= 3.0.1.1)
70
70
  rubocop-config-umbrellio (1.17.0.53)
71
71
  rubocop (= 1.17.0)
@@ -89,7 +89,7 @@ GEM
89
89
  rubocop-sequel (0.2.0)
90
90
  rubocop (~> 1.0)
91
91
  ruby-progressbar (1.11.0)
92
- sequel (5.45.0)
92
+ sequel (5.51.0)
93
93
  simplecov (0.21.2)
94
94
  docile (~> 1.1)
95
95
  simplecov-html (~> 0.11)
@@ -98,11 +98,11 @@ GEM
98
98
  simplecov-lcov (0.8.0)
99
99
  simplecov_json_formatter (0.1.3)
100
100
  smart_engine (0.11.0)
101
- smart_initializer (0.7.0)
101
+ smart_initializer (0.8.0)
102
102
  qonfig (~> 0.24)
103
103
  smart_engine (~> 0.11)
104
104
  smart_types (~> 0.4)
105
- smart_types (0.4.0)
105
+ smart_types (0.7.0)
106
106
  smart_engine (~> 0.11)
107
107
  symbiont-ruby (0.7.0)
108
108
  thor (1.1.0)
@@ -111,12 +111,13 @@ GEM
111
111
  umbrellio-sequel-plugins (0.5.1.27)
112
112
  sequel
113
113
  symbiont-ruby
114
- unicode-display_width (2.0.0)
115
- zeitwerk (2.4.2)
114
+ unicode-display_width (2.1.0)
115
+ zeitwerk (2.5.1)
116
116
 
117
117
  PLATFORMS
118
118
  x86_64-darwin-19
119
119
  x86_64-darwin-20
120
+ x86_64-darwin-21
120
121
  x86_64-linux
121
122
 
122
123
  DEPENDENCIES
@@ -131,4 +132,4 @@ DEPENDENCIES
131
132
  simplecov-lcov
132
133
 
133
134
  BUNDLED WITH
134
- 2.2.19
135
+ 2.2.31
data/README.md CHANGED
@@ -99,9 +99,16 @@ Methods:
99
99
  - `failure?` – returns `true` for failure result and `false` for success result
100
100
  - `value!` – unwraps a result object, returns the value for success result, and throws an error for failure result
101
101
  - `value_or(other_value, &block)` – returns a value for success result or `other_value` for failure result (either calls `block` in case it given)
102
- - `or(&block)` - calls block for failure result, for success result does nothing
103
- - `either(success_proc, failure_proc)` - for success result calls success_proc with result value in args, for failure result calls failure_proc with error in args.
102
+ - `error` returns `nil` for success result and error object (with code and data) for failure result
103
+ - `or(&block)` calls block for failure result, for success result does nothing
104
+ - `either(success_proc, failure_proc)` – for success result calls success_proc with result value in args, for failure result calls failure_proc with error in args.
104
105
 
106
+ ### Error object
107
+
108
+ In case of failure you can get an error object with error code
109
+ and data from `fail!` arguments. This can be done by method `error` on
110
+ the result object and the returned object will have corresponding
111
+ methods `code` and `data`.
105
112
 
106
113
  ### Configuration
107
114
 
data/lib/resol/result.rb CHANGED
@@ -41,6 +41,10 @@ module Resol
41
41
  def value!
42
42
  @value
43
43
  end
44
+
45
+ def error
46
+ nil
47
+ end
44
48
  end
45
49
 
46
50
  class Failure < Result
@@ -68,6 +72,10 @@ module Resol
68
72
  def value!
69
73
  raise UnwrapError, "Failure result #{@value.inspect}"
70
74
  end
75
+
76
+ def error
77
+ @value
78
+ end
71
79
  end
72
80
 
73
81
  def self.Success(...)
data/lib/resol/service.rb CHANGED
@@ -8,58 +8,47 @@ module Resol
8
8
  class Service
9
9
  class InvalidCommandImplementation < StandardError; end
10
10
 
11
- class Interruption < StandardError
12
- attr_accessor :data
11
+ class Failure < StandardError
12
+ attr_accessor :data, :code
13
13
 
14
- def initialize(data)
14
+ def initialize(code, data)
15
+ self.code = code
15
16
  self.data = data
16
- super
17
+ super(data)
17
18
  end
18
19
 
19
20
  def inspect
20
21
  "#{self.class.name}: #{message}"
21
22
  end
22
23
 
23
- def message
24
- data.inspect
25
- end
26
- end
27
-
28
- class Failure < Interruption
29
- attr_accessor :code
30
-
31
- def initialize(code, data)
32
- self.code = code
33
- super(data)
34
- end
35
-
36
24
  def message
37
25
  data ? "#{code.inspect} => #{data.inspect}" : code.inspect
38
26
  end
39
27
  end
40
28
 
41
- class Success < Interruption; end
42
-
43
29
  include SmartCore::Initializer
44
30
  include Resol::Builder
45
31
  include Resol::Callbacks
46
32
 
33
+ Result = Struct.new(:data)
34
+
47
35
  class << self
48
36
  def inherited(klass)
49
37
  klass.const_set(:Failure, Class.new(klass::Failure))
50
- klass.const_set(:Success, Class.new(klass::Success))
51
38
  super
52
39
  end
53
40
 
54
41
  def call(*args, **kwargs, &block)
55
42
  command = build(*args, **kwargs)
56
- __run_callbacks__(command)
57
- command.call(&block)
43
+ result = catch(command) do
44
+ __run_callbacks__(command)
45
+ command.call(&block)
46
+ nil
47
+ end
48
+ return Resol::Success(result.data) unless result.nil?
58
49
 
59
50
  error_message = "No success! or fail! called in the #call method in #{command.class}"
60
51
  raise InvalidCommandImplementation, error_message
61
- rescue self::Success => e
62
- Resol::Success(e.data)
63
52
  rescue self::Failure => e
64
53
  Resol::Failure(e)
65
54
  end
@@ -78,7 +67,7 @@ module Resol
78
67
  end
79
68
 
80
69
  def success!(data = nil)
81
- raise self.class::Success.new(data)
70
+ throw(self, Result.new(data))
82
71
  end
83
72
  end
84
73
  end
data/lib/resol/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Resol
4
- VERSION = "0.5.1"
4
+ VERSION = "0.7.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Bespalov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-28 00:00:00.000000000 Z
11
+ date: 2021-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: smart_initializer