servactory 1.8.2 → 1.8.3

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: 2a87d01c5389b8d6d538b2cd1befe0cd8fa51b0ea578eefb8c0c0b457957fa75
4
- data.tar.gz: 4ff7989cf58492790ad7cfef807cd2a2f6befacefa9407a4fb04e3b4567e2d6f
3
+ metadata.gz: 0b5fa4f5c8c0a4ee8dfff54269c90deb49615e0395790a776b3c0b7dc7cced9e
4
+ data.tar.gz: 9cbbb49123e91308390b90b9e0ba3d49a7921ea9340bb4ac6383403420b97c3f
5
5
  SHA512:
6
- metadata.gz: 2b880c2475447311de03023601adc91597b38ecd083d5e108e4df8869dd65137d2a4001066142234c609c69aecf279d211be2258f806d662fc43893e97fea978
7
- data.tar.gz: 8efc74ceb569789340dad5b3e1d54cc996528fda101f6bbf9719b9c8f55fc70baf5674659116d27312cc271ec9a7e0764f4de4c9e8a26d674377c157cc1a3330
6
+ metadata.gz: e16ac59db1d6402d2c44fca9539eadf336c31ad8c29381c2482db52573f0e0864a1bfd9f920daab6f6e5668a886cf4615cf7803fc76d864972f49f21cb7333b9
7
+ data.tar.gz: b9321f6a95199ba298e644ad42cb8c4b54c3aebb16fe1472367428c45263c7845b7689c2031512a96425dcefaa80885ef2de65523b9557d4fe3723538bedfbc8
@@ -3,64 +3,26 @@
3
3
  module Servactory
4
4
  module Context
5
5
  module Callable
