From 6dc34cd4d4d75ab1805fe322693dffff7a19db36 Mon Sep 17 00:00:00 2001 From: Kenji Sakurai Date: Sat, 8 Sep 2018 23:48:44 +0900 Subject: [PATCH 1/3] Fix set_key_transform's set_type to give priority to pre-set value --- lib/fast_jsonapi/object_serializer.rb | 6 +++++- .../object_serializer_class_methods_spec.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/fast_jsonapi/object_serializer.rb b/lib/fast_jsonapi/object_serializer.rb index 183d622..de01061 100644 --- a/lib/fast_jsonapi/object_serializer.rb +++ b/lib/fast_jsonapi/object_serializer.rb @@ -143,7 +143,11 @@ module FastJsonapi self.transform_method = mapping[transform_name.to_sym] # ensure that the record type is correctly transformed - set_type(reflected_record_type) if reflected_record_type + if record_type + set_type(record_type) + elsif reflected_record_type + set_type(reflected_record_type) + end end def run_key_transform(input) diff --git a/spec/lib/object_serializer_class_methods_spec.rb b/spec/lib/object_serializer_class_methods_spec.rb index 397ace5..c1edc0a 100644 --- a/spec/lib/object_serializer_class_methods_spec.rb +++ b/spec/lib/object_serializer_class_methods_spec.rb @@ -411,4 +411,22 @@ describe FastJsonapi::ObjectSerializer do it_behaves_like 'returning key transformed hash', :movie_type, :underscore_movie_type, :release_year end end + + describe '#set_key_transform after #set_type' do + subject(:serializable_hash) { MovieSerializer.new(movie).serializable_hash } + + before do + MovieSerializer.set_type :foo_bar + MovieSerializer.set_key_transform :camel + end + + after do + MovieSerializer.set_type :movie + MovieSerializer.transform_method = nil + end + + it 'returns correct hash which type equals transformed set_type value' do + expect(serializable_hash[:data][:type]).to eq :FooBar + end + end end From 57f09c7d71ebf9af1536623b0901e78a3af1ff1b Mon Sep 17 00:00:00 2001 From: Kenji Sakurai Date: Mon, 10 Sep 2018 10:32:53 +0900 Subject: [PATCH 2/3] Fix method order in spec after --- spec/lib/object_serializer_class_methods_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/object_serializer_class_methods_spec.rb b/spec/lib/object_serializer_class_methods_spec.rb index c1edc0a..233608e 100644 --- a/spec/lib/object_serializer_class_methods_spec.rb +++ b/spec/lib/object_serializer_class_methods_spec.rb @@ -421,8 +421,8 @@ describe FastJsonapi::ObjectSerializer do end after do - MovieSerializer.set_type :movie MovieSerializer.transform_method = nil + MovieSerializer.set_type :movie end it 'returns correct hash which type equals transformed set_type value' do From 64f7b6c50d6104dee7b7957dfd518a01bf3f2277 Mon Sep 17 00:00:00 2001 From: Kenji Sakurai Date: Sun, 16 Sep 2018 14:18:10 +0900 Subject: [PATCH 3/3] Add spec for singular and plural, so remove same checking example. --- .../object_serializer_class_methods_spec.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/spec/lib/object_serializer_class_methods_spec.rb b/spec/lib/object_serializer_class_methods_spec.rb index 233608e..347b188 100644 --- a/spec/lib/object_serializer_class_methods_spec.rb +++ b/spec/lib/object_serializer_class_methods_spec.rb @@ -416,7 +416,7 @@ describe FastJsonapi::ObjectSerializer do subject(:serializable_hash) { MovieSerializer.new(movie).serializable_hash } before do - MovieSerializer.set_type :foo_bar + MovieSerializer.set_type type_name MovieSerializer.set_key_transform :camel end @@ -425,8 +425,20 @@ describe FastJsonapi::ObjectSerializer do MovieSerializer.set_type :movie end - it 'returns correct hash which type equals transformed set_type value' do - expect(serializable_hash[:data][:type]).to eq :FooBar + context 'when sets singular type name' do + let(:type_name) { :film } + + it 'returns correct hash which type equals transformed set_type value' do + expect(serializable_hash[:data][:type]).to eq :Film + end + end + + context 'when sets plural type name' do + let(:type_name) { :films } + + it 'returns correct hash which type equals transformed set_type value' do + expect(serializable_hash[:data][:type]).to eq :Films + end end end end