decouplio 1.0.0alpha5 → 1.0.0alpha7

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: 45afd6ffb3ffcbab53858cf4ae18b2fede66cd562d2fc5edcb8604cd8f72edef
4
- data.tar.gz: 3ab25617f0ae816e115771b6d3f9fcb85509a8dd1ec16d2fefc5710848403829
3
+ metadata.gz: b142d4fd94ec689714987c59946aab6c14d7d857a4aa11e55c624c5f7975e622
4
+ data.tar.gz: fc96e94c4d3358fda4eca1e80bfaeb7021a444bc5d9d1ff41b2b1b5f2283dbda
5
5
  SHA512:
6
- metadata.gz: 399d4953dbacebccab67a4d3bb6de4d6cf2a85cdbd12ac9510e84520a58bfdc5211b8dc589d59cf0996877d49c876466a53d60156c7293451de84702d27af631
7
- data.tar.gz: 911b51846754fee6ff178dc430e030cb46102edf669d1707011b0d3a2cba50af2c0584b4739b17fd5935ea53b25a1cf467d0a3d8c1e45d0387c25f42bf476fe7
6
+ metadata.gz: 1fc456438780d78c73280883a8b780148568e0a3ac5a2d21162575c73be6a7401378d6a37367aa31f28878226a274a27803da6ecf2b8b2e976b04b536829f3c1
7
+ data.tar.gz: 760d3c4a61d0985b4b49633f3c010107a5833e241ac133613439f9f9f031417e022af02ccef23e77681db22d6fdaeb3d186a18d46237bcd216a22dc0388f77eb
data/decouplio.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
 
13
13
  spec.summary = 'Gem for business logic encapsulation'
14
14
  spec.description = "Decouplio is a zero dependency, thread safe and framework agnostic gem designed to encapsulate application business logic. It's reverse engineered through TDD and inspired by such frameworks and gems like Trailblazer, Interactor."
15
- spec.homepage = 'https://github.com/differencialx/decouplio/blob/master/docs'
15
+ spec.homepage = 'https://differencialx.github.io/decouplio.github.io/'
16
16
  spec.license = 'MIT'
17
17
 
18
18
  if spec.respond_to?(:metadata)
@@ -12,10 +12,8 @@ require_relative 'const/results'
12
12
 
13
13
  module Decouplio
14
14
  class Action
15
- PREVIOUS_STEP_INDEX = -2
16
-
17
15
  extend Forwardable
18
- def_delegators :@error_store, :errors, :add_error
16
+ def_delegators :@error_store, :errors, :add_error, :error_status
19
17
  attr_reader :railway_flow, :ctx, :error_store
20
18
 