6
- def call!(arguments = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
7
- @context_store = Store.new(self)
8
-
9
- assign_data_with(arguments)
10
-
11
- inputs_workbench.find_unnecessary!
12
- inputs_workbench.check_rules!
13
- outputs_workbench.find_conflicts_in!(
14
- collection_of_internals: collection_of_internals
6
+ def call!(arguments = {})
7
+ context = send(:new)
8
+
9
+ context.send(
10
+ :_call!,
11
+ incoming_arguments: arguments,
12
+ collection_of_inputs: collection_of_inputs,
13
+ collection_of_internals: collection_of_internals,
14
+ collection_of_outputs: collection_of_outputs,
15
+ collection_of_stages: collection_of_stages
15
16
  )
16
17
 
17
- inputs_workbench.validate!
18
-
19
- methods_workbench.run!
20
-
21
- Servactory::Result.success_for(
22
- context: context_store.context,
23
- collection_of_outputs: collection_of_outputs
24
- )
18
+ Servactory::Result.success_for(context: context)
25
19
  end
26
20
 
27
- def call(arguments = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
28
- @context_store = Store.new(self)
29
-
30
- assign_data_with(arguments)
31
-
32
- inputs_workbench.find_unnecessary!
33
- inputs_workbench.check_rules!
34
- outputs_workbench.find_conflicts_in!(
35
- collection_of_internals: collection_of_internals
36
- )
37
-
38
- inputs_workbench.validate!
39
-
40
- methods_workbench.run!
41
-
42
- Servactory::Result.success_for(
43
- context: context_store.context,
44
- collection_of_outputs: collection_of_outputs
45
- )
21
+ def call(arguments = {})
22
+ call!(arguments)
46
23
  rescue Servactory.configuration.failure_class => e
47
24
  Servactory::Result.failure_for(exception: e)
48
25
  end
49
-
50
- private
51
-
52
- attr_reader :context_store
53
-
54
- def assign_data_with(arguments)
55
- inputs_workbench.assign(
56
- context: context_store.context,
57
- arguments: arguments
58
- )
59
-
60
- internals_workbench.assign(context: context_store.context)
61
- outputs_workbench.assign(context: context_store.context)
62
- methods_workbench.assign(context: context_store.context)
63
- end
64
26
  end
65
27
  end
66
28
  end
@@ -5,7 +5,7 @@ module Servactory
5
5
  module DSL
6
6
  def self.included(base)
7
7
  base.extend(Callable)
8
- base.prepend(Workspace)
8
+ base.include(Workspace)
9
9
  end
10
10
  end
11
11
  end
@@ -3,18 +3,11 @@
3
3
  module Servactory
4
4
  module Context
5
5
  module Workspace
6
- # class Inputs
7
- # def initialize(**)
8
- # # NOTE: Look at the file `lib/servactory/inputs/tools/prepare.rb`
9
- # end
10
- # end
11
-
12
6
  class Inputs
13
- def initialize(context, workbench:)
7
+ def initialize(context:, incoming_arguments:, collection_of_inputs:)
14
8
  @context = context
15
-
16
- @collection_of_inputs = workbench.collection
17
- @incoming_arguments = workbench.incoming_arguments
9
+ @incoming_arguments = incoming_arguments
10
+ @collection_of_inputs = collection_of_inputs
18
11
  end
19
12
 
20
13
  def method_missing(name, *args, &block)
@@ -4,9 +4,9 @@ module Servactory
4
4
  module Context
5
5
  module Workspace
6
6
  class Internals
7
- def initialize(context, workbench:)
7
+ def initialize(context:, collection_of_internals:)
8
8
  @context = context
9
- @collection_of_internals = workbench.collection
9
+ @collection_of_internals = collection_of_internals
10
10
  end
11
11
 
12
12
  def method_missing(name, *args, &block)
@@ -38,7 +38,7 @@ module Servactory
38
38
  value: value
39
39
  )
40
40
 
41
- @context.instance_variable_set(:"@#{internal.name}", value)
41
+ @context.send(:assign_internal, internal.name, value)
42
42
  end
43
43
 
44
44
  def getter_with(name:, &block) # rubocop:disable Lint/UnusedMethodArgument
@@ -46,7 +46,7 @@ module Servactory
46
46
 
47
47
  return yield if internal.nil?
48
48
 
49
- @context.instance_variable_get(:"@#{internal.name}")
49
+ @context.send(:fetch_internal, internal.name)
50
50
  end
51
51
  end
52
52
  end
@@ -4,9 +4,9 @@ module Servactory
4
4
  module Context
5
5
  module Workspace
6
6
  class Outputs
7
- def initialize(context, workbench:)
7
+ def initialize(context:, collection_of_outputs:)
8
8
  @context = context
9
- @collection_of_outputs = workbench.collection
9
+ @collection_of_outputs = collection_of_outputs
10
10
  end
11
11
 
12
12
  def method_missing(name, *args, &block)
@@ -38,7 +38,7 @@ module Servactory
38
38
  value: value
39
39
  )
40
40
 
41
- @context.instance_variable_set(:"@#{output.name}", value)
41
+ @context.send(:assign_output, output.name, value)
42
42
  end
43
43
 
44
44
  def getter_with(name:, &block) # rubocop:disable Lint/UnusedMethodArgument
@@ -46,7 +46,7 @@ module Servactory
46
46
 
47
47
  return yield if output.nil?
48
48
 
49
- @context.instance_variable_get(:"@#{output.name}")
49
+ @context.send(:fetch_output, output.name)
50
50
  end
51
51
  end
52
52
  end
@@ -4,22 +4,30 @@ module Servactory
4
4
  module Context
5
5
  module Workspace
6
6
  def inputs
7
- @inputs ||= Inputs.new(self, workbench: self.class.send(:inputs_workbench))
7
+ @inputs ||= Inputs.new(
8
+ context: self,
9
+ incoming_arguments: incoming_arguments,
10
+ collection_of_inputs: collection_of_inputs
11
+ )
8
12
  end
9
13
  alias inp inputs
10
14
 
11
15
  def internals
12
- @internals ||= Internals.new(self, workbench: self.class.send(:internals_workbench))
16
+ @internals ||= Internals.new(
17
+ context: self,
18
+ collection_of_internals: collection_of_internals
19
+ )
13
20
  end
14
21
  alias int internals
15
22
 
16
23
  def outputs
17
- @outputs ||= Outputs.new(self, workbench: self.class.send(:outputs_workbench))
24
+ @outputs ||= Outputs.new(
25
+ context: self,
26
+ collection_of_outputs: collection_of_outputs
27
+ )
18
28
  end
19
29
  alias out outputs
20
30
 
21
- protected
22
-
23
31
  def fail_input!(input_name, message:)
24
32
  raise Servactory.configuration.input_error_class.new(
25
33
  input_name: input_name,
@@ -30,6 +38,62 @@ module Servactory
30
38
  def fail!(message:, meta: nil)
31
39
  raise Servactory.configuration.failure_class.new(message: message, meta: meta)
32
40
  end
41
+
42
+ private
43
+
44
+ attr_reader :incoming_arguments,
45
+ :collection_of_inputs,
46
+ :collection_of_internals,
47
+ :collection_of_outputs
48
+
49
+ def _call!(
50
+ incoming_arguments:,
51
+ collection_of_inputs:,
52
+ collection_of_internals:,
53
+ collection_of_outputs:,
54
+ collection_of_stages:
55
+ )
56
+ call!(
57
+ incoming_arguments: incoming_arguments,
58
+ collection_of_inputs: collection_of_inputs,
59
+ collection_of_internals: collection_of_internals,
60
+ collection_of_outputs: collection_of_outputs,
61
+ collection_of_stages: collection_of_stages
62
+ )
63
+ end
64
+
65
+ def call!(
66
+ incoming_arguments:,
67
+ collection_of_inputs:,
68
+ collection_of_internals:,
69
+ collection_of_outputs:,
70
+ **
71
+ )
72
+ @incoming_arguments = incoming_arguments
73
+ @collection_of_inputs = collection_of_inputs
74
+ @collection_of_internals = collection_of_internals
75
+ @collection_of_outputs = collection_of_outputs
76
+ end
77
+
78
+ def service_storage
79
+ @service_storage ||= { internals: {}, outputs: {} }
80
+ end
81
+
82
+ def assign_internal(key, value)
83
+ service_storage[:internals].merge!({ key => value })
84
+ end
85
+
86
+ def fetch_internal(key)
87
+ service_storage.fetch(:internals).fetch(key)
88
+ end
89
+
90
+ def assign_output(key, value)
91
+ service_storage[:outputs].merge!({ key => value })
92
+ end
93
+
94
+ def fetch_output(key)
95
+ service_storage.fetch(:outputs).fetch(key)
96
+ end
33
97
  end
34
98
  end
35
99
  end
@@ -5,6 +5,7 @@ module Servactory
5
5
  module DSL
6
6
  def self.included(base)
7
7
  base.extend(ClassMethods)
8
+ base.include(Workspace)
8
9
  end
9
10
 
10
11
  module ClassMethods
@@ -27,10 +28,6 @@ module Servactory
27
28
  def collection_of_inputs
28
29
  @collection_of_inputs ||= Collection.new
29
30
  end
30
-
31
- def inputs_workbench
32
- @inputs_workbench ||= Workbench.work_with(collection_of_inputs)
33
- end
34
31
  end
35
32
  end
36
33
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Inputs
5
+ module Workspace
6
+ def call!(incoming_arguments:, collection_of_inputs:, **)
7
+ super
8
+
9
+ Tools::FindUnnecessary.validate!(self, incoming_arguments, collection_of_inputs)
10
+ Tools::Rules.validate!(self, collection_of_inputs)
11
+ Servactory::Inputs::Tools::Validation.validate!(self, incoming_arguments, collection_of_inputs)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -23,10 +23,6 @@ module Servactory
23
23
  def collection_of_internals
24
24
  @collection_of_internals ||= Collection.new
25
25
  end
26
-
27
- def internals_workbench
28
- @internals_workbench ||= Workbench.work_with(collection_of_internals)
29
- end
30
26
  end
31
27
  end
32
28
  end
@@ -5,6 +5,7 @@ module Servactory
5
5
  module DSL
6
6
  def self.included(base)
7
7
  base.extend(ClassMethods)
8
+ base.include(Workspace)
8
9
  end
9
10
 
10
11
  module ClassMethods
@@ -47,15 +48,15 @@ module Servactory
47
48
  def make(name, position: nil, **options)
48
49
  position = position.presence || next_position
49
50
 
50
- @current_stage = @current_stage.presence || Stage.new(position: position)
51
+ current_stage = @current_stage.presence || Stage.new(position: position)
51
52
 
52
- @current_stage.methods << Method.new(
53
+ current_stage.methods << Method.new(
53
54
  name,
54
55
  position: position,
55
56
  **options
56
57
  )
57
58
 
58
- collection_of_stages << @current_stage
59
+ collection_of_stages << current_stage
59
60
  end
60
61
 
61
62
  def method_missing(name, *args, &block)
@@ -100,10 +101,6 @@ module Servactory
100
101
  def collection_of_stages
101
102
  @collection_of_stages ||= StageCollection.new
102
103
  end
103
-
104
- def methods_workbench
105
- @methods_workbench ||= Workbench.work_with(collection_of_stages)
106
- end
107
104
  end
108
105
  end
109
106
  end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Methods
5
+ module Tools
6
+ class Runner
7
+ def self.run!(...)
8
+ new(...).run!
9
+ end
10
+
11
+ def initialize(context, collection_of_stages)
12
+ @context = context
13
+ @collection_of_stages = collection_of_stages
14
+ end
15
+
16
+ def run!
17
+ return try_to_use_call if @collection_of_stages.empty?
18
+
19
+ @collection_of_stages.sorted_by_position.each do |stage|
20
+ call_stage(stage)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def try_to_use_call
27
+ @context.try(:send, :call)
28
+ end
29
+
30
+ def call_stage(stage)
31
+ return if unnecessary_for_stage?(stage)
32
+
33
+ wrapper = stage.wrapper
34
+ rollback = stage.rollback
35
+ methods = stage.methods.sorted_by_position
36
+
37
+ if wrapper.is_a?(Proc)
38
+ call_wrapper_with_methods(wrapper, rollback, methods)
39
+ else
40
+ call_methods(methods)
41
+ end
42
+ end
43
+
44
+ def call_wrapper_with_methods(wrapper, rollback, methods)
45
+ wrapper.call(methods: -> { call_methods(methods) })
46
+ rescue StandardError => e
47
+ @context.send(rollback, e) if rollback.present?
48
+ end
49
+
50
+ def call_methods(methods)
51
+ methods.each do |method|
52
+ next if unnecessary_for_make?(method)
53
+
54
+ @context.send(method.name)
55
+ end
56
+ end
57
+
58
+ def unnecessary_for_stage?(stage)
59
+ condition = stage.condition
60
+ # is_condition_opposite = stage.is_condition_opposite
61
+
62
+ result = prepare_condition_for(condition) # rubocop:disable Style/RedundantAssignment
63
+
64
+ # is_condition_opposite ? !result : result
65
+ result
66
+ end
67
+
68
+ def unnecessary_for_make?(make_method)
69
+ condition = make_method.condition
70
+ is_condition_opposite = make_method.is_condition_opposite
71
+
72
+ result = prepare_condition_for(condition)
73
+
74
+ is_condition_opposite ? !result : result
75
+ end
76
+
77
+ def prepare_condition_for(condition)
78
+ return false if condition.nil?
79
+ return !Servactory::Utils.true?(condition) unless condition.is_a?(Proc)
80
+
81
+ !condition.call(context: @context)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Methods
5
+ module Workspace
6
+ def call!(collection_of_stages:, **)
7
+ super
8
+
9
+ Servactory::Methods::Tools::Runner.run!(self, collection_of_stages)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,6 +5,7 @@ module Servactory
5
5
  module DSL
6
6
  def self.included(base)
7
7
  base.extend(ClassMethods)
8
+ base.include(Workspace)
8
9
  end
9
10
 
10
11
  module ClassMethods
@@ -23,10 +24,6 @@ module Servactory
23
24
  def collection_of_outputs
24
25
  @collection_of_outputs ||= Collection.new
25
26
  end
26
-
27
- def outputs_workbench
28
- @outputs_workbench ||= Workbench.work_with(collection_of_outputs)
29
- end
30
27
  end
31
28
  end
32
29
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Outputs
5
+ module Workspace
6
+ def call!(collection_of_internals:, collection_of_outputs:, **)
7
+ super
8
+
9
+ Tools::Conflicts.validate!(self, collection_of_outputs, collection_of_internals)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -10,24 +10,11 @@ module Servactory
10
10
  new(...).send(:as_failure)
11
11
  end
12
12
 
13
- def initialize(context: nil, collection_of_outputs: nil, exception: nil)
13
+ def initialize(context: nil, exception: nil)
14
14
  @context = context
15
- @collection_of_outputs = collection_of_outputs
16
15
  @exception = exception
17
16
  end
18
17
 
19
- def method_missing(name, *args, &block)
20
- output = @collection_of_outputs&.find_by(name: name)
21
-
22
- return super if output.nil?
23
-
24
- output_value_for(output)
25
- end
26
-
27
- def respond_to_missing?(name, *)
28
- @collection_of_outputs&.names&.include?(name) || super
29
- end
30
-
31
18
  def inspect
32
19
  "#<#{self.class.name} #{draw_result}>"
33
20
  end
@@ -38,6 +25,10 @@ module Servactory
38
25
  define_singleton_method(:success?) { true }
39
26
  define_singleton_method(:failure?) { false }
40
27
 
28
+ @context.send(:service_storage).fetch(:outputs).each_pair do |key, value|
29
+ define_singleton_method(key) { value }
30
+ end
31
+
41
32
  self
42
33
  end
43
34
 
@@ -51,13 +42,9 @@ module Servactory
51
42
  end
52
43
 
53
44
  def draw_result
54
- @collection_of_outputs&.map do |output|
55
- "@#{output.name}=#{output_value_for(output).inspect}"
56
- end&.join(", ")
57
- end
58
-
59
- def output_value_for(output)
60
- @context.instance_variable_get(:"@#{output.name}")
45
+ methods(false).sort.map do |method_name|
46
+ "@#{method_name}=#{send(method_name)}"
47
+ end.join(", ")
61
48
  end
62
49
  end
63
50
  end
@@ -4,7 +4,7 @@ module Servactory
4
4
  module VERSION
5
5
  MAJOR = 1
6
6
  MINOR = 8
7
- PATCH = 2
7
+ PATCH = 3
8
8
 
9
9
  STRING = [MAJOR, MINOR, PATCH].join(".")
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: servactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.2
4
+ version: 1.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sokolov
@@ -195,7 +195,6 @@ files:
195
195
  - lib/servactory/configuration/setup.rb
196
196
  - lib/servactory/context/callable.rb
197
197
  - lib/servactory/context/dsl.rb
198
- - lib/servactory/context/store.rb
199
198
  - lib/servactory/context/workspace.rb
200
199
  - lib/servactory/context/workspace/inputs.rb
201
200
  - lib/servactory/context/workspace/internals.rb
@@ -227,13 +226,12 @@ files:
227
226
  - lib/servactory/inputs/validations/must.rb
228
227
  - lib/servactory/inputs/validations/required.rb
229
228
  - lib/servactory/inputs/validations/type.rb
230
- - lib/servactory/inputs/workbench.rb
229
+ - lib/servactory/inputs/workspace.rb
231
230
  - lib/servactory/internals/collection.rb
232
231
  - lib/servactory/internals/dsl.rb
233
232
  - lib/servactory/internals/internal.rb
234
233
  - lib/servactory/internals/validations/base.rb
235
234
  - lib/servactory/internals/validations/type.rb
236
- - lib/servactory/internals/workbench.rb
237
235
  - lib/servactory/methods/aliases_for_make/collection.rb
238
236
  - lib/servactory/methods/dsl.rb
239
237
  - lib/servactory/methods/method.rb
@@ -241,14 +239,15 @@ files:
241
239
  - lib/servactory/methods/shortcuts_for_make/collection.rb
242
240
  - lib/servactory/methods/stage.rb
243
241
  - lib/servactory/methods/stage_collection.rb
244
- - lib/servactory/methods/workbench.rb
242
+ - lib/servactory/methods/tools/runner.rb
243
+ - lib/servactory/methods/workspace.rb
245
244
  - lib/servactory/outputs/collection.rb
246
245
  - lib/servactory/outputs/dsl.rb
247
246
  - lib/servactory/outputs/output.rb
248
247
  - lib/servactory/outputs/tools/conflicts.rb
249
248
  - lib/servactory/outputs/validations/base.rb
250
249
  - lib/servactory/outputs/validations/type.rb
251
- - lib/servactory/outputs/workbench.rb
250
+ - lib/servactory/outputs/workspace.rb
252
251
  - lib/servactory/result.rb
253
252
  - lib/servactory/test_kit/fake_type.rb
254
253
  - lib/servactory/test_kit/result.rb
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Servactory
4
- module Context
5
- class Store
6
- attr_reader :context
7
-
8
- def initialize(service_class)
9
- @context = service_class.send(:new)
10
- end
11
- end
12
- end
13
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Servactory
4
- module Inputs
5
- class Workbench
6
- attr_reader :collection,
7
- :incoming_arguments
8
-
9
- def self.work_with(...)
10
- new(...)
11
- end
12
-
13
- def initialize(collection)
14
- @collection = collection
15
- end
16
-
17
- def assign(context:, arguments:)
18
- @context = context
19
- @incoming_arguments = arguments
20
- end
21
-
22
- def find_unnecessary!
23
- Tools::FindUnnecessary.validate!(context, @incoming_arguments, collection)
24
- end
25
-
26
- def check_rules!
27
- Tools::Rules.validate!(context, collection)
28
- end
29
-
30
- def validate!
31
- Tools::Validation.validate!(context, @incoming_arguments, collection)
32
- end
33
-
34
- private
35
-
36
- attr_reader :context
37
- end
38
- end
39
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Servactory
4
- module Internals
5
- class Workbench
6
- attr_reader :collection
7
-
8
- def self.work_with(...)
9
- new(...)
10
- end
11
-
12
- def initialize(collection)
13
- @collection = collection
14
- end
15
-
16
- def assign(context:)
17
- @context = context
18
- end
19
-
20
- private
21
-
22
- attr_reader :context
23
- end
24
- end
25
- end
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Servactory
4
- module Methods
5
- class Workbench
6
- def self.work_with(...)
7
- new(...)
8
- end
9
-
10
- def initialize(collection_of_stages)
11
- @collection_of_stages = collection_of_stages
12
- end
13
-
14
- def assign(context:)
15
- @context = context
16
- end
17
-
18
- def run!
19
- return try_to_use_call if collection_of_stages.empty?
20
-
21
- collection_of_stages.sorted_by_position.each do |stage|
22
- call_stage(stage)
23
- end
24
- end
25
-
26
- private
27
-
28
- attr_reader :context,
29
- :collection_of_stages
30
-
31
- def try_to_use_call
32
- context.try(:send, :call)
33
- end
34
-
35
- def call_stage(stage)
36
- return if unnecessary_for_stage?(stage)
37
-
38
- wrapper = stage.wrapper
39
- rollback = stage.rollback
40
- methods = stage.methods.sorted_by_position
41
-
42
- if wrapper.is_a?(Proc)
43
- call_wrapper_with_methods(wrapper, rollback, methods)
44
- else
45
- call_methods(methods)
46
- end
47
- end
48
-
49
- def call_wrapper_with_methods(wrapper, rollback, methods)
50
- wrapper.call(methods: -> { call_methods(methods) })
51
- rescue StandardError => e
52
- context.send(rollback, e) if rollback.present?
53
- end
54
-
55
- def call_methods(methods)
56
- methods.each do |make_method|
57
- next if unnecessary_for_make?(make_method)
58
-
59
- context.send(make_method.name)
60
- end
61
- end
62
-
63
- def unnecessary_for_stage?(stage)
64
- condition = stage.condition
65
- # is_condition_opposite = stage.is_condition_opposite
66
-
67
- result = prepare_condition_for(condition) # rubocop:disable Style/RedundantAssignment
68
-
69
- # is_condition_opposite ? !result : result
70
- result
71
- end
72
-
73
- def unnecessary_for_make?(make_method)
74
- condition = make_method.condition
75
- is_condition_opposite = make_method.is_condition_opposite
76
-
77
- result = prepare_condition_for(condition)
78
-
79
- is_condition_opposite ? !result : result
80
- end
81
-
82
- def prepare_condition_for(condition)
83
- return false if condition.nil?
84
- return !Servactory::Utils.true?(condition) unless condition.is_a?(Proc)
85
-
86
- !condition.call(context: context)
87
- end
88
- end
89
- end
90
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Servactory
4
- module Outputs
5
- class Workbench
6
- attr_reader :collection
7
-
8
- def self.work_with(...)
9
- new(...)
10
- end
11
-
12
- def initialize(collection)
13
- @collection = collection
14
- end
15
-
16
- def assign(context:)
17
- @context = context
18
- end
19
-
20
- def find_conflicts_in!(collection_of_internals:)
21
- Tools::Conflicts.validate!(context, collection, collection_of_internals)
22
- end
23
-
24
- private
25
-
26
- attr_reader :context
27
- end
28
- end
29
- end