use_cases 2.0.2 → 2.0.5

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