prioritized_callbacks 0.0.3 → 0.0.4
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:
|
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
|