resol 0.7.1 → 0.9.0

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: 5fcf57857ff7296ff6a03d749bf23b753bb7c954f35c646337bafdca35d0b421
4
- data.tar.gz: 70c0d5f63ec8bd3ee7b75b9a4857138d86ba77afa3186af778f3bae357c7922c
3
+ metadata.gz: 737ecf288d9db1fc0440dda961c9e0a3a9c5072fba6f1f3a4049a67647a782bb
4
+ data.tar.gz: c50a24b67fb2a5c20c37d9a4204ba6c2293b7d597c0aa46085422ff30fbc0d9e
5
5
  SHA512:
6
- metadata.gz: f1c39188fbbfc3280db5989ad7de4f706f5a2064ebd4a55de1a9b1be16f300ffc11d0e7b40907a7273f5a26d0200af4176a9683979e1cafee1d9c47ef92a0c4b
7
- data.tar.gz: 9a7fd22c0ca24a6d8bb1470c95a840c2ab8679009eed7fd0b3f32404735e498553432d09c8f009de160b26eeec33f23f6ec8e9b46dad7be074265386f2b70838
6
+ metadata.gz: dec029e7a8b86070c7e3090d7f755415d57e88a572c8d67ef29feec935066cba996cfadd71ef3a93e7e4c502c218952bd00d299fa1473673ee4e6923367c199b
7
+ data.tar.gz: 78332a4cc2eb93b82bc1f963ae141c9b1176ec11c7fc145dcbe1219493817d465f971fe94cdbd2d6727acc7b1cb4f0c9c546f51ce3bfc0cb1c3a11680567a62b
@@ -16,7 +16,7 @@ jobs:
16
16
  - uses: actions/checkout@v2
17
17
  - uses: ruby/setup-ruby@v1
18
18
  with:
19
- ruby-version: 3
19
+ ruby-version: "3.1"
20
20
  bundler-cache: true
21
21
  - name: Run Linter
22
22
  run: bundle exec ci-helper RubocopLint
@@ -43,7 +43,7 @@ jobs:
43
43
  strategy:
44
44
  fail-fast: false
45
45
  matrix:
46
- ruby: [2.7]
46
+ ruby: ["2.7", "3.0"]
47
47
  experimental: [false]
48
48
  include:
49
49
  - ruby: head
data/Gemfile CHANGED
@@ -3,3 +3,12 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
+
7
+ gem "bundler-audit"
8
+ gem "ci-helper"
9
+ gem "pry"
10
+ gem "rake"
11
+ gem "rspec"
12
+ gem "rubocop-config-umbrellio"
13
+ gem "simplecov"
14
+ gem "simplecov-lcov"
data/Gemfile.lock CHANGED
@@ -1,123 +1,142 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- resol (0.7.1)
4
+ resol (0.9.0)
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.1)
10
+ activesupport (7.1.2)
11
+ base64
12
+ bigdecimal
11
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ connection_pool (>= 2.2.5)
15
+ drb
12
16
  i18n (>= 1.6, < 2)
13
17
  minitest (>= 5.1)
18
+ mutex_m
14
19
  tzinfo (~> 2.0)
15
- zeitwerk (~> 2.3)
16
20
  ast (2.4.2)
17
- bundler-audit (0.9.0.1)
21
+ base64 (0.2.0)
22
+ bigdecimal (3.1.4)
23
+ bundler-audit (0.9.1)
18
24
  bundler (>= 1.2.0, < 3)
19
25
  thor (~> 1.0)
20
- ci-helper (0.4.2)
26
+ ci-helper (0.5.0)
21
27
  colorize (~> 0.8)
22
28
  dry-inflector (~> 0.2)
23
29
  umbrellio-sequel-plugins (~> 0.4)
24
30
  coderay (1.1.3)
25
31
  colorize (0.8.1)
26
- concurrent-ruby (1.1.9)
27
- diff-lcs (1.4.4)
32
+ concurrent-ruby (1.2.2)
33
+ connection_pool (2.4.1)
34
+ diff-lcs (1.5.0)
28
35
  docile (1.4.0)
29
- dry-inflector (0.2.1)
30
- i18n (1.8.11)
36
+ drb (2.2.0)
37
+ ruby2_keywords
38
+ dry-inflector (0.3.0)
39
+ i18n (1.14.1)
31
40
  concurrent-ruby (~> 1.0)
41
+ json (2.6.3)
32
42
  method_source (1.0.0)
33
- minitest (5.14.4)
34
- parallel (1.21.0)
35
- parser (3.0.3.1)
43
+ minitest (5.20.0)
44
+ mutex_m (0.2.0)
45
+ parallel (1.23.0)
46
+ parser (3.2.2.4)
36
47
  ast (~> 2.4.1)
37
- pry (0.14.1)
48
+ racc
49
+ pry (0.14.2)
38
50
  coderay (~> 1.1)
39
51
  method_source (~> 1.0)
40
- qonfig (0.26.0)
41
- rack (2.2.3)
42
- rainbow (3.0.0)
43
- rake (13.0.6)
44
- regexp_parser (2.2.0)
45
- rexml (3.2.5)
46
- rspec (3.10.0)
47
- rspec-core (~> 3.10.0)
48
- rspec-expectations (~> 3.10.0)
49
- rspec-mocks (~> 3.10.0)
50
- rspec-core (3.10.1)
51
- rspec-support (~> 3.10.0)
52
- rspec-expectations (3.10.1)
52
+ qonfig (0.28.0)
53
+ racc (1.7.3)
54
+ rack (3.0.8)
55
+ rainbow (3.1.1)
56
+ rake (13.1.0)
57
+ regexp_parser (2.8.2)
58
+ rexml (3.2.6)
59
+ rspec (3.12.0)
60
+ rspec-core (~> 3.12.0)
61
+ rspec-expectations (~> 3.12.0)
62
+ rspec-mocks (~> 3.12.0)
63
+ rspec-core (3.12.2)
64
+ rspec-support (~> 3.12.0)
65
+ rspec-expectations (3.12.3)
53
66
  diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.10.0)
55
- rspec-mocks (3.10.2)
67
+ rspec-support (~> 3.12.0)
68
+ rspec-mocks (3.12.6)
56
69
  diff-lcs (>= 1.2.0, < 2.0)
57
- rspec-support (~> 3.10.0)
58
- rspec-support (3.10.3)
59
- rubocop (1.17.0)
70
+ rspec-support (~> 3.12.0)
71
+ rspec-support (3.12.1)
72
+ rubocop (1.50.2)
73
+ json (~> 2.3)
60
74
  parallel (~> 1.10)
61
- parser (>= 3.0.0.0)
75
+ parser (>= 3.2.0.0)
62
76
  rainbow (>= 2.2.2, < 4.0)
63
77
  regexp_parser (>= 1.8, < 3.0)
64
- rexml
65
- rubocop-ast (>= 1.7.0, < 2.0)
78
+ rexml (>= 3.2.5, < 4.0)
79
+ rubocop-ast (>= 1.28.0, < 2.0)
66
80
  ruby-progressbar (~> 1.7)
67
- unicode-display_width (>= 1.4.0, < 3.0)
68
- rubocop-ast (1.14.0)
69
- parser (>= 3.0.1.1)
70
- rubocop-config-umbrellio (1.17.0.53)
71
- rubocop (= 1.17.0)
72
- rubocop-performance (= 1.10.0)
73
- rubocop-rails (= 2.9.1)
74
- rubocop-rake (= 0.5.1)
75
- rubocop-rspec (= 2.2.0)
76
- rubocop-sequel (= 0.2.0)
77
- rubocop-performance (1.10.0)
78
- rubocop (>= 0.90.0, < 2.0)
81
+ unicode-display_width (>= 2.4.0, < 3.0)
82
+ rubocop-ast (1.30.0)
83
+ parser (>= 3.2.1.0)
84
+ rubocop-capybara (2.19.0)
85
+ rubocop (~> 1.41)
86
+ rubocop-config-umbrellio (1.50.0.85)
87
+ rubocop (~> 1.50.0)
88
+ rubocop-performance (~> 1.17.0)
89
+ rubocop-rails (~> 2.19.0)
90
+ rubocop-rake (~> 0.6.0)
91
+ rubocop-rspec (~> 2.20.0)
92
+ rubocop-sequel (~> 0.3.3)
93
+ rubocop-performance (1.17.1)
94
+ rubocop (>= 1.7.0, < 2.0)
79
95
  rubocop-ast (>= 0.4.0)
80
- rubocop-rails (2.9.1)
96
+ rubocop-rails (2.19.1)
81
97
  activesupport (>= 4.2.0)
82
98
  rack (>= 1.1)
83
- rubocop (>= 0.90.0, < 2.0)
84
- rubocop-rake (0.5.1)
85
- rubocop
86
- rubocop-rspec (2.2.0)
99
+ rubocop (>= 1.33.0, < 2.0)
100
+ rubocop-rake (0.6.0)
87
101
  rubocop (~> 1.0)
