module NoBrainer::Document::Polymorphic::ClassMethods

Public Instance Methods

all() click to toggle source
Calls superclass method
# File lib/no_brainer/document/polymorphic.rb, line 47
def all
  criteria = super
  criteria = criteria.where(:_type.in => descendants_type_values) unless is_root_class?
  criteria
end
descendants_type_values() click to toggle source
# File lib/no_brainer/document/polymorphic.rb, line 35
def descendants_type_values
  subclass_tree.map(&:type_value)
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/no_brainer/document/polymorphic.rb, line 17
def inherited(subclass)
  subclass.is_polymorphic = true
  super
  subclass.field :_type if is_root_class?
end
is_root_class?() click to toggle source
# File lib/no_brainer/document/polymorphic.rb, line 27
def is_root_class?
  self == root_class
end
model_from_attrs(attrs) click to toggle source
# File lib/no_brainer/document/polymorphic.rb, line 39
def model_from_attrs(attrs)
  class_name = attrs['_type'] || attrs[:_type]
  return root_class unless class_name
  class_name.to_s.constantize.tap { |cls| raise NameError unless cls <= self }
rescue NameError
  raise NoBrainer::Error::InvalidPolymorphicType, "Invalid polymorphic class: `#{class_name}' is not a `#{self}'"
end
subclass_tree() click to toggle source
# File lib/no_brainer/document/polymorphic.rb, line 31
def subclass_tree
  [self] + self.descendants
end
type_value() click to toggle source
# File lib/no_brainer/document/polymorphic.rb, line 23
def type_value
  name
end