Module: Graphiti::Resource::Polymorphism::ClassMethods

Defined in:
lib/graphiti/resource/polymorphism.rb

Instance Method Summary collapse

Instance Method Details

#childrenObject



54
55
56
57
58
# File 'lib/graphiti/resource/polymorphism.rb', line 54

def children
  @children ||= polymorphic.map { |klass|
    klass.is_a?(String) ? klass.safe_constantize : klass
  }
end

#inherited(klass) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/graphiti/resource/polymorphism.rb', line 36

def inherited(klass)
  klass.type = nil
  klass.model = klass.infer_model
  klass.endpoint = klass.infer_endpoint
  klass.polymorphic_child = true
  super
end

#resource_for_model(model) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/graphiti/resource/polymorphism.rb', line 69

def resource_for_model(model)
  resource = children.find { |c| model.class == c.model } ||
    children.find { |c| model.is_a?(c.model) }
  if resource.nil?
    raise Errors::PolymorphicResourceChildNotFound.new(self, model: model)
  else
    resource
  end
end

#resource_for_type(type) ⇒ Object



60
61
62
63
64
65
66
67
# File 'lib/graphiti/resource/polymorphism.rb', line 60

def resource_for_type(type)
  resource = children.find { |c| c.type.to_s == type.to_s }
  if resource.nil?
    raise Errors::PolymorphicResourceChildNotFound.new(self, type: type)
  else
    resource
  end
end

#sideload(name) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/graphiti/resource/polymorphism.rb', line 44

def sideload(name)
  sl = super
  if !polymorphic_child? && sl.nil?
    children.each do |c|
      break if (sl = c.sideloads[name])
    end
  end
  sl
end