File tree 3 files changed +32
-1
lines changed
3 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -117,7 +117,7 @@ def inherited(subclass)
117
117
subclass . transform_method = transform_method
118
118
subclass . cache_length = cache_length
119
119
subclass . race_condition_ttl = race_condition_ttl
120
- subclass . data_links = data_links
120
+ subclass . data_links = data_links . dup if data_links . present?
121
121
subclass . cached = cached
122
122
subclass . set_type ( subclass . reflected_record_type ) if subclass . reflected_record_type
123
123
subclass . meta_to_serialize = meta_to_serialize
Original file line number Diff line number Diff line change @@ -355,6 +355,22 @@ def year_since_release_calculator(release_year)
355
355
expect ( serializable_hash [ :data ] [ :links ] [ :url ] ) . to eq movie . url
356
356
end
357
357
end
358
+
359
+ context 'when inheriting from a parent serializer' do
360
+ before do
361
+ MovieSerializer . link ( :url ) do |movie_object |
362
+ "http://movies.com/#{ movie_object . id } "
363
+ end
364
+ end
365
+ subject ( :action_serializable_hash ) { ActionMovieSerializer . new ( movie ) . serializable_hash }
366
+ subject ( :horror_serializable_hash ) { HorrorMovieSerializer . new ( movie ) . serializable_hash }
367
+
368
+ let ( :url ) { "http://movies.com/#{ movie . id } " }
369
+
370
+ it 'returns the link for the correct sub-class' do
371
+ expect ( action_serializable_hash [ :data ] [ :links ] [ :url ] ) . to eq "/action-movie/#{ movie . id } "
372
+ end
373
+ end
358
374
end
359
375
360
376
describe '#key_transform' do
Original file line number Diff line number Diff line change @@ -181,6 +181,18 @@ class MovieSerializer
181
181
has_one :advertising_campaign
182
182
end
183
183
184
+ class GenreMovieSerializer < MovieSerializer
185
+ link ( :something ) { '/something/' }
186
+ end
187
+
188
+ class ActionMovieSerializer < GenreMovieSerializer
189
+ link ( :url ) { |object | "/action-movie/#{ object . id } " }
190
+ end
191
+
192
+ class HorrorMovieSerializer < GenreMovieSerializer
193
+ link ( :url ) { |object | "/horror-movie/#{ object . id } " }
194
+ end
195
+
184
196
class MovieWithoutIdStructSerializer
185
197
include FastJsonapi ::ObjectSerializer
186
198
attributes :name , :release_year
@@ -354,6 +366,9 @@ class MovieSerializer
354
366
355
367
after ( :context ) do
356
368
classes_to_remove = %i[
369
+ ActionMovieSerializer
370
+ GenreMovieSerializer
371
+ HorrorMovieSerializer
357
372
Movie
358
373
MovieSerializer
359
374
Actor
You can’t perform that action at this time.
0 commit comments