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