Module: TriviaCrack::Parsers::GameParser

Defined in:
lib/triviacrack/parsers/game_parser.rb

Class Method Summary collapse

Class Method Details

.parse(raw_data) ⇒ Object

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.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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
  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