Skip to content

Commit dfcf9a2

Browse files
authored
Merge pull request #210 from nibynic/master
Fixed selecting serializer for deeply inherited resources
2 parents 8ce528c + 2c069b3 commit dfcf9a2

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

lib/graphiti/resource/polymorphism.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ def resource_for_type(type)
6767
end
6868

6969
def resource_for_model(model)
70-
resource = children.find { |c| model.is_a?(c.model) }
70+
resource = children.find { |c| model.class == c.model } ||
71+
children.find { |c| model.is_a?(c.model) }
7172
if resource.nil?
7273
raise Errors::PolymorphicResourceChildNotFound.new(self, model: model)
7374
else

spec/fixtures/poro.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def klasses
3636
teams: PORO::Team,
3737
paypals: PORO::Paypal,
3838
visas: PORO::Visa,
39+
gold_visas: PORO::GoldVisa,
3940
mastercards: PORO::Mastercard,
4041
visa_rewards: PORO::VisaReward,
4142
books: PORO::Book,
@@ -241,6 +242,9 @@ def initialize(*)
241242
end
242243
end
243244

245+
class GoldVisa < Visa
246+
end
247+
244248
class Mastercard < CreditCard
245249
end
246250

@@ -397,7 +401,7 @@ class BioResource < ApplicationResource
397401
end
398402

399403
class CreditCardResource < ApplicationResource
400-
self.polymorphic = %w[PORO::VisaResource PORO::MastercardResource]
404+
self.polymorphic = %w[PORO::VisaResource PORO::GoldVisaResource PORO::MastercardResource]
401405

402406
def base_scope
403407
{type: [:visas, :mastercards]}
@@ -422,6 +426,9 @@ def base_scope
422426
has_many :visa_rewards
423427
end
424428

429+
class GoldVisaResource < VisaResource
430+
end
431+
425432
class MastercardResource < CreditCardResource
426433
attribute :description, :string do
427434
"mastercard description"

spec/polymorphic_resource_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
it "returns the serializer of the child resource associated to the given model" do
1515
expect(instance.serializer_for(PORO::Visa.new))
1616
.to eq(PORO::VisaResource.serializer)
17+
expect(instance.serializer_for(PORO::GoldVisa.new))
18+
.to eq(PORO::GoldVisaResource.serializer)
1719
end
1820

1921
context "when a polymorphic child" do

spec/schema_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ def self.name
703703
it "generates a polymorphic schema for the resource" do
704704
expect(schema[:resources][0][:polymorphic]).to eq(true)
705705
expect(schema[:resources][0][:children])
706-
.to eq(["PORO::VisaResource", "PORO::MastercardResource"])
706+
.to eq(["PORO::VisaResource", "PORO::GoldVisaResource", "PORO::MastercardResource"])
707707
end
708708
end
709709

0 commit comments

Comments
 (0)