prioritized_callbacks 0.0.3 → 0.0.4
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f503f82601d43373b1d6e3d8462762a03f0ceb789a0989df6c1f8931e7aec5a4
|
4
|
+
data.tar.gz: ff6063eb44c68edd45162cf47a4a8adb97af82e3193c45ffc28f991f777f51ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ae190caa8fb5d8875cf5da6f95f947eda35ec7b44661795a88d974875ad7ae0cf13f11384c36ef3c606b650e8d49848742520a4cb394b56fb7b159c2157f272
|
7
|
+
data.tar.gz: f3408a104daee2f7827e187dc49d849d60f7d590967d5a179a52ed217b64baa0195aae00b552515df2a1a2daac6be4e246a58e991aef9f9250e81e149e2fd63a
|
data/README.md
CHANGED
@@ -6,6 +6,16 @@ which are executed last despite of the order in which they were initially added.
|
|
6
6
|
|
7
7
|
**WARNING!** Do not use this gem unless you know that's the only way.
|
8
8
|
|
9
|
+
## Install
|
10
|
+
|
11
|
+
Add the following line to Gemfile:
|
12
|
+
|
13
|
+
`gem 'prioritized_callbacks'`
|
14
|
+
|
15
|
+
## Compatibility
|
16
|
+
|
17
|
+
It is checked against all Rails versions >= 5.0 and Ruby >= 2.7
|
18
|
+
|
9
19
|
## Usage
|
10
20
|
|
11
21
|
### Using pure ActiveSupport::Callbacks:
|
@@ -110,4 +120,4 @@ append_save_order :my_order, before: :default
|
|
110
120
|
|
111
121
|
You can specify `:before` or `:after` to specify a place where new order item should be inserted.
|
112
122
|
|
113
|
-
2) To set priority for specific callback, you should add `:priority` option to `before_save` or `after_save`.
|
123
|
+
2) To set priority for specific callback, you should add `:priority` option to `before_save` or `after_save`.
|
@@ -4,20 +4,24 @@ module PrioritizedCallbacks
|
|
4
4
|
def set_callbacks_order(name, order_items)
|
5
5
|
chain = get_callbacks(name)
|
6
6
|
raise ArgumentError, "Callbacks for #{name} are not defined" unless chain
|
7
|
+
order_items = order_items.map(&:to_sym)
|
7
8
|
set_callbacks name, chain.copy_with_new_order(order_items)
|
8
9
|
end
|
9
10
|
|
10
11
|
def append_callbacks_order(name, order_items, options = {})
|
11
12
|
chain = get_callbacks(name)
|
12
13
|
raise ArgumentError, "Callbacks for #{name} are not defined" unless chain
|
13
|
-
order
|
14
|
-
insert_pos
|
15
|
-
|
14
|
+
order = chain.config[:order].dup
|
15
|
+
insert_pos = order.size
|
16
|
+
order_items = order_items.map(&:to_sym)
|
17
|
+
existing_items = order & order_items
|
18
|
+
raise ArgumentError, "Order item(s) #{existing_items.map(&:inspect).join(', ')} already exist for #{name} callbacks" if existing_items.any?
|
19
|
+
if (before = options[:before]&.to_sym)
|
16
20
|
insert_pos = order.index(before)
|
17
|
-
raise ArgumentError, "Order
|
18
|
-
elsif (after = options[:after])
|
21
|
+
raise ArgumentError, "Order item #{before.inspect} is not defined for #{name} callbacks" unless insert_pos
|
22
|
+
elsif (after = options[:after]&.to_sym)
|
19
23
|
insert_pos = order.index(after)
|
20
|
-
raise ArgumentError, "Order
|
24
|
+
raise ArgumentError, "Order item #{after.inspect} is not defined for #{name} callbacks" unless insert_pos
|
21
25
|
insert_pos += 1
|
22
26
|
end
|
23
27
|
order.insert insert_pos, *order_items
|
@@ -137,4 +137,20 @@ RSpec.describe ActiveRecord::Callbacks do
|
|
137
137
|
it "has proper order when new order item is appended to the beginning" do
|
138
138
|
expect(record6.text).to eq('Y1023X4956')
|
139
139
|
end
|
140
|
+
|
141
|
+
it "should fail when existing order item is appended" do
|
142
|
+
expect do
|
143
|
+
class FailingRecord < Record2
|
144
|
+
append_save_order :first, :second, :last
|
145
|
+
end
|
146
|
+
end.to raise_error(ArgumentError, 'Order item(s) :first, :last already exist for save callbacks')
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should fail when order item doesn't exist" do
|
150
|
+
expect do
|
151
|
+
class FailingRecord < Record2
|
152
|
+
append_save_order :second, before: :nonexisting
|
153
|
+
end
|
154
|
+
end.to raise_error(ArgumentError, 'Order item :nonexisting is not defined for save callbacks')
|
155
|
+
end
|
140
156
|
end
|