Don't share data_links among inherited serializers.
This commit is contained in:
parent
11b5255010
commit
1ab5cd387a
@ -117,7 +117,7 @@ module FastJsonapi
|
||||
subclass.transform_method = transform_method
|
||||
subclass.cache_length = cache_length
|
||||
subclass.race_condition_ttl = race_condition_ttl
|
||||
subclass.data_links = data_links
|
||||
subclass.data_links = data_links.dup
|
||||
subclass.cached = cached
|
||||
subclass.set_type(subclass.reflected_record_type) if subclass.reflected_record_type
|
||||
subclass.meta_to_serialize = meta_to_serialize
|
||||
|
@ -355,6 +355,22 @@ describe FastJsonapi::ObjectSerializer do
|
||||
expect(serializable_hash[:data][:links][:url]).to eq movie.url
|
||||
end
|
||||
end
|
||||
|
||||
context 'when inheriting from a parent serializer' do
|
||||
before do
|
||||
MovieSerializer.link(:url) do |movie_object|
|
||||
"http://movies.com/#{movie_object.id}"
|
||||
end
|
||||
end
|
||||
subject(:action_serializable_hash) { ActionMovieSerializer.new(movie).serializable_hash }
|
||||
subject(:horror_serializable_hash) { HorrorMovieSerializer.new(movie).serializable_hash }
|
||||
|
||||
let(:url) { "http://movies.com/#{movie.id}" }
|
||||
|
||||
it 'returns the link for the correct sub-class' do
|
||||
expect(action_serializable_hash[:data][:links][:url]).to eq "/action-movie/#{movie.id}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#key_transform' do
|
||||
|
@ -181,6 +181,18 @@ RSpec.shared_context 'movie class' do
|
||||
has_one :advertising_campaign
|
||||
end
|
||||
|
||||
class GenreMovieSerializer < MovieSerializer
|
||||
link(:something) { '/something/' }
|
||||
end
|
||||
|
||||
class ActionMovieSerializer < GenreMovieSerializer
|
||||
link(:url) { |object| "/action-movie/#{object.id}" }
|
||||
end
|
||||
|
||||
class HorrorMovieSerializer < GenreMovieSerializer
|
||||
link(:url) { |object| "/horror-movie/#{object.id}" }
|
||||
end
|
||||
|
||||
class MovieWithoutIdStructSerializer
|
||||
include FastJsonapi::ObjectSerializer
|
||||
attributes :name, :release_year
|
||||
@ -354,6 +366,9 @@ RSpec.shared_context 'movie class' do
|
||||
|
||||
after(:context) do
|
||||
classes_to_remove = %i[
|
||||
ActionMovieSerializer
|
||||
GenreMovieSerializer
|
||||
HorrorMovieSerializer
|
||||
Movie
|
||||
MovieSerializer
|
||||
Actor
|
||||
|
Loading…
x
Reference in New Issue
Block a user