21
19
  def initialize(
@@ -249,6 +249,7 @@ module Decouplio
249
249
  Decouplio::Steps::ServiceStep.new(
250
250
  name: stp[:name],
251
251
  service: stp[:service],
252
+ args: stp[:_args],
252
253
  on_success_type: success_type(flow, stp),
253
254
  on_failure_type: failure_type(flow, stp)
254
255
  )
@@ -258,6 +259,7 @@ module Decouplio
258
259
  Decouplio::Steps::ServiceFail.new(
259
260
  name: stp[:name],
260
261
  service: stp[:service],
262
+ args: stp[:_args],
261
263
  on_success_type: success_type(flow, stp),
262
264
  on_failure_type: failure_type(flow, stp)
263
265
  )
@@ -267,6 +269,7 @@ module Decouplio
267
269
  Decouplio::Steps::ServicePass.new(
268
270
  name: stp[:name],
269
271
  service: stp[:service],
272
+ args: stp[:_args],
270
273
  on_success_type: success_type(flow, stp),
271
274
  on_failure_type: failure_type(flow, stp)
272
275
  )
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Const
5
+ module StepOptions
6
+ ALLOWED = %i[
7
+ on_success
8
+ on_failure
9
+ on_error
10
+ finish_him
11
+ if
12
+ unless
13
+ ].freeze
14
+ end
15
+ end
16
+ end
@@ -2,17 +2,32 @@
2
2
 
3
3
  module Decouplio
4
4
  class DefaultErrorHandler
5
- attr_reader :errors
5
+ attr_reader :errors, :status
6
6
 
7
7
  def initialize
8
8
  @errors = {}
9
+ @status = nil
9
10
  end
10
11
 
11
- def add_error(key, message)
12
- @errors.store(
13
- key,
14
- (@errors[key] || []) + [message].flatten
15
- )
12
+ def add_error(*args)
13
+ case args.size
14
+ when 1
15
+ args[0].each do |key, message|
16
+ @errors.store(
17
+ key,
18
+ (@errors[key] || []) + [message].flatten
19
+ )
20
+ end
21
+ when 2
22
+ @errors.store(
23
+ args[0],
24
+ (@errors[args[0]] || []) + [args[1]].flatten
25
+ )
26
+ end
27
+ end
28
+
29
+ def error_status(err_st)
30
+ @status = err_st
16
31
  end
17
32
 
18
33
  def merge(error_store)
@@ -3,6 +3,7 @@
3
3
  require_relative 'flow'
4
4
  require_relative 'const/types'
5
5
  require_relative 'const/doby_aide_options'
6
+ require_relative 'const/step_options'
6
7
  require_relative 'octo_hash_case'
7
8
  require_relative 'errors/options_validation_error'
8
9
  require_relative 'errors/palp_validation_error'
@@ -30,17 +31,61 @@ module Decouplio
30
31
  end
31
32
 
32
33
  def step(stp, **options)
33
- @steps << options.merge(type: Decouplio::Const::Types::STEP_TYPE, name: stp)
34
+ if stp.is_a?(Class) && !(stp < Decouplio::Action)
35
+ step_options = {}
36
+
37
+ options.each_key do |key|
38
+ step_options[key] = options.delete(key) if Decouplio::Const::StepOptions::ALLOWED.include?(key)
39
+ end
40
+
41
+ @steps << {
42
+ type: Decouplio::Const::Types::STEP_TYPE,
43
+ name: stp,
44
+ _args: options,
45
+ **step_options
46
+ }
47
+ else
48
+ @steps << options.merge(type: Decouplio::Const::Types::STEP_TYPE, name: stp)
49
+ end
34
50
  end
35
51
 
36
52
  def fail(stp, **options)
37
53
  raise Decouplio::Errors::FailCanNotBeFirstStepError if @steps.empty?
38
54
 
39
- @steps << options.merge(type: Decouplio::Const::Types::FAIL_TYPE, name: stp)
55
+ if stp.is_a?(Class) && !(stp < Decouplio::Action)
56
+ step_options = {}
57
+ options.each_key do |key|
58
+ step_options[key] = options.delete(key) if Decouplio::Const::StepOptions::ALLOWED.include?(key)
59
+ end
60
+
61
+ @steps << {
62
+ type: Decouplio::Const::Types::FAIL_TYPE,
63
+ name: stp,
64
+ _args: options,
65
+ **step_options
66
+ }
67
+ else
68
+ @steps << options.merge(type: Decouplio::Const::Types::FAIL_TYPE, name: stp)
69
+ end
40
70
  end
41
71
 
42
72
  def pass(stp, **options)
43
- @steps << options.merge(type: Decouplio::Const::Types::PASS_TYPE, name: stp)
73
+ if stp.is_a?(Class) && !(stp < Decouplio::Action)
74
+ step_options = {}
75
+
76
+ options.each_key do |key|
77
+ step_options[key] = options.delete(key) if Decouplio::Const::StepOptions::ALLOWED.include?(key)
78
+ end
79
+
80
+ @steps << {
81
+ type: Decouplio::Const::Types::PASS_TYPE,
82
+ name: stp,
83
+ _args: options,
84
+ **step_options
85
+ }
86
+ else
87
+ @steps << options.merge(type: Decouplio::Const::Types::PASS_TYPE, name: stp)
88
+ end
44
89
  end
45
90
 
46
91
  def octo(octo_name, **options, &block)
@@ -86,6 +131,9 @@ module Decouplio
86
131
  end
87
132
 
88
133
  def doby(doby_class, **options)
134
+ warn(
135
+ 'DEPRECATION WARNING: "doby" step type will be deprecated at alpha8 version. Use "step" or "pass" instead.'
136
+ )
89
137
  step_options = {}
90
138
  options.each_key do |key|
91
139
  step_options[key] = options.delete(key) if Decouplio::Const::DobyAideOptions::ALLOWED.include?(key)
@@ -102,6 +150,7 @@ module Decouplio
102
150
  end
103
151
 
104
152
  def aide(aide_class, **options)
153
+ warn('DEPRECATION WARNING: "aide" step type will be deprecated at alpha8 version. Use "fail" instead.')
105
154
  raise Decouplio::Errors::AideCanNotBeFirstStepError if @steps.empty?
106
155
 
107
156
  step_options = {}
@@ -567,6 +567,7 @@ module Decouplio
567
567
  hash_case
568
568
  wrap_flow
569
569
  step_to_resq
570
+ _args
570
571
  ].freeze
