module Vimo::Expandable

Public Class Methods

vimo_expand(options = {}) click to toggle source
# File lib/vimo/expandable.rb, line 9
def self.vimo_expand(options = {})
  @belongs_to_owner = options[:owner]
  data_method = options[:data_method] || "data"

  self.class_eval do
    has_one :expanded, as: :expandable, class_name: "Vimo::Item", autosave: true
    delegate data_method, "#{data_method}=", to: :expanded

    def vimo_owner
      send(@belongs_to_owner) if @belongs_to_owner
    end

    def entities
      if vimo_owner
        vimo_owner.vimo_entities
      else
        Vimo::Entity
      end
    end

    def expanded
      super || build_expanded(entity: entities.find_or_create_by!(name: "_expand_#{self.class.table_name}", expand_model: self.model_name.name))
    end

    def entity_fields
      @entity_fields ||= expanded.entity.fields
    end
  end
end

Public Instance Methods

entities() click to toggle source
# File lib/vimo/expandable.rb, line 21
def entities
  if vimo_owner
    vimo_owner.vimo_entities
  else
    Vimo::Entity
  end
end
entity_fields() click to toggle source
# File lib/vimo/expandable.rb, line 33
def entity_fields
  @entity_fields ||= expanded.entity.fields
end
expanded() click to toggle source
Calls superclass method
# File lib/vimo/expandable.rb, line 29
def expanded
  super || build_expanded(entity: entities.find_or_create_by!(name: "_expand_#{self.class.table_name}", expand_model: self.model_name.name))
end
vimo_owner() click to toggle source
# File lib/vimo/expandable.rb, line 17
def vimo_owner
  send(@belongs_to_owner) if @belongs_to_owner
end