module TriviaCrack::Parsers::GameParser

Public Class Methods

parse(raw_data) click to toggle source

Internal: Parses data returned from the Trivia Crack API to create a TriviaCrack::Game object.

raw_data - A hash of the raw data returned by the Trivia Crack API.

Examples

raw_data = get_raw_data_from_API
...
game = TriviaCrack::Parsers::GameParser.parse raw_data

Returns a TriviaCrack::Game.

# File lib/triviacrack/parsers/game_parser.rb, line 25
def self.parse(raw_data)
  questions = []
  if raw_data["spins_data"]
    raw_data["spins_data"]["spins"][0]["questions"].each do |q_data|
      q_data = q_data["question"]
      q_data["type"] = raw_data["spins_data"]["spins"][0]["type"]
      question = TriviaCrack::Parsers::QuestionParser.parse q_data
      questions << question
    end
    if raw_data["spins_data"]["spins"][0]["type"] == "DUEL"
      q_data = raw_data["spins_data"]["spins"][0]["tie_break_question"]
      q_data["type"] = raw_data["spins_data"]["spins"][0]["type"]
      question = TriviaCrack::Parsers::QuestionParser.parse q_data
      questions << question
    end
  end

  if raw_data["available_crowns"]
    crowns = raw_data["available_crowns"].map { |c| c.downcase.to_sym }
  else
    crowns = []
  end

  me = raw_data["my_player_number"] == 1 ? "player_one" : "player_two"
  them = raw_data["my_player_number"] == 1 ? "player_two" : "player_one"

  my_statistics = raw_data["statistics"]["#{me}_statistics"]
  my_statistics["crowns"] = raw_data[me]["crowns"]

  opponent_statistics = raw_data["statistics"]["#{them}_statistics"]
  opponent_statistics["crowns"] = raw_data[them]["crowns"]

  TriviaCrack::Game.new(
    id: raw_data["id"],
    opponent: UserParser.parse(raw_data["opponent"]),
    game_status: raw_data["game_status"].downcase.to_sym,
    language: raw_data["language"].downcase.to_sym,
    created: TimeParser.parse(raw_data["created"]),
    last_turn: TimeParser.parse(raw_data["last_turn"]),
    type: raw_data["type"].downcase.to_sym,
    expiration_date: TimeParser.parse(raw_data["expiration_date"]),
    my_turn: raw_data["my_turn"],
    round_number: raw_data["round_number"],
    is_random: raw_data["is_random"],
    unread_messages: raw_data["unread_messages"],
    status_version: raw_data["status_version"],
    available_crowns: crowns,
    questions: questions,
    my_statistics: GameStatisticsParser.parse(my_statistics),
    opponent_statistics: GameStatisticsParser.parse(opponent_statistics)
  )
end