|
12 | 12 | settings.namespace[:namespace_thing] = :namespace_foo_bar |
13 | 13 | settings.namespace_inheritable[:namespace_inheritable_thing] = :namespace_inheritable_foo_bar |
14 | 14 | settings.namespace_stackable[:namespace_stackable_thing] = :namespace_stackable_foo_bar |
15 | | - settings.namespace_reverse_stackable[:namespace_reverse_stackable_thing] = :namespace_reverse_stackable_foo_bar |
16 | 15 | settings.route[:route_thing] = :route_foo_bar |
17 | 16 | end |
18 | 17 | end |
|
22 | 21 | settings.namespace[:namespace_thing] = :namespace_foo_bar_other |
23 | 22 | settings.namespace_inheritable[:namespace_inheritable_thing] = :namespace_inheritable_foo_bar_other |
24 | 23 | settings.namespace_stackable[:namespace_stackable_thing] = :namespace_stackable_foo_bar_other |
25 | | - settings.namespace_reverse_stackable[:namespace_reverse_stackable_thing] = :namespace_reverse_stackable_foo_bar_other |
26 | 24 | settings.route[:route_thing] = :route_foo_bar_other |
27 | 25 | end |
28 | 26 | end |
|
116 | 114 | end |
117 | 115 | end |
118 | 116 |
|
119 | | - describe '#namespace_reverse_stackable' do |
120 | | - it 'works with reverse stackable values' do |
121 | | - expect(subject.namespace_reverse_stackable[:namespace_reverse_stackable_thing]).to eq [:namespace_reverse_stackable_foo_bar] |
| 117 | + describe '#rescue_handlers / #add_rescue_handlers' do |
| 118 | + it 'records subclass-matching handlers under rescue_handlers' do |
| 119 | + subject.add_rescue_handlers({ StandardError => :handler }, subclasses: true) |
| 120 | + expect(subject.rescue_handlers).to eq(StandardError => :handler) |
| 121 | + expect(subject.base_only_rescue_handlers).to be_nil |
| 122 | + end |
122 | 123 |
|
123 | | - subject.inherit_from other_parent |
| 124 | + it 'records exact-match handlers under base_only_rescue_handlers' do |
| 125 | + subject.add_rescue_handlers({ StandardError => :handler }, subclasses: false) |
| 126 | + expect(subject.base_only_rescue_handlers).to eq(StandardError => :handler) |
| 127 | + expect(subject.rescue_handlers).to be_nil |
| 128 | + end |
124 | 129 |
|
125 | | - expect(subject.namespace_reverse_stackable[:namespace_reverse_stackable_thing]).to eq [:namespace_reverse_stackable_foo_bar_other] |
| 130 | + it 'lets a nested scope override an inherited handler for the same class' do |
| 131 | + parent = described_class.new.tap { |s| s.add_rescue_handlers({ StandardError => :parent }, subclasses: true) } |
| 132 | + subject.inherit_from parent |
| 133 | + subject.add_rescue_handlers({ StandardError => :child }, subclasses: true) |
| 134 | + expect(subject.rescue_handlers).to eq(StandardError => :child) |
126 | 135 | end |
127 | 136 | end |
128 | 137 |
|
|
192 | 201 | expect(cloned_obj.namespace_stackable[:namespace_stackable_thing]).to eq [:namespace_stackable_foo_bar] |
193 | 202 | end |
194 | 203 |
|
195 | | - it 'decouples namespace reverse stackable values' do |
196 | | - expect(cloned_obj.namespace_reverse_stackable[:namespace_reverse_stackable_thing]).to eq [:namespace_reverse_stackable_foo_bar] |
197 | | - |
198 | | - subject.namespace_reverse_stackable[:namespace_reverse_stackable_thing] = :other_thing |
199 | | - expect(subject.namespace_reverse_stackable[:namespace_reverse_stackable_thing]).to eq %i[other_thing namespace_reverse_stackable_foo_bar] |
200 | | - expect(cloned_obj.namespace_reverse_stackable[:namespace_reverse_stackable_thing]).to eq [:namespace_reverse_stackable_foo_bar] |
201 | | - end |
202 | | - |
203 | 204 | it 'decouples route values' do |
204 | 205 | expect(cloned_obj.route[:route_thing]).to eq :route_foo_bar |
205 | 206 |
|
|
218 | 219 | subject.namespace[:namespace_thing] = :namespace_foo_bar |
219 | 220 | subject.namespace_inheritable[:namespace_inheritable_thing] = :namespace_inheritable_foo_bar |
220 | 221 | subject.namespace_stackable[:namespace_stackable_thing] = [:namespace_stackable_foo_bar] |
221 | | - subject.namespace_reverse_stackable[:namespace_reverse_stackable_thing] = [:namespace_reverse_stackable_foo_bar] |
| 222 | + subject.add_rescue_handlers({ StandardError => :handler }, subclasses: true) |
222 | 223 | subject.route[:route_thing] = :route_foo_bar |
223 | 224 | expect(subject.to_hash).to match( |
224 | 225 | global: { global_thing: :global_foo_bar }, |
|
227 | 228 | namespace_inheritable_thing: :namespace_inheritable_foo_bar |
228 | 229 | }, |
229 | 230 | namespace_stackable: { namespace_stackable_thing: [:namespace_stackable_foo_bar, [:namespace_stackable_foo_bar]] }, |
230 | | - namespace_reverse_stackable: |
231 | | - { namespace_reverse_stackable_thing: [[:namespace_reverse_stackable_foo_bar], :namespace_reverse_stackable_foo_bar] }, |
| 231 | + namespace_reverse_stackable: { rescue_handlers: [{ StandardError => :handler }] }, |
232 | 232 | route: { route_thing: :route_foo_bar } |
233 | 233 | ) |
234 | 234 | end |
|
0 commit comments