Skip to content

Commit f3368de

Browse files
authoredOct 14, 2018
Merge pull request Netflix#330 from matzko/dev
Don't share data_links among inherited serializers.
2 parents 11b5255 + be701f3 commit f3368de

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed
 

‎lib/fast_jsonapi/object_serializer.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def inherited(subclass)
117117
subclass.transform_method = transform_method
118118
subclass.cache_length = cache_length
119119
subclass.race_condition_ttl = race_condition_ttl
120-
subclass.data_links = data_links
120+
subclass.data_links = data_links.dup if data_links.present?
121121
subclass.cached = cached
122122
subclass.set_type(subclass.reflected_record_type) if subclass.reflected_record_type
123123
subclass.meta_to_serialize = meta_to_serialize

‎spec/lib/object_serializer_class_methods_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,22 @@ def year_since_release_calculator(release_year)
355355
expect(serializable_hash[:data][:links][:url]).to eq movie.url
356356
end
357357
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
358374
end
359375

360376
describe '#key_transform' do

‎spec/shared/contexts/movie_context.rb

+15
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,18 @@ class MovieSerializer
181181
has_one :advertising_campaign
182182
end
183183

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+
184196
class MovieWithoutIdStructSerializer
185197
include FastJsonapi::ObjectSerializer
186198
attributes :name, :release_year
@@ -354,6 +366,9 @@ class MovieSerializer
354366

355367
after(:context) do
356368
classes_to_remove = %i[
369+
ActionMovieSerializer
370+
GenreMovieSerializer
371+
HorrorMovieSerializer
357372
Movie
358373
MovieSerializer
359374
Actor

0 commit comments

Comments
 (0)