yaso 1.3.0 → 1.3.1

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