571
572
 
572
573
  # *************************************************
@@ -6,10 +6,11 @@ require_relative 'shared/fail_resolver'
6
6
  module Decouplio
7
7
  module Steps
8
8
  class ServiceFail < Decouplio::Steps::BaseStep
9
- def initialize(name:, service:, on_success_type:, on_failure_type:)
9
+ def initialize(name:, service:, args:, on_success_type:, on_failure_type:)
10
10
  super()
11
11
  @name = name
12
12
  @service = service
13
+ @args = args
13
14
  @on_success_type = on_success_type
14
15
  @on_failure_type = on_failure_type
15
16
  end
@@ -18,7 +19,8 @@ module Decouplio
18
19
  instance.append_railway_flow(@name)
19
20
  result = @service.call(
20
21
  ctx: instance.ctx,
21
- error_store: instance.error_store
22
+ error_store: instance.error_store,
23
+ **@args
22
24
  )
23
25
 
24
26
  resolve(result: result, instance: instance)
@@ -5,10 +5,11 @@ require_relative 'base_step'
5
5
  module Decouplio
6
6
  module Steps
7
7
  class ServicePass < Decouplio::Steps::BaseStep
8
- def initialize(name:, service:, on_success_type:, on_failure_type:)
8
+ def initialize(name:, service:, args:, on_success_type:, on_failure_type:)
9
9
  super()
10
10
  @name = name
11
11
  @service = service
12
+ @args = args
12
13
  @on_success_type = on_success_type
13
14
  @on_failure_type = on_failure_type
14
15
  end
@@ -17,7 +18,8 @@ module Decouplio
17
18
  instance.append_railway_flow(@name)
18
19
  @service.call(
19
20
  ctx: instance.ctx,
20
- error_store: instance.error_store
21
+ error_store: instance.error_store,
22
+ **@args
21
23
  )
22
24
 
23
25
  resolve(instance: instance)
@@ -6,10 +6,11 @@ require_relative 'shared/step_resolver'
6
6
  module Decouplio
7
7
  module Steps
8
8
  class ServiceStep < Decouplio::Steps::BaseStep
9
- def initialize(name:, service:, on_success_type:, on_failure_type:)
9
+ def initialize(name:, service:, args:, on_success_type:, on_failure_type:)
10
10
  super()
11
11
  @name = name
12
12
  @service = service
13
+ @args = args
13
14
  @on_success_type = on_success_type
14
15
  @on_failure_type = on_failure_type
15
16
  end
@@ -18,7 +19,8 @@ module Decouplio
18
19
  instance.append_railway_flow(@name)
19
20
  result = @service.call(
20
21
  ctx: instance.ctx,
21
- error_store: instance.error_store
22
+ error_store: instance.error_store,
23
+ **@args
22
24
  )
23
25
 
24
26
  resolve(result: result, instance: instance)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decouplio
4
- VERSION = '1.0.0alpha5'
4
+ VERSION = '1.0.0alpha7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decouplio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0alpha5
4
+ version: 1.0.0alpha7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Bal
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-17 00:00:00.000000000 Z
11
+ date: 2022-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -134,6 +134,7 @@ files:
134
134
  - lib/decouplio/const/error_messages.rb
135
135
  - lib/decouplio/const/reserved_methods.rb
136
136
  - lib/decouplio/const/results.rb
137
+ - lib/decouplio/const/step_options.rb
137
138
  - lib/decouplio/const/types.rb
138
139
  - lib/decouplio/const/validations/action_option_class.rb
139
140
  - lib/decouplio/const/validations/aide.rb
@@ -226,11 +227,11 @@ files:
226
227
  - lib/decouplio/steps/wrap.rb
227
228
  - lib/decouplio/validators/condition.rb
228
229
  - lib/decouplio/version.rb
229
- homepage: https://github.com/differencialx/decouplio/blob/master/docs
230
+ homepage: https://differencialx.github.io/decouplio.github.io/
230
231
  licenses:
231
232
  - MIT
232
233
  metadata:
233
- homepage_uri: https://github.com/differencialx/decouplio/blob/master/docs
234
+ homepage_uri: https://differencialx.github.io/decouplio.github.io/
234
235
  source_code_uri: https://github.com/differencialx/decouplio/blob/master/docs
235
236
  changelog_uri: https://github.com/differencialx/decouplio/blob/master/docs/CHANGELOG.md
236
237
  post_install_message: