Module: Card::Lexicon
- Defined in:
- card/lib/card/lexicon.rb
Overview
Translates names to ids and vice versa via a cached “lex” representation: name for simple cards, [left_id, right_id] for compound cards.
Note, unlike Card::Fetch, Card::Lexicon: does NOT return local name changes until stored
Class Method Summary collapse
-
.cache ⇒ Object
-
.cache_key(lex) ⇒ Object
-
.delete(card) ⇒ Object
-
.id(name) ⇒ Integer
param name [String].
-
.lex_query(lex) ⇒ Object
-
.lex_to_name(lex) ⇒ Object
-
.name(id) ⇒ String
param id [Integer].
-
.rescuing ⇒ Object
this is to address problems whereby renaming errors leave the lexicon broken.
-
.update(card) ⇒ Object
-
.write(id, name, lex) ⇒ Object
-
.write_to_temp_cache(id, name, lex) ⇒ Object
Class Method Details
.cache ⇒ Object
26 27 28 |
# File 'card/lib/card/lexicon.rb', line 26 def cache Card::Cache[Lexicon] end |
.cache_key(lex) ⇒ Object
46 47 48 |
# File 'card/lib/card/lexicon.rb', line 46 def cache_key lex "L-#{lex.is_a?(Array) ? lex.join('-') : lex.to_name.key}" end |
.delete(card) ⇒ Object
35 36 37 38 |
# File 'card/lib/card/lexicon.rb', line 35 def delete card cache.delete card.id.to_s cache.delete cache_key(card.lex_before_act) end |
.id(name) ⇒ Integer
param name [String]
20 21 22 23 24 |
# File 'card/lib/card/lexicon.rb', line 20 def id name return unless name.present? (lex = name_to_lex name.to_name) && lex_to_id(lex) end |
.lex_query(lex) ⇒ Object
50 51 52 53 54 55 56 |
# File 'card/lib/card/lexicon.rb', line 50 def lex_query lex if lex.is_a?(Array) { left_id: lex.first, right_id: lex.last } else { key: lex.to_name.key } end end |
.lex_to_name(lex) ⇒ Object
40 41 42 43 44 |
# File 'card/lib/card/lexicon.rb', line 40 def lex_to_name lex return lex unless lex.is_a? Array lex.map { |side_id| name side_id or return }.join(Card::Name.joint).to_name end |
.name(id) ⇒ String
param id [Integer]
11 12 13 14 15 16 |
# File 'card/lib/card/lexicon.rb', line 11 def name id return unless id.present? name = (lex = id_to_lex id) && lex_to_name(lex) (name || "").to_name end |
.rescuing ⇒ Object
this is to address problems whereby renaming errors leave the lexicon broken. NEEDS TESTING
60 61 62 63 64 65 66 67 68 69 |
# File 'card/lib/card/lexicon.rb', line 60 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 |
.update(card) ⇒ Object
30 31 32 33 |
# File 'card/lib/card/lexicon.rb', line 30 def update card add card expire_lex card.lex_before_act end |
.write(id, name, lex) ⇒ Object
76 77 78 79 |
# File 'card/lib/card/lexicon.rb', line 76 def write id, name, lex cache.write id.to_s, name cache.write cache_key(lex), id end |
.write_to_temp_cache(id, name, lex) ⇒ Object
71 72 73 74 |
# File 'card/lib/card/lexicon.rb', line 71 def write_to_temp_cache id, name, lex cache.temp.write id.to_s, name if id.present? cache.temp.write cache_key(lex), id if lex end |