use_cases 2.0.2 → 2.0.5

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: 92d41d9c7f9da2600b22ffcad2013a9115f39f42ef41df49b2c592a18fb4115b
4
- data.tar.gz: c0a3f6f88235e144107ba141b3e8add9bcca2ee42dce3f2f2e0ea0562ef114a3
3
+ metadata.gz: 0eeb3dbfaea03f3428d29cc4f962c451b45450b483fca46fcb6cd57e49d68ab8
4
+ data.tar.gz: f762a4103472c0d451a7904a2ea1826e2496e4856b19ec10301fdcd5cbfbcfed
5
5
  SHA512:
6
- metadata.gz: 251c8400f48af05b11ea871a2750531071548050725f341aabd8bfb4a1bca8b68a1fd6d69eb1db3b6af93da888f89e37bd5985c6933a3f541ac63650fccf8ba1
7
- data.tar.gz: 65e556b50fe0cd77bef9c0d0e4c9652c88434a53b616a46677e352df7a4469e6b6c8959274859989ed821f305c3a90342476302df7e60971dbc2708b4c40e300
6
+ metadata.gz: 95fb413aef5d081dceab61857d514b8a0cdc85ec6e59ac255c027e7b5e8cc3192d1ced90d1f28da46595140e22258e1f51f7333f9ecbdbbfbfd08572c9e51101
7
+ data.tar.gz: 8e4497d22b20a6894b43b4f23bc3f10be0d40064ecebc6887e7b02f2fb769b14337364af1806a2a999984849516a214bff3272f71074054b3dfe750f932e2dd0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- use_cases (2.0.2)
4
+ use_cases (2.0.5)
5
5
  activesupport (>= 5.1)
6
6
  dry-matcher (>= 0.8.1)
7
7
  dry-monads (>= 1.0.0)
data/lib/use_cases/dsl.rb CHANGED
@@ -14,6 +14,10 @@ module UseCases
14
14
  end
15
15
  end
16
16
 
17
+ def remove_step(name)
18
+ __steps__.delete_if { |step| step.name == name }
19
+ end
20
+
17
21
  def __steps__
18
22
  @__steps__ ||= []
19
23
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "use_cases/step_adapters/check"
4
+
5
+ module UseCases
6
+ module ModuleOptins
7
+ module Locked
8
+ def self.included(base)
9
+ super
10
+ base.class_eval do
11
+ extend DSL
12
+ prepend CallPatch
13
+ end
14
+ end
15
+
16
+ MissingLockConfiguration = Class.new(StandardError)
17
+ MissingLockerError = Class.new(StandardError)
18
+
19
+ module DSL
20
+ attr_reader :_lock_with, :_lock_options
21
+
22
+ def lock_with(options = {}, &blk)
23
+ @_lock_with = blk || options.delete(:key)
24
+ @_lock_options = options
25
+ end
26
+ end
27
+
28
+ module CallPatch
29
+ def call(*args)
30
+ unless self.class._lock_with
31
+ raise MissingLockConfiguration, "Locked use cases require setting `lock_with` to define the cache key and wait configuration.\n" \
32
+ " Example: `lock_with { |params, curent_user| \"my-key-\#{params[:id]}-\#{curent_user.id}\" }`"
33
+ end
34
+
35
+ key = lock_with(*args)
36
+
37
+ raise MissingLockerError, "Locked use cases require setting `locker` dependency to define the cache store.\n" unless respond_to?(:locker)
38
+
39
+ locker.lock(key, lock_options) { super }
40
+ end
41
+
42
+ private
43
+
44
+ def lock_options
45
+ self.class._lock_options
46
+ end
47
+
48
+ def lock_with(*args)
49
+ self.class._lock_with.is_a?(Proc) ? self.class._lock_with.call(*args) : self.class._lock_with
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -58,9 +58,9 @@ module UseCases
58
58
  end
59
59
 
60
60
  def block_with_config(&blk)
61
- Proc.new do
61
+ proc do
62
62
  instance_exec(&UseCases.dry_validation)
63
- instance_exec(&blk)
63
+ instance_exec(&blk)
64
64
  end
65
65
  end
66
66
  end
@@ -76,7 +76,7 @@ module UseCases
76
76
  params.merge!(validation.to_h)
77
77
  Success(validation.to_h)
78
78
  else
79
- Failure([:validation_error, UseCases.transform_validation_errors.(validation.errors)])
79
+ Failure([:validation_error, UseCases.transform_validation_errors.call(validation.errors)])
80
80
  end
81
81
  end
82
82
 
@@ -4,6 +4,7 @@ require "use_cases/module_optins/prepared"
4
4
  require "use_cases/module_optins/transactional"
5
5
  require "use_cases/module_optins/validated"
6
6
  require "use_cases/module_optins/authorized"
7
+ require "use_cases/module_optins/locked"
7
8
 
8
9
  module UseCases
9
10
  module ModuleOptins
@@ -14,6 +15,7 @@ module UseCases
14
15
  transactional: Transactional,
15
16
  validated: Validated,
16
17
  prepared: Prepared,
18
+ locked: Locked
17
19
  }.freeze
18
20
 
19
21
  def [](*options)
@@ -38,18 +38,17 @@ module UseCases
38
38
  raise StepArgumentError,
39
39
  "##{step.name} expects #{expected_args_count} arguments it only received #{step_args.count}, make sure your previous step Success() statement has a payload."
40
40
  end
41
-
42
41
  return args.first(callable_args_count) unless external? && selects_external_args?
43
42
 
44
43
  hashed_args(args).values
45
44
  end
46
45
 
47
- def hashed_args(args)
46
+ def hashed_args((prev_result, params, current_user))
48
47
  {
49
- params: args.first,
50
- current_user: args.last,
51
- previous_step_result: args.last
52
- }.slice(pass_option)
48
+ previous_step_result: prev_result,
49
+ params: params,
50
+ current_user: current_user
51
+ }.slice(*pass_option)
53
52
  end
54
53
 
55
54
  def callable_proc
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UseCases
4
- VERSION = "2.0.2"
4
+ VERSION = "2.0.5"
5
5
  end
data/lib/use_cases.rb CHANGED
@@ -23,7 +23,7 @@ module UseCases
23
23
  def self.dry_validation
24
24
  config_proc = config.dry_validation
25
25
 
26
- Proc.new do
26
+ proc do
27
27
  config_proc.call(config)
28
28
  end
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: use_cases
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ring Twice
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-04 00:00:00.000000000 Z
11
+ date: 2022-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -149,6 +149,7 @@ files:
149
149
  - lib/use_cases/dsl.rb
150
150
  - lib/use_cases/module_optins.rb
151
151
  - lib/use_cases/module_optins/authorized.rb
152
+ - lib/use_cases/module_optins/locked.rb
152
153
  - lib/use_cases/module_optins/prepared.rb
153
154
  - lib/use_cases/module_optins/transactional.rb
154
155
  - lib/use_cases/module_optins/validated.rb