88
- rubocop-ast (>= 1.1.0)
89
- rubocop-sequel (0.2.0)
102
+ rubocop-rspec (2.20.0)
103
+ rubocop (~> 1.33)
104
+ rubocop-capybara (~> 2.17)
105
+ rubocop-sequel (0.3.4)
90
106
  rubocop (~> 1.0)
91
- ruby-progressbar (1.11.0)
92
- sequel (5.51.0)
93
- simplecov (0.21.2)
107
+ ruby-progressbar (1.13.0)
108
+ ruby2_keywords (0.0.5)
109
+ sequel (5.74.0)
110
+ bigdecimal
111
+ simplecov (0.22.0)
94
112
  docile (~> 1.1)
95
113
  simplecov-html (~> 0.11)
96
114
  simplecov_json_formatter (~> 0.1)
97
115
  simplecov-html (0.12.3)
98
116
  simplecov-lcov (0.8.0)
99
- simplecov_json_formatter (0.1.3)
100
- smart_engine (0.11.0)
101
- smart_initializer (0.8.0)
117
+ simplecov_json_formatter (0.1.4)
118
+ smart_engine (0.17.0)
119
+ smart_initializer (0.11.1)
102
120
  qonfig (~> 0.24)
103
- smart_engine (~> 0.11)
104
- smart_types (~> 0.4)
105
- smart_types (0.7.0)
121
+ smart_engine (~> 0.16)
122
+ smart_types (~> 0.8)
123
+ smart_types (0.8.0)
106
124
  smart_engine (~> 0.11)
107
125
  symbiont-ruby (0.7.0)
108
- thor (1.1.0)
109
- tzinfo (2.0.4)
126
+ thor (1.3.0)
127
+ tzinfo (2.0.6)
110
128
  concurrent-ruby (~> 1.0)
111
- umbrellio-sequel-plugins (0.5.1.27)
129
+ umbrellio-sequel-plugins (0.14.0.189)
112
130
  sequel
113
131
  symbiont-ruby
114
- unicode-display_width (2.1.0)
115
- zeitwerk (2.5.1)
132
+ unicode-display_width (2.5.0)
116
133
 
117
134
  PLATFORMS
135
+ arm64-darwin-21
118
136
  x86_64-darwin-19
119
137
  x86_64-darwin-20
120
138
  x86_64-darwin-21
139
+ x86_64-darwin-22
121
140
  x86_64-linux
122
141
 
123
142
  DEPENDENCIES
@@ -132,4 +151,4 @@ DEPENDENCIES
132
151
  simplecov-lcov
133
152
 
134
153
  BUNDLED WITH
135
- 2.2.31
154
+ 2.4.10
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Resol
4
+ class Configuration
5
+ DEFAULT_RETURN_ENGINE = ReturnEngine::Catch
6
+
7
+ class << self
8
+ def configure
9
+ SmartCore::Initializer::Configuration.configure do |c|
10
+ self.smartcore_config = c
11
+ yield self
12
+ self.smartcore_config = nil
13
+ end
14
+ end
15
+
16
+ def return_engine
17
+ @return_engine || DEFAULT_RETURN_ENGINE
18
+ end
19
+
20
+ def return_engine=(engine)
21
+ @return_engine = engine
22
+ end
23
+
24
+ private
25
+
26
+ attr_accessor :smartcore_config
27
+
28
+ def method_missing(meth, *args, &block)
29
+ # rubocop:disable Style/SafeNavigation
30
+ if smartcore_config && smartcore_config.respond_to?(meth)
31
+ # rubocop:enable Style/SafeNavigation
32
+ smartcore_config.__send__(meth, *args, &block)
33
+ else
34
+ super(meth, *args, &block)
35
+ end
36
+ end
37
+
38
+ def respond_to_missing?(meth, include_private)
39
+ smartcore_config.respond_to?(meth, include_private)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Resol
4
+ module ReturnEngine
5
+ module Catch
6
+ extend self
7
+
8
+ def wrap_call(service)
9
+ catch(service) do
10
+ yield
11
+ NOT_EXITED
12
+ end
13
+ end
14
+
15
+ def uncaught_call?(return_obj)
16
+ return_obj == NOT_EXITED
17
+ end
18
+
19
+ def handle_return(service, data)
20
+ throw(service, data)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Resol
4
+ module ReturnEngine
5
+ module Return
6
+ extend self
7
+
8
+ def wrap_call(_service)
9
+ yield
10
+ end
11
+
12
+ def uncaught_call?(return_obj)
13
+ !return_obj.is_a?(Resol::Service::Result)
14
+ end
15
+
16
+ def handle_return(_service, data)
17
+ data
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Resol
4
+ module ReturnEngine
5
+ NOT_EXITED = Object.new.freeze
6
+ DataWrapper = Struct.new(:data)
7
+ end
8
+ end
9
+
10
+ require_relative "return_engine/catch"
11
+ require_relative "return_engine/return"
data/lib/resol/service.rb CHANGED
@@ -7,6 +7,7 @@ require_relative "result"
7
7
  module Resol
8
8
  class Service
9
9
  class InvalidCommandImplementation < StandardError; end
10
+ class InvalidCommandCall < StandardError; end
10
11
 
11
12
  class Failure < StandardError
12
13
  attr_accessor :data, :code
@@ -39,20 +40,28 @@ module Resol
39
40
  end
40
41
 
41
42
  def call(*args, **kwargs, &block)
42
- command = build(*args, **kwargs)
43
- result = catch(command) do
44
- __run_callbacks__(command)
45
- command.call(&block)
46
- nil
43
+ service = build(*args, **kwargs)
44
+
45
+ result = return_engine.wrap_call(service) do
46
+ service.instance_variable_set(:@__performing__, true)
47
+ __run_callbacks__(service)
48
+ service.call(&block)
47
49
  end
48
- return Resol::Success(result.data) unless result.nil?
49
50
 
50
- error_message = "No success! or fail! called in the #call method in #{command.class}"
51
- raise InvalidCommandImplementation, error_message
51
+ if return_engine.uncaught_call?(result)
52
+ error_message = "No `#success!` or `#fail!` called in `#call` method in #{service.class}."
53
+ raise InvalidCommandImplementation, error_message
54
+ else
55
+ Resol::Success(result.data)
56
+ end
52
57
  rescue self::Failure => e
53
58
  Resol::Failure(e)
54
59
  end
55
60
 
61
+ def return_engine
62
+ Resol::Configuration.return_engine
63
+ end
64
+
56
65
  def call!(...)
57
66
  call(...).value_or { |error| raise error }
58
67
  end
@@ -62,12 +71,30 @@ module Resol
62
71
 
63
72
  private
64
73
 
74
+ attr_reader :__performing__
75
+
65
76
  def fail!(code, data = nil)
66
- raise self.class::Failure.new(code, data)
77
+ check_performing do
78
+ raise self.class::Failure.new(code, data)
79
+ end
67
80
  end
68
81
 
69
82
  def success!(data = nil)
70
- throw(self, Result.new(data))
83
+ check_performing do
84
+ self.class.return_engine.handle_return(self, Result.new(data))
85
+ end
86
+ end
87
+
88
+ def check_performing
89
+ if __performing__
90
+ yield
91
+ else
92
+ error_message =
93
+ "It looks like #call instance method was called directly in #{self.class}. " \
94
+ "You must always use class-level `.call` or `.call!` method."
95
+
96
+ raise InvalidCommandCall, error_message
97
+ end
71
98
  end
72
99
  end
73
100
  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.7.1"
4
+ VERSION = "0.9.0"
5
5
  end
data/lib/resol.rb CHANGED
@@ -3,8 +3,9 @@
3
3
  require "smart_core/initializer"
4
4
 
5
5
  require_relative "resol/version"
6
+ require_relative "resol/return_engine"
7
+ require_relative "resol/configuration"
6
8
  require_relative "resol/service"
7
9
 
8
10
  module Resol
9
- Configuration = SmartCore::Initializer::Configuration
10
11
  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.7.1
4
+ version: 0.9.0
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-12-06 00:00:00.000000000 Z
11
+ date: 2023-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: smart_initializer
@@ -24,118 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.7'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler-audit
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: ci-helper
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: pry
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rspec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-config-umbrellio
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: simplecov
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: simplecov-lcov
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
27
  description: Gem for creating (any) object patterns
140
28
  email:
141
29
  - nulldefiner@gmail.com
@@ -158,7 +46,11 @@ files:
158
46
  - lib/resol.rb
159
47
  - lib/resol/builder.rb
160
48
  - lib/resol/callbacks.rb
49
+ - lib/resol/configuration.rb
161
50
  - lib/resol/result.rb
51
+ - lib/resol/return_engine.rb
52
+ - lib/resol/return_engine/catch.rb
53
+ - lib/resol/return_engine/return.rb
162
54
  - lib/resol/service.rb
163
55
  - lib/resol/version.rb
164
56
  homepage: https://github.com/umbrellio/resol
@@ -180,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
72
  - !ruby/object:Gem::Version
181
73
  version: '0'
182
74
  requirements: []
183
- rubygems_version: 3.2.15
75
+ rubygems_version: 3.4.21
184
76
  signing_key:
185
77
  specification_version: 4
186
78
  summary: Gem for creating (any) object patterns