Skip to content

Commit

Permalink
Allow fieldsets to specify no attributes/relationships
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Eddy authored and kpheasey committed Oct 4, 2019
1 parent 1a407c0 commit 21ae4aa
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/fast_jsonapi/serialization_core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ def links_hash(record, params = {})
def attributes_hash(record, fieldset = nil, params = {})
attributes = attributes_to_serialize
attributes = attributes.slice(*fieldset) if fieldset.present?
attributes = {} if fieldset == []

attributes.each_with_object({}) do |(_k, attribute), hash|
attribute.serialize(record, params, hash)
end
Expand All @@ -52,6 +54,7 @@ def attributes_hash(record, fieldset = nil, params = {})
def relationships_hash(record, relationships = nil, fieldset = nil, params = {})
relationships = relationships_to_serialize if relationships.nil?
relationships = relationships.slice(*fieldset) if fieldset.present?
relationships = {} if fieldset == []

relationships.each_with_object({}) do |(_k, relationship), hash|
relationship.serialize(record, params, hash)
Expand Down
33 changes: 33 additions & 0 deletions spec/lib/object_serializer_fields_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@
expect(hash[:data][:relationships].keys.sort).to eq %i[actors advertising_campaign]
end

it 'returns no fields when none are specified' do
hash = MovieSerializer.new(movie, fields: { movie: [] }).serializable_hash

expect(hash[:data][:attributes].keys).to eq []
end

it 'returns no relationships when none are specified' do
hash = MovieSerializer.new(movie, fields: { movie: [] }).serializable_hash

expect(hash[:data][:relationships].keys).to eq []
end

it 'only returns specified fields for included relationships' do
hash = MovieSerializer.new(movie, fields: fields, include: %i[actors]).serializable_hash

Expand All @@ -45,4 +57,25 @@

expect(hash[:included][3][:relationships].keys.sort).to eq %i[movie]
end

context 'with no included fields specified' do
let(:fields) do
{
movie: %i[name actors advertising_campaign],
actor: []
}
end

it 'returns no fields for included relationships when none are specified' do
hash = MovieSerializer.new(movie, fields: fields, include: %i[actors advertising_campaign]).serializable_hash

expect(hash[:included][2][:attributes].keys).to eq []
end

it 'returns no relationships when none are specified' do
hash = MovieSerializer.new(movie, fields: fields, include: %i[actors advertising_campaign]).serializable_hash

expect(hash[:included][2][:relationships].keys).to eq []
end
end
end

0 comments on commit 21ae4aa

Please sign in to comment.