Sha256: 56a5d22d34752dbca025ae0ceb48d7e468b5f92b33c2c254f9fa093a431ac7b3

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

module Vimo
  module Expandable
    extend ActiveSupport::Concern

    included do

      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
    end
  end
end

ActiveRecord::Base.send :include, Vimo::Expandable

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vimo-0.1.3 lib/vimo/expandable.rb