Skip to content

Commit b090391

Browse files
llenodoshishirmk
authored andcommitted
Fix serialization for nested nil includes
1 parent 077817e commit b090391

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

lib/fast_jsonapi/serialization_core.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ def get_included_records(record, includes_list, known_included_objects, params =
140140
relationship_type = @relationships_to_serialize[item][:relationship_type]
141141

142142
included_objects = fetch_associated_object(record, @relationships_to_serialize[item], params)
143-
included_objects = [included_objects] unless relationship_type == :has_many
144143
next if included_objects.blank?
144+
included_objects = [included_objects] unless relationship_type == :has_many
145145

146146
included_objects.each do |inc_obj|
147147
if remaining_items(items)

spec/lib/object_serializer_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@
181181
expect(states_serialized).to include(state.id)
182182
end
183183
end
184+
184185
it 'has_many => has_one returns correct nested includes when serializable_hash is called' do
185186
options = {}
186187
options[:include] = [:movies, :'movies.advertising_campaign']
@@ -199,6 +200,27 @@
199200
expect(advertising_campaigns_serialized).to include(advertising_campaign.id)
200201
end
201202
end
203+
204+
it 'belongs_to: returns correct nested includes when nested attributes are nil when serializable_hash is called' do
205+
class Movie
206+
def advertising_campaign
207+
nil
208+
end
209+
end
210+
211+
options = {}
212+
options[:include] = [:movies, :'movies.advertising_campaign']
213+
214+
serializable_hash = MovieTypeSerializer.new([movie_type], options).serializable_hash
215+
216+
movies_serialized = serializable_hash[:included].find_all { |included| included[:type] == :movie }.map { |included| included[:id].to_i }
217+
218+
movies = movie_type.movies
219+
movies.each do |movie|
220+
expect(movies_serialized).to include(movie.id)
221+
end
222+
end
223+
202224
it 'polymorphic throws an error that polymorphic is not supported' do
203225
options = {}
204226
options[:include] = [:groupees]

0 commit comments

Comments
 (0)