closed_loop 0.2.0 → 0.3.0

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: 37a10edd09b0eb4aa81900e216de4d23d28a9a873150023b031c88f2c92c4d28
4
- data.tar.gz: a0bab9ddd3e767fdaac03a5a802a8f5c484af48ca29adacb80aa263fdac09857
3
+ metadata.gz: 3ff1ecd4ed9a2bf4145dd0a74174f17323cce5aa80f23aaf4291de4870c74a61
4
+ data.tar.gz: '07286939fcee7c4a1519ae88dc862706eca84b27bf508e313af9253c34e89b12'
5
5
  SHA512:
6
- metadata.gz: 2cc9587676d05f6b16e26885dcddcf22bfd7e608164e7cdc5b4cb109d5c7c79b1af257ad15daafcea4116b5c315e334c3a067d05c4cf4b398680ded790e15e3d
7
- data.tar.gz: fdaf9e4dc643559f349e03aa38d47d5ab44037eb30125123bff1bdc6a1a14975ded883846ef53eb34832768536528ca2afb5533071f9b1c8291a145705f9e74b
6
+ metadata.gz: 6631a4bcdcc0a30e531e54d0ec843f09ea0b67f215a90c8447468770fdfab6ec19a333321c29f565e573d40d87e9fbfa22f360d3fcc834819674a41fceb3814c
7
+ data.tar.gz: 76290f04f6f710986fdc50120c3817fb7196168cf1dc79bd2bc767157bf53671ad05f146ccba071e0b8820b91e43e1abfb5be7861dd3ae7b09f223075d08502c
data/Example.md CHANGED
@@ -77,11 +77,11 @@ end
77
77
  ```Ruby
78
78
  # In controller / service / interactor / background worker
79
79
 
80
- OrderMachine.insantce.transition!(order, current_user, to: :parcel__received)
80
+ OrderMachine.insantce.transit!(order, current_user, to: :parcel__received)
81
81
 
82
82
  # invoke extra methods in the the same transition & ActiveRecord transaction:
83
83
 
84
- OrderMachine.insantce.transition!(order, current_user, to: :parcel__received) do
84
+ OrderMachine.insantce.transit!(order, current_user, to: :parcel__received) do
85
85
  order.items.each { |item| '#...' }
86
86
  end
87
87
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- closed_loop (0.1.0)
4
+ closed_loop (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,7 +19,7 @@ module ClosedLoop
19
19
  configuration.transitions.select { |transition| transition.available?(target, user) }
20
20
  end
21
21
 
22
- def transition!(target, user, to:, &block)
22
+ def transit!(target, user, to:, &block)
23
23
  available_transition = available_transitions(target, user).find do |transition|
24
24
  transition.from == target.status.to_sym && transition.to == to.to_sym
25
25
  end
@@ -31,6 +31,16 @@ module ClosedLoop
31
31
  end
32
32
  end
33
33
 
34
+ def transit(target, user, to:, attributes: {}, &block)
35
+ available_transition = available_transitions(target, user).find do |transition|
36
+ transition.from == target.status.to_sym && transition.to == to.to_sym
37
+ end
38
+
39
+ if available_transition&.available?(target, user)
40
+ available_transition.perform(target, user, attributes, &block)
41
+ end
42
+ end
43
+
34
44
  def resolve_role(*args)
35
45
  self.class.const_get('RoleResolver').new(*args).call
36
46
  end
@@ -37,6 +37,26 @@ module ClosedLoop
37
37
 
38
38
  @track_times_used = times_used + 1
39
39
  end
40
+
41
+ def perform(target, user, attributes)
42
+ target.class.transaction do
43
+ target.assign_attributes(attributes)
44
+ target.status = to
45
+ target.last_transition_at = Time.current if target.respond_to?(:last_transition_at)
46
+
47
+ if target.save
48
+ proc&.call(target, user, transition: self)
49
+
50
+ machine.configuration.select_callbacks_for(self).each do |callback|
51
+ callback.perform!(target, user, transition: self)
52
+ end
53
+
54
+ yield(target, user, transition: self) if block_given?
55
+ end
56
+ end
57
+
58
+ @track_times_used = times_used + 1
59
+ end
40
60
  end
41
61
  end
42
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ClosedLoop
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: closed_loop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vilius Luneckas