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.transform_method = transform_method
|
||||||
subclass.cache_length = cache_length
|
subclass.cache_length = cache_length
|
||||||
subclass.race_condition_ttl = race_condition_ttl
|
subclass.race_condition_ttl = race_condition_ttl
|
||||||
subclass.data_links = data_links
|
subclass.data_links = data_links.dup
|
||||||
subclass.cached = cached
|
subclass.cached = cached
|
||||||
subclass.set_type(subclass.reflected_record_type) if subclass.reflected_record_type
|
subclass.set_type(subclass.reflected_record_type) if subclass.reflected_record_type
|
||||||
subclass.meta_to_serialize = meta_to_serialize
|
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
|
expect(serializable_hash[:data][:links][:url]).to eq movie.url
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
describe '#key_transform' do
|
describe '#key_transform' do
|
||||||
|
@ -181,6 +181,18 @@ RSpec.shared_context 'movie class' do
|
|||||||
has_one :advertising_campaign
|
has_one :advertising_campaign
|
||||||
end
|
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
|
class MovieWithoutIdStructSerializer
|
||||||
include FastJsonapi::ObjectSerializer
|
include FastJsonapi::ObjectSerializer
|
||||||
attributes :name, :release_year
|
attributes :name, :release_year
|
||||||
@ -354,6 +366,9 @@ RSpec.shared_context 'movie class' do
|
|||||||
|
|
||||||
after(:context) do
|
after(:context) do
|
||||||
classes_to_remove = %i[
|
classes_to_remove = %i[
|
||||||
|
ActionMovieSerializer
|
||||||
|
GenreMovieSerializer
|
||||||
|
HorrorMovieSerializer
|
||||||
Movie
|
Movie
|
||||||
MovieSerializer
|
MovieSerializer
|
||||||
Actor
|
Actor
|
||||||
|
Loading…
x
Reference in New Issue
Block a user