Skip to content

Commit 3c309f3

Browse files
committed
fixup! Allow resource level links to be defined
1 parent c8b0816 commit 3c309f3

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

lib/graphiti/serializer.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def self.inherited(klass)
2525
def as_jsonapi(*)
2626
super.tap do |hash|
2727
strip_relationships!(hash) if strip_relationships?
28-
hash[:links] = @resource.links(@object) if @resource.links?
28+
add_links!(hash)
2929
end
3030
end
3131

@@ -50,6 +50,12 @@ def respond_to_missing?(method_name, include_private = true)
5050

5151
private
5252

53+
def add_links!(hash)
54+
return unless @resource.respond_to?(:links?)
55+
56+
hash[:links] = @resource.links(@object).compact if @resource.links?
57+
end
58+
5359
def strip_relationships!(hash)
5460
hash[:relationships]&.select! do |name, payload|
5561
payload.key?(:data)

spec/serialization_spec.rb

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ def admin?(object)
860860
end
861861
end
862862

863-
describe "links" do
863+
describe "relationship links" do
864864
let!(:employee) { PORO::Employee.create }
865865

866866
def positions
@@ -1377,4 +1377,38 @@ def classification
13771377
end
13781378
end
13791379
end
1380+
1381+
describe "resource-level links" do
1382+
let!(:employee) { PORO::Employee.create(id: 123) }
1383+
context "by default" do
1384+
specify "are not emitted" do
1385+
render
1386+
1387+
expect(json["data"][0]).not_to have_key("links")
1388+
end
1389+
end
1390+
1391+
context "when specified" do
1392+
before do
1393+
resource.link :test_link do |model| "#{self.endpoint[:url]}/#{model.id}" end
1394+
end
1395+
1396+
it "links correctly" do
1397+
render
1398+
expect(json["data"][0]["links"]["test_link"])
1399+
.to eq("/poro/employees/123")
1400+
end
1401+
end
1402+
1403+
context "nil links" do
1404+
before do
1405+
resource.link :test_link do |model| nil end
1406+
end
1407+
1408+
specify "are omitted" do
1409+
render
1410+
expect(json["data"][0]["links"]).not_to have_key("test_link")
1411+
end
1412+
end
1413+
end
13801414
end

0 commit comments

Comments
 (0)