prioritized_callbacks 0.0.2 → 0.0.3

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: 67fa423205b68cba0faae8dbe2c7ae6e2d27d4e935fa8b9240368f1db1364833
4
- data.tar.gz: 684ebfffafab4bc89ff968983970c98ca5a996174f3d50307bd7b1fab56e83fb
3
+ metadata.gz: 920ddd09c3a79727ca904220114d5ed4df1f2246422bf708b8ccdce47534dab1
4
+ data.tar.gz: 5d1eccf1d4632e79130cd9e388bde7f69b32e88dae781a79161b721e05adb938
5
5
  SHA512:
6
- metadata.gz: 6150409a8dcf199c6aca6685d01b3fd8ef33b62a562ee95fcd92e578fdc05279a38f6f54b91b6ebb85b3e4e2230407acb46d2380c559120d4246668cf5f732f9
7
- data.tar.gz: 8b39d7091e40da431c89f40389ebc8d5b703b454b3219de41d64094866a54149439e6971696368f76b02a591098ae276671887838df2dce3ad9147752cac166f
6
+ metadata.gz: 0d341ef80863b66a8c31cce8ce407f25475d88426b25c5aa0e4118742173db5939f6e12b5e82844d8242989d79d1ccab5244ce199ce99eb3af8f0577c693a6b8
7
+ data.tar.gz: 6909e13c7d26c8f4edcce63ed9a6a72530513e0ab3e8a8a9de3c32e15601fef64763aa512a0257db0401b906fe1b60f20ace242b43066bed4adade2f2262354e
data/README.md CHANGED
@@ -102,4 +102,12 @@ set_callbacks_order :save, [..., :default, ...]
102
102
  The latter can be used outside of ActiveRecord, in ActionController or ActiveModel, where ActiveSupport::Callbacks
103
103
  are included.
104
104
 
105
+ To append the order in any inherited class:
106
+
107
+ ```ruby
108
+ append_save_order :my_order, before: :default
109
+ ```
110
+
111
+ You can specify `:before` or `:after` to specify a place where new order item should be inserted.
112
+
105
113
  2) To set priority for specific callback, you should add `:priority` option to `before_save` or `after_save`.
@@ -10,7 +10,10 @@ module PrioritizedCallbacks
10
10
 
11
11
  callbacks.each do |callback|
12
12
  define_singleton_method "set_#{callback}_order" do |*args|
13
- set_callbacks_order(:"#{callback}", args)
13
+ set_callbacks_order(callback, args)
14
+ end
15
+ define_singleton_method "append_#{callback}_order" do |*args, **options|
16
+ append_callbacks_order(callback, args, options)
14
17
  end
15
18
  end
16
19
  end
@@ -1,10 +1,27 @@
1
1
  module PrioritizedCallbacks
2
2
  module ActiveSupport
3
3
  module CallbacksClassMethodsPatch
4
- def set_callbacks_order(name, order)
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
- set_callbacks name, chain.copy_with_new_order(order)
7
+ set_callbacks name, chain.copy_with_new_order(order_items)
8
+ end
9
+
10
+ def append_callbacks_order(name, order_items, options = {})
11
+ chain = get_callbacks(name)
12
+ raise ArgumentError, "Callbacks for #{name} are not defined" unless chain
13
+ order = chain.config[:order]
14
+ insert_pos = order.size
15
+ if (before = options[:before])
16
+ insert_pos = order.index(before)
17
+ raise ArgumentError, "Order '#{before}' is not defined in #{name} callbacks" unless insert_pos
18
+ elsif (after = options[:after])
19
+ insert_pos = order.index(after)
20
+ raise ArgumentError, "Order '#{after}' is not defined in #{name} callbacks" unless insert_pos
21
+ insert_pos += 1
22
+ end
23
+ order.insert insert_pos, *order_items
24
+ set_callbacks_order name, order
8
25
  end
9
26
  end
10
27
  end
@@ -1,3 +1,3 @@
1
1
  module PrioritizedCallbacks
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -87,10 +87,28 @@ RSpec.describe ActiveRecord::Callbacks do
87
87
  end
88
88
  end
89
89
 
90
+ class Record5 < Record2
91
+ append_save_order :final
92
+
93
+ before_save priority: :final do
94
+ self.text += 'X'
95
+ end
96
+ end
97
+
98
+ class Record6 < Record5
99
+ append_save_order :initial, before: :first
100
+
101
+ before_save priority: :initial do
102
+ self.text += 'Y'
103
+ end
104
+ end
105
+
90
106
  let(:record1) { Record1.new.tap(&:save) }
91
107
  let(:record2) { Record2.new.tap(&:save) }
92
108
  let(:record3) { Record3.new.tap(&:save) }
93
109
  let(:record4) { Record4.new.tap(&:save) }
110
+ let(:record5) { Record5.new.tap(&:save) }
111
+ let(:record6) { Record6.new.tap(&:save) }
94
112
 
95
113
  it 'has default order if order is not specified' do
96
114
  expect(record1.text).to eq('012934')
@@ -111,4 +129,12 @@ RSpec.describe ActiveRecord::Callbacks do
111
129
  it "has proper order when around is used" do
112
130
  expect(record4.text).to eq('1342')
113
131
  end
132
+
133
+ it "has proper order when new order item is appended" do
134
+ expect(record5.text).to eq('1023X4956')
135
+ end
136
+
137
+ it "has proper order when new order item is appended to the beginning" do
138
+ expect(record6.text).to eq('Y1023X4956')
139
+ end
114
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prioritized_callbacks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Argirov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-02 00:00:00.000000000 Z
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport