Sha256: cece7b51444c6064a5800e919b852793f94ba4f6975d30df4935d5a8bd629191

Contents?: true

Size: 1.95 KB

Versions: 12

Compression:

Stored size: 1.95 KB

Contents

# -*- encoding : utf-8 -*-

class Card
  # Model for the card_virtuals table.
  # It provides method to get and store content for virtual cards from
  # the card_virtuals table.
  class Virtual < ApplicationRecord
    def update new_content
      update_attributes! content: new_content
      new_content
    end

    class << self
      def create card, virtual_content=nil
        validate_card card
        virtual_content ||= block_given? ? yield : card.generate_virtual_content
        virtual = new left_id: left_id(card), right_id: right_id(card),
                      content: virtual_content
        virtual.save!
        virtual
      end

      def fetch_content card, &block
        find_content_by_card(card) || create(card, &block).content
      end

      def fetch card, &block
        find_by_card(card) || create(card, &block)
      end

      def refresh card
        virtual = find_by_card(card)
        return create(card) unless virtual
        virtual.update card.generate_virtual_content
      end

      def find_content_by_card card
        where_card(card).pluck(:content).first
      end

      def find_by_card card
        where_card(card).take
      end

      private

      def where_card card
        where left_id: left_id(card), right_id: right_id(card)
      end

      def left_id card
        if card.junction?
          card.left_id || ((l = card.left) && l.id)
        else
          card.id
        end
      end

      def right_id card
        if card.junction?
          card.right_id || ((r = card.right) && r.id)
        else
          -1
        end
      end

      def validate_card card
        reason ||=
          if card.junction?
            "needs left_id" unless left_id(card)
            "needs right_id" unless right_id(card)
          elsif !card.id
            "needs id"
          end
        return unless reason
        raise Card::Error, card.name, "count not cacheable: card #{card.name} #{reason}"
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
card-1.96.7 mod/virtual/lib/card/virtual.rb
card-1.96.6 mod/virtual/lib/card/virtual.rb
card-1.96.5 mod/virtual/lib/card/virtual.rb
card-1.96.4 mod/virtual/lib/card/virtual.rb
card-1.96.3 mod/virtual/lib/card/virtual.rb
card-1.96.2 mod/virtual/lib/card/virtual.rb
card-1.96.1 mod/virtual/lib/card/virtual.rb
card-1.96.0 mod/virtual/lib/card/virtual.rb
card-1.95.3 mod/virtual/lib/card/virtual.rb
card-1.95.2 mod/virtual/lib/card/virtual.rb
card-1.95.1 mod/virtual/lib/card/virtual.rb
card-1.95.0 mod/virtual/lib/card/virtual.rb