lib/card/lexicon.rb in card-1.103.2 vs lib/card/lexicon.rb in card-1.103.3
- old
+ new
@@ -26,19 +26,13 @@
def cache
Card::Cache[Lexicon]
end
- def add card
- lex = card.lex
- cache.write card.id.to_s, lex
- cache.write cache_key(lex), card.id
- end
-
def update card
add card
- cache.delete cache_key(card.lex_before_act)
+ expire_lex card.lex_before_act
end
# def delete card
# cache.delete card.id.to_s
# cache.delete cache_key(card.lex_before_act)
@@ -48,10 +42,39 @@
return lex unless lex.is_a? Array
lex.map { |side_id| name side_id or return }.join(Card::Name.joint).to_name
end
+ # this is to address problems whereby renaming errors leave the lexicon broken.
+ # NEEDS TESTING
+ def rescuing
+ @act_lexes = []
+ @act_ids = []
+ yield
+ rescue StandardError => e
+ @act_lexes.each { |lex| expire_lex lex }
+ @act_ids.each { |id| expire_id id }
+ @act_lexes = @act_ids = nil
+ raise e
+ end
+
private
+
+ def add card
+ lex = card.lex
+ @act_lexes << lex
+ @act_ids << card.id
+ cache.write card.id.to_s, lex
+ cache.write cache_key(lex), card.id
+ end
+
+ def expire_lex lex
+ cache.delete cache_key(lex)
+ end
+
+ def expire_id id
+ cache.delete id.to_s
+ end
def id_to_lex id
cache.fetch id.to_s do
result = Card.where(id: id).pluck(:name, :left_id, :right_id).first
return unless result