servactory 1.6.8 → 1.6.10

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: 66de0357d02ad9ef590de1d516d1e6d0ea2f9d19d52479cb93e4e4922d6967e5
4
- data.tar.gz: 83f630ec6486102357ef9d4b629dbc4e4f618e55325d97592b16b7530722299f
3
+ metadata.gz: 247691253c0f26610c8586f31425e2ac33f4b137f67ba68642affb4e3411d306
4
+ data.tar.gz: 5050386caa9eaa939eb637f177978085bf02e5a035741e9c372216bc9886276e
5
5
  SHA512:
6
- metadata.gz: 292293afa0bfc8fba8d35605cfc80b6daa75865b3c1ad9d2d1807338c5e784bab0aa94d852b2be54d9157ca8ae44e0c0b2cf9141e92b26256d11d2c08d6ad1e2
7
- data.tar.gz: 93ca03e6db127e20eb04a244e1c48c8596cf910328ab9148543c68da8068ba0cc12be24ed366996e1d72896c88ea474a9fa61f16e2c5d1c87bbbe6ccabc95fa6
6
+ metadata.gz: bd2eea84309d84773e035600d143183add63818e7e77ba985d79f7b7b36c4caae9b22f8dc58422a3e2ed7e4c635a09d2beed2f465e639c3c87739034354ffe9a
7
+ data.tar.gz: a4e7919863596451fa78fdcca4e763906a65d3dd8f5f4b8fe041c98ef7ea3de5a64db7bcdcc059a447ba926810de275ddcf3c3cd6a6315ab9d4de571630852fb
@@ -63,6 +63,7 @@ module Servactory
63
63
  add_must_option_with(options)
64
64
 
65
65
  # Check Class: nil
66
+ add_prepare_option_with(options)
66
67
  add_internal_option_with(options)
67
68
  end
68
69
 
@@ -180,6 +181,29 @@ module Servactory
180
181
  )
181
182
  end
182
183
 
184
+ def add_prepare_option_with(options)
185
+ collection_of_options << Option.new(
186
+ name: :prepare,
187
+ input: self,
188
+ validation_class: nil,
189
+ define_input_methods: [
190
+ DefineInputMethod.new(
191
+ name: :prepare_present?,
192
+ content: ->(value:) { value[:in].present? }
193
+ )
194
+ ],
195
+ define_input_conflicts: [
196
+ DefineInputConflict.new(content: -> { :prepare_vs_array if prepare_present? && array? }),
197
+ DefineInputConflict.new(content: -> { :prepare_vs_inclusion if prepare_present? && inclusion_present? }),
198
+ DefineInputConflict.new(content: -> { :prepare_vs_must if prepare_present? && must_present? })
199
+ ],
200
+ need_for_checks: false,
201
+ value_key: :in,
202
+ value_fallback: false,
203
+ **options
204
+ )
205
+ end
206
+
183
207
  def add_internal_option_with(options) # rubocop:disable Metrics/MethodLength
184
208
  collection_of_options << Option.new(
185
209
  name: :internal,
@@ -31,6 +31,9 @@ module Servactory
31
31
  input_value = @incoming_arguments.fetch(input.name, nil)
32
32
  input_value = input.default if input.optional? && input_value.blank?
33
33
 
34
+ input_prepare = input.prepare.fetch(:in, nil)
35
+ input_value = input_prepare.call(value: input_value) if input_prepare.present?
36
+
34
37
  if input.internal?
35
38
  @internal_variables[input.name] = input_value
36
39
  else
@@ -38,6 +38,12 @@ module Servactory
38
38
  @current_stage.rollback = rollback
39
39
  end
40
40
 
41
+ def only_if(condition)
42
+ return if @current_stage.blank?
43
+
44
+ @current_stage.condition = condition
45
+ end
46
+
41
47
  def make(name, position: nil, **options)
42
48
  position = position.presence || next_position
43
49
 
@@ -5,12 +5,14 @@ module Servactory
5
5
  class Stage
6
6
  attr_accessor :position,
7
7
  :wrapper,
8
- :rollback
8
+ :rollback,
9
+ :condition
9
10
 
10
- def initialize(position:, wrapper: nil, rollback: nil)
11
+ def initialize(position:, wrapper: nil, rollback: nil, condition: nil)
11
12
  @position = position
12
13
  @wrapper = wrapper
13
14
  @rollback = rollback
15
+ @condition = condition
14
16
  end
15
17
 
16
18
  def next_method_position
@@ -33,6 +33,8 @@ module Servactory
33
33
  end
34
34
 
35
35
  def call_stage(stage)
36
+ return if unnecessary_for_stage?(stage)
37
+
36
38
  wrapper = stage.wrapper
37
39
  rollback = stage.rollback
38
40
  methods = stage.methods.sorted_by_position
@@ -52,13 +54,23 @@ module Servactory
52
54
 
53
55
  def call_methods(methods)
54
56
  methods.each do |make_method|
55
- next if unnecessary_for?(make_method)
57
+ next if unnecessary_for_make?(make_method)
56
58
 
57
59
  context.send(make_method.name)
58
60
  end
59
61
  end
60
62
 
61
- def unnecessary_for?(make_method)
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)
62
74
  condition = make_method.condition
63
75
  is_condition_opposite = make_method.is_condition_opposite
64
76
 
@@ -4,7 +4,7 @@ module Servactory
4
4
  module VERSION
5
5
  MAJOR = 1
6
6
  MINOR = 6
7
- PATCH = 8
7
+ PATCH = 10
8
8
 
9
9
  STRING = [MAJOR, MINOR, PATCH].join(".")
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: servactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.8
4
+ version: 1.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sokolov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-10 00:00:00.000000000 Z
11
+ date: 2023-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport