yaso 1.3.0 → 1.3.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: 1d9de791b4d45e8ea1cd2ffb6d75738f9d5eef8376261437b923d0795f81a5a2
4
- data.tar.gz: 1d6234c4203c8cd9acdec73b5267ff16a45563caf67fd757f8fbed7fb2228d79
3
+ metadata.gz: 82a14582b1dadeb5c6103880c2ec7b3d7afe887ec9d8eb90601d77c02cfaf785
4
+ data.tar.gz: 94eab6547c4c0eaa87285bf09aa78534c33c06164fb98435dc7fe0b2f6d84d54
5
5
  SHA512:
6
- metadata.gz: 8d8a4268ef7295d5eef6a6f8a45a73cc823f7d3322ad0c2cfea2f46a627f415af1c1974a8806318c290961ecd01bef29f4ad521e8d12f9f360c9f6a76d7426d9
7
- data.tar.gz: 3b3e2a00818e075f555f47302033d6b6f292413291c4991e6d5e7831e58a95877a257dc0bb377b526736f516da5c71e58690b6e557e2805ac5a40e466e068bae
6
+ metadata.gz: 0104e325136a9952cff6309951c67915d015cf67897fcf257e73a51e335eb0d8e12bf87ecf2ec09bb5d326bf3c7622101f2b02a6c06deb75c16f511c91eff3a5
7
+ data.tar.gz: 04525a4314e1417f48f699e71d0b77ecf888ce44524e972fb2b811ddcfe9ef68f399c1771cf81031df6127d63287091e2b9fe36e3679cd0e6c26775554b7c3e7
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.2
1
+ 3.1.3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yaso (1.3.0)
4
+ yaso (1.3.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -63,6 +63,7 @@ GEM
63
63
 
64
64
  PLATFORMS
65
65
  x86_64-darwin-21
66
+ x86_64-darwin-22
66
67
  x86_64-linux
67
68
 
68
69
  DEPENDENCIES
data/benchmark/Gemfile CHANGED
@@ -3,6 +3,17 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gem 'benchmark-ips', '~> 2.10.0'
6
+
7
+ DRY_CONTAINER = {
8
+ '2.5' => '~> 0.7.2',
9
+ '2.6' => '~> 0.9.0'
10
+ }.freeze
11
+ gem 'dry-container', DRY_CONTAINER.fetch(RUBY_VERSION.match(/\A\d+\.\d+/)[0], '~> 0.11.0')
12
+ DRY_TRANSACTION = {
13
+ '2.5' => '~> 0.13.2',
14
+ '2.6' => '~> 0.13.3'
15
+ }.freeze
16
+ gem 'dry-transaction', DRY_TRANSACTION.fetch(RUBY_VERSION.match(/\A\d+\.\d+/)[0], '~> 0.15.0')
6
17
  gem 'interactor', '~> 3.1.2'
7
18
  gem 'kalibera', '~> 0.1.2'
8
19
  gem 'simple_command', RUBY_VERSION.include?('2.5') ? '~> 0.2.0' : '~> 1.0.1'
@@ -11,4 +22,4 @@ gem 'yaso', path: '..'
11
22
 
12
23
  gem 'active_interaction', %w[2.5 2.6].any? { |version| RUBY_VERSION.include?(version) } ? '~> 4.1.0' : '~> 5.1.0'
13
24
 
14
- RUBY_VERSION.include?('2.5') || gem('decouplio', '~> 1.0.0alpha8')
25
+ RUBY_VERSION.include?('2.5') || gem('decouplio', '~> 1.0.0rc')
data/benchmark/index.rb CHANGED
@@ -9,6 +9,9 @@ require 'active_interaction'
9
9
  require 'trailblazer'
10
10
  require 'simple_command'
11
11
  require 'yaso'
12
+ require 'dry/container'
13
+ require 'dry/transaction'
14
+ require 'dry/transaction/operation'
12
15
 
13
16
  require_relative 'shared/yaso_service'
14
17
  RUBY_VERSION.include?('2.5') || require_relative('shared/decouplio_service')
@@ -26,4 +29,5 @@ require_relative 'step/simple_command'
26
29
  require_relative 'step/interactor'
27
30
  require_relative 'step/active_interaction'
28
31
  require_relative 'step/trailblazer'
32
+ require_relative 'step/dry_transaction'
29
33
  require_relative 'step/benchmark'
@@ -13,6 +13,7 @@ Benchmark.ips do |x|
13
13
  x.report('Interactor') { InteractorStepsService.call }
14
14
  x.report('ActiveInteraction') { ActiveInteractionStepsService.run }
15
15
  x.report('Trailblazer') { TrailblazerStepsService.call }
16
+ x.report('DryTransaction') { DryTransactionStepsService.new.call({}) }
16
17
 
17
18
  x.compare!
18
19
  end
@@ -28,6 +29,7 @@ Benchmark.ips do |x|
28
29
  x.report('Interactor') { InteractorCallablesService.call }
29
30
  x.report('ActiveInteraction') { ActiveInteractionCallablesService.run }
30
31
  x.report('Trailblazer') { TrailblazerCallablesService.call }
32
+ x.report('DryTransaction') { DryTransactionCallablesService.new.call({}) }
31
33
 
32
34
  x.compare!
33
35
  end
@@ -56,7 +56,7 @@ class DecouplioStepsService < DecouplioService
56
56
  end
57
57
 
58
58
  class DecouplioCallableStep
59
- def self.call(ctx:, key:, value:, **)
59
+ def self.call(ctx, _, key:, value:, **)
60
60
  ctx[key] = value
61
61
  end
62
62
  end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DryTransactionStepsService
4
+ include Dry::Transaction
5
+
6
+ step :one
7
+ step :two
8
+ step :three
9
+ step :four
10
+ step :five
11
+ step :six
12
+ step :seven
13
+ step :eight
14
+ step :nine
15
+ step :ten
16
+
17
+ private
18
+
19
+ def one(ctx)
20
+ ctx[:one] = true
21
+ Success(ctx)
22
+ end
23
+
24
+ def two(ctx)
25
+ ctx[:two] = true
26
+ Success(ctx)
27
+ end
28
+
29
+ def three(ctx)
30
+ ctx[:three] = true
31
+ Success(ctx)
32
+ end
33
+
34
+ def four(ctx)
35
+ ctx[:four] = true
36
+ Success(ctx)
37
+ end
38
+
39
+ def five(ctx)
40
+ ctx[:five] = true
41
+ Success(ctx)
42
+ end
43
+
44
+ def six(ctx)
45
+ ctx[:six] = true
46
+ Success(ctx)
47
+ end
48
+
49
+ def seven(ctx)
50
+ ctx[:seven] = true
51
+ Success(ctx)
52
+ end
53
+
54
+ def eight(ctx)
55
+ ctx[:eight] = true
56
+ Success(ctx)
57
+ end
58
+
59
+ def nine(ctx)
60
+ ctx[:nine] = true
61
+ Success(ctx)
62
+ end
63
+
64
+ def ten(ctx)
65
+ ctx[:ten] = true
66
+ Success(ctx)
67
+ end
68
+ end
69
+
70
+ class DryTansactionCallable
71
+ include Dry::Transaction::Operation
72
+
73
+ def initialize(key)
74
+ @key = key
75
+ end
76
+
77
+ def call(ctx)
78
+ ctx[@key] = true
79
+ Success(ctx)
80
+ end
81
+ end
82
+
83
+ class DryTransactionContainer
84
+ extend Dry::Container::Mixin
85
+
86
+ namespace :callable do
87
+ register(:one) { DryTansactionCallable.new(:one) }
88
+ register(:two) { DryTansactionCallable.new(:two) }
89
+ register(:three) { DryTansactionCallable.new(:three) }
90
+ register(:four) { DryTansactionCallable.new(:four) }
91
+ register(:five) { DryTansactionCallable.new(:five) }
92
+ register(:six) { DryTansactionCallable.new(:six) }
93
+ register(:seven) { DryTansactionCallable.new(:seven) }
94
+ register(:eight) { DryTansactionCallable.new(:eight) }
95
+ register(:nine) { DryTansactionCallable.new(:nine) }
96
+ register(:ten) { DryTansactionCallable.new(:ten) }
97
+ end
98
+ end
99
+
100
+ class DryTransactionCallablesService
101
+ include Dry::Transaction(container: DryTransactionContainer)
102
+
103
+ step :one, with: :'callable.one'
104
+ step :two, with: :'callable.two'
105
+ step :three, with: :'callable.three'
106
+ step :four, with: :'callable.four'
107
+ step :five, with: :'callable.five'
108
+ step :six, with: :'callable.six'
109
+ step :seven, with: :'callable.seven'
110
+ step :eight, with: :'callable.eight'
111
+ step :nine, with: :'callable.nine'
112
+ step :ten, with: :'callable.ten'
113
+ end
@@ -64,7 +64,7 @@ module TrailblazerMacro
64
64
  ctx[:"result.#{id}"] = Trailblazer::Operation::Result.new(false, {})
65
65
  false
66
66
  end
67
- task = Trailblazer::Activity::TaskBuilder::Binary(step)
67
+ task = Trailblazer::Activity::Circuit::TaskAdapter.for_step(step)
68
68
  { task: task, id: id }
69
69
  end
70
70
  # rubocop:enable Naming/MethodName
data/docker-compose.yml CHANGED
@@ -4,12 +4,6 @@ services:
4
4
  volumes:
5
5
  - .:/yaso
6
6
  - bundle:/bundle/cache
7
- deploy:
8
- resources:
9
- limits:
10
- cpus: '1.5'
11
- reservations:
12
- cpus: '1.5'
13
-
14
- volumes:
7
+
8
+ volumes:
15
9
  bundle:
@@ -4,7 +4,8 @@ module Yaso
4
4
  module Logic
5
5
  class Failure < Base
6
6
  def call(context, instance)
7
- [@invocable.call(context, instance) ? @next_step : @failure, false]
7
+ instance.success = false
8
+ @invocable.call(context, instance) ? @next_step : @failure
8
9
  end
9
10
  end
10
11
  end
@@ -4,7 +4,8 @@ module Yaso
4
4
  module Logic
5
5
  class Pass < Base
6
6
  def call(context, instance)
7
- [@invocable.call(context, instance) ? @next_step : @failure, true]
7
+ instance.success = true
8
+ @invocable.call(context, instance) ? @next_step : @failure
8
9
  end
9
10
  end
10
11
  end
@@ -4,7 +4,13 @@ module Yaso
4
4
  module Logic
5
5
  class Step < Base
6
6
  def call(context, instance)
7
- @invocable.call(context, instance) ? [@next_step, true] : [@failure, false]
7
+ instance.success = true
8
+ if @invocable.call(context, instance)
9
+ @next_step
10
+ else
11
+ instance.success = false
12
+ @failure
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -54,9 +54,7 @@ module Yaso
54
54
  wrapper_class.define_singleton_method(:call) do |context, instance|
55
55
  @entry ||= service_class.flow.call(service_class, steps)
56
56
  step = @entry
57
- success = true
58
- step, success = step.call(context, instance) while step
59
- instance.success = success
57
+ step = step.call(context, instance) while step
60
58
  instance
61
59
  end
62
60
  end
@@ -4,8 +4,14 @@ module Yaso
4
4
  module Logic
5
5
  class Switch < Base
6
6
  def call(context, instance)
7
+ instance.success = true
7
8
  switch_case = @invocable.call(context, instance) || raise(UnhandledSwitchCaseError, instance.class)
8
- Invocable.call(switch_case).last.call(context, instance) ? [@next_step, true] : [@failure, false]
9
+ if Invocable.call(switch_case).last.call(context, instance)
10
+ @next_step
11
+ else
12
+ instance.success = false
13
+ @failure
14
+ end
9
15
  end
10
16
  end
11
17
  end
@@ -9,8 +9,14 @@ module Yaso
9
9
  end
10
10
 
11
11
  def call(context, instance)
12
+ instance.success = true
12
13
  result = @invocable.call(context, instance) { @wrapper.call(context, instance).success? }
13
- result ? [@next_step, true] : [@failure, false]
14
+ if result
15
+ @next_step
16
+ else
17
+ instance.success = false
18
+ @failure
19
+ end
14
20
  end
15
21
  end
16
22
  end
data/lib/yaso/service.rb CHANGED
@@ -40,9 +40,7 @@ module Yaso
40
40
  @entry ||= flow.call(self, steps)
41
41
  step = @entry
42
42
  instance = new(context)
43
- success = true
44
- step, success = step.call(context, instance) while step
45
- instance.success = success
43
+ step = step.call(context, instance) while step
46
44
  instance
47
45
  end
48
46
 
data/lib/yaso/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yaso
4
- VERSION = '1.3.0'
4
+ VERSION = '1.3.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaso
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Shevchenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-19 00:00:00.000000000 Z
11
+ date: 2022-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffaker
@@ -203,6 +203,7 @@ files:
203
203
  - benchmark/step/active_interaction.rb
204
204
  - benchmark/step/benchmark.rb
205
205
  - benchmark/step/decouplio.rb
206
+ - benchmark/step/dry_transaction.rb
206
207
  - benchmark/step/interactor.rb
207
208
  - benchmark/step/pure.rb
208
209
  - benchmark/step/simple_command.rb
@@ -250,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
250
251
  - !ruby/object:Gem::Version
251
252
  version: '0'
252
253
  requirements: []
253
- rubygems_version: 3.3.7
254
+ rubygems_version: 3.3.26
254
255
  signing_key:
255
256
  specification_version: 4
256
257
  summary: Yet Another Service Object