Sha256: 54a63e9c2ded588169f9489e5269cbb1c1f7b099780a228f5c80ba7ac7d21c45
Contents?: true
Size: 1.72 KB
Versions: 1
Compression:
Stored size: 1.72 KB
Contents
# For "Rails STI" behavior # CreditCard.all # => [<Visa>, <Mastercard>, etc] module JsonapiCompliable class Resource module Polymorphism def self.prepended(klass) klass.extend ClassMethods end def serializer_for(model) if polymorphic_child? serializer else child = self.class.resource_for_model(model) child.serializer end end def associate_all(parent, children, association_name, type) children.each do |c| associate(parent, c, association_name, type) end end def associate(parent, child, association_name, type) child_resource = self.class.resource_for_model(parent) if child_resource.sideloads[association_name] child_resource.adapter .associate(parent, child, association_name, type) end end module ClassMethods def inherited(klass) klass.type = nil klass.model = klass.infer_model klass.polymorphic_child = true super end def sideload(name) sl = super if !polymorphic_child? && sl.nil? children.each do |c| break if sl = c.sideloads[name] end end sl end def children @children ||= polymorphic.map do |klass| klass.is_a?(String) ? klass.safe_constantize : klass end end def resource_for_model(model) resource = children.find { |c| model.is_a?(c.model) } if resource.nil? raise Errors::PolymorphicChildNotFound.new(self, model) else resource end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jsonapi_compliable-1.0.alpha.2 | lib/jsonapi_compliable/resource/polymorphism.rb |