Class: MLBStatsAPI::LiveFeed

Inherits:
Base
  • Object
show all
Defined in:
lib/mlb_stats_api/live_feed.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#data

Instance Method Summary collapse

Methods inherited from Base

#[], #dig

Constructor Details

#initialize(api, data) ⇒ LiveFeed

Returns a new instance of LiveFeed.



7
8
9
10
11
12
13
# File 'lib/mlb_stats_api/live_feed.rb', line 7

def initialize(api, data)
  @api = api
  @data = data

  # If we need to nuke and start over, keep this piece
  @id = data['gamePk']
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



5
6
7
# File 'lib/mlb_stats_api/live_feed.rb', line 5

def id
  @id
end

Instance Method Details

#boxscoreObject



15
16
17
# File 'lib/mlb_stats_api/live_feed.rb', line 15

def boxscore
  @data['liveData']['boxscore']
end

#decisionsObject



19
20
21
# File 'lib/mlb_stats_api/live_feed.rb', line 19

def decisions
  @data['liveData']['decisions']
end

#game_dataObject



35
36
37
# File 'lib/mlb_stats_api/live_feed.rb', line 35

def game_data
  @data['gameData']
end

#leadersObject



23
24
25
# File 'lib/mlb_stats_api/live_feed.rb', line 23

def leaders
  @data['liveData']['leaders']
end

#linescoreObject



27
28
29
# File 'lib/mlb_stats_api/live_feed.rb', line 27

def linescore
  @data['liveData']['linescore']
end

#live_dataObject



39
40
41
# File 'lib/mlb_stats_api/live_feed.rb', line 39

def live_data
  @data['liveData']
end

#metadataObject



43
44
45
# File 'lib/mlb_stats_api/live_feed.rb', line 43

def 
  @data['metaData']
end

#playsObject



31
32
33
# File 'lib/mlb_stats_api/live_feed.rb', line 31

def plays
  @data['liveData']['plays']
end

#process_diffs(diffs) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/mlb_stats_api/live_feed.rb', line 77

def process_diffs(diffs)
  diffs.each do |diff_set|
    Hana::Patch.new(diff_set['diff']).apply(@data)
  end

  @api.logger&.info 'Successfully processed live feed diff'

  true
rescue Hana::Patch::Exception
  @api.logger&.info 'Failed to process live feed diff; nuking'

  # Nuke it!
  @data = nil

  reload!

  false
end

#reload!Object



51
52
53
54
55
56
57
# File 'lib/mlb_stats_api/live_feed.rb', line 51

def reload!
  @data = @api.get("/game/#{@id}/feed/live", version: '1.1')

  true
rescue Net::OpenTimeout
  false
end

#timestampsObject



47
48
49
# File 'lib/mlb_stats_api/live_feed.rb', line 47

def timestamps
  @api.live_feed_timestamps(@id)
end

#update!Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mlb_stats_api/live_feed.rb', line 59

def update!
  return reload! unless @data

  diffs = @api.live_feed_diff(
    @data['gamePk'],
    timecode: @data['metaData']['timeStamp']
  )

  return process_diffs(diffs) if diffs.is_a?(Array)

  # If the diff is too large or too old, a new feed is returned
  @data = diffs if diffs.is_a?(Hash)

  true
rescue Net::OpenTimeout
  false
end