module Card::Mark
Card::Mark
provides class methods for Card
to translate all different kind of card identifiers to card objects.
Constants
- CODENAME_MARK_RE
- ID_MARK_RE
Public Instance Methods
cardish(cardish)
click to toggle source
translates marks (and other inputs) into a Card
@param cardish [Card, Card::Name
, String, Symbol, Integer] @return Card
# File lib/card/mark.rb, line 12 def cardish cardish if cardish.is_a? Card cardish else fetch cardish, new: {} end end
id_from_string(mark)
click to toggle source
translates string identifiers into an id:
- string id notation (eg "~75") - string codename notation (eg ":options")
@param mark [String] @return [Integer or nil]
# File lib/card/mark.rb, line 35 def id_from_string mark case mark when ID_MARK_RE then Regexp.last_match[:id].to_i when CODENAME_MARK_RE then Card::Codename.id! Regexp.last_match[:codename] end end
id_or_name(parts)
click to toggle source
translates various inputs into either an id or a name. @param parts [Array<Symbol, Integer, String, Card::Name
, Card>] a mark or mark parts @return [Integer or Card::Name
]
# File lib/card/mark.rb, line 23 def id_or_name parts mark = parts.flatten mark = mark.first if mark.size <= 1 id_from_mark(mark) || Card::Name[mark] end
name_from_id_from_string(id, string)
click to toggle source
# File lib/card/mark.rb, line 42 def name_from_id_from_string id, string fetch_name(id) { bad_mark string } end
Private Instance Methods
bad_mark(string)
click to toggle source
# File lib/card/mark.rb, line 48 def bad_mark string case string when ID_MARK_RE raise Card::Error::NotFound, "id doesn't exist: #{Regexp.last_match[:id]}" when CODENAME_MARK_RE raise Card::Error::CodenameNotFound, "codename doesn't exist: #{Regexp.last_match[:codename]}" else raise Card::Error, "invalid mark: #{string}" end end
id_from_mark(mark)
click to toggle source
# File lib/card/mark.rb, line 60 def id_from_mark mark case mark when Integer then mark when Symbol then Card::Codename.id! mark when String then id_from_string mark when Card then mark.id end end