class Card::Virtual
Model for the card_virtuals table. It provides method to get and store content for virtual cards from the card_virtuals table.
Public Class Methods
create(card, virtual_content=nil) { |: generate_virtual_content| ... }
click to toggle source
# File lib/card/virtual.rb, line 13 def create card, virtual_content=nil validate_card card virtual_content ||= block_given? ? yield : card.generate_virtual_content create! left_id: left_id(card), right_id: right_id(card), left_key: card.name.left_key, content: virtual_content end
create_or_update(card, virtual_content)
click to toggle source
# File lib/card/virtual.rb, line 22 def create_or_update card, virtual_content if (virtual_card = find_by_card(card)) virtual_card.update virtual_content else create card, virtual_content end end
fetch(card, &block)
click to toggle source
# File lib/card/virtual.rb, line 34 def fetch card, &block find_by_card(card) || create(card, &block) end
fetch_content(card, &block)
click to toggle source
# File lib/card/virtual.rb, line 30 def fetch_content card, &block find_content_by_card(card) || create(card, &block).content end
find_by_card(card)
click to toggle source
# File lib/card/virtual.rb, line 49 def find_by_card card where_card(card).take end
find_content_by_card(card)
click to toggle source
# File lib/card/virtual.rb, line 45 def find_content_by_card card where_card(card)&.pluck(:content)&.first end
refresh(card)
click to toggle source
# File lib/card/virtual.rb, line 38 def refresh card virtual = find_by_card(card) return create(card) unless virtual virtual.update card.generate_virtual_content end
Private Class Methods
left_id(card)
click to toggle source
# File lib/card/virtual.rb, line 65 def left_id card if card.compound? card.left_id&.positive? ? card.left_id : card.left&.id else card.id end end
right_id(card)
click to toggle source
# File lib/card/virtual.rb, line 73 def right_id card if card.compound? card.right_id&.positive? ? card.right_id : card.right&.id else -2 end end
validate_card(card)
click to toggle source
# File lib/card/virtual.rb, line 81 def validate_card card reason ||= if card.compound? "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
where_card(card)
click to toggle source
# File lib/card/virtual.rb, line 55 def where_card card query = { right_id: right_id(card) } if (lid = left_id(card)) query[:left_id] = lid else query[:left_key] = card.name.left_key end where query end
Public Instance Methods
update(new_content)
click to toggle source
# File lib/card/virtual.rb, line 7 def update new_content update! content: new_content new_content end