Class: Sportradar::Api::Basketball::Nba

Inherits:
Data
  • Object
show all
Defined in:
lib/sportradar/api/basketball/nba.rb,
lib/sportradar/api/basketball/nba/api.rb,
lib/sportradar/api/basketball/nba/game.rb,
lib/sportradar/api/basketball/nba/team.rb,
lib/sportradar/api/basketball/nba/player.rb,
lib/sportradar/api/basketball/nba/season.rb,
lib/sportradar/api/basketball/nba/series.rb,
lib/sportradar/api/basketball/nba/quarter.rb,
lib/sportradar/api/basketball/nba/division.rb,
lib/sportradar/api/basketball/nba/schedule.rb,
lib/sportradar/api/basketball/nba/conference.rb

Defined Under Namespace

Classes: Api, Conference, Division, Game, Player, Quarter, Schedule, Season, Series, Team

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Data

#attributes, #create_data, #parse_into_array, #parse_into_array_with_options, #parse_out_hashes, #structure_links, #update_data

Constructor Details

#initialize(data = {}, **opts) ⇒ Nba

Returns a new instance of Nba.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/sportradar/api/basketball/nba.rb', line 10

def initialize(data = {}, **opts)
  @response = data
  @api      = opts[:api]
  @id       = data['id']
  @season   = opts[:year]
  @type     = opts[:type]

  @conferences_hash   = {}
  @weeks_hash         = {}
  @games_hash         = {}
  @series_hash        = {}
  @teams_hash         = {}

  update(data, **opts)
end

Instance Attribute Details

#aliasObject

Returns the value of attribute alias.



5
6
7
# File 'lib/sportradar/api/basketball/nba.rb', line 5

def alias
  @alias
end

#idObject

Returns the value of attribute id.



5
6
7
# File 'lib/sportradar/api/basketball/nba.rb', line 5

def id
  @id
end

#nameObject

Returns the value of attribute name.



5
6
7
# File 'lib/sportradar/api/basketball/nba.rb', line 5

def name
  @name
end

#responseObject

Returns the value of attribute response.



5
6
7
# File 'lib/sportradar/api/basketball/nba.rb', line 5

def response
  @response
end

Instance Method Details

#all_attributesObject



6
7
8
# File 'lib/sportradar/api/basketball/nba.rb', line 6

def all_attributes
  [:name, :alias, :conferences, :divisions, :teams]
end

#apiObject



102
103
104
# File 'lib/sportradar/api/basketball/nba.rb', line 102

def api
  @api ||= Sportradar::Api::Basketball::Nba::Api.new
end

#conferencesObject



49
50
51
# File 'lib/sportradar/api/basketball/nba.rb', line 49

def conferences
  @conferences_hash.values
end

#default_dateObject



109
110
111
# File 'lib/sportradar/api/basketball/nba.rb', line 109

def default_date
  Date.today
end

#default_seasonObject



112
113
114
# File 'lib/sportradar/api/basketball/nba.rb', line 112

def default_season
  'reg'
end

#default_yearObject



106
107
108
# File 'lib/sportradar/api/basketball/nba.rb', line 106

def default_year
  (Date.today - 210).year
end

#divisionsObject



52
53
54
# File 'lib/sportradar/api/basketball/nba.rb', line 52

def divisions
  conferences.flat_map(&:divisions)
end

#gamesObject



76
77
78
# File 'lib/sportradar/api/basketball/nba.rb', line 76

def games
  @games_hash.values
end

#get_daily_schedule(date = default_date) ⇒ Object



153
154
155
156
# File 'lib/sportradar/api/basketball/nba.rb', line 153

def get_daily_schedule(date = default_date)
  data = api.get_data(path_daily_schedule(date)).to_h
  ingest_daily_schedule(data)
end

#get_hierarchyObject



171
172
173
174
# File 'lib/sportradar/api/basketball/nba.rb', line 171

def get_hierarchy
  data = api.get_data(path_hierarchy).to_h
  ingest_hierarchy(data)
end

#get_scheduleObject



144
145
146
147
# File 'lib/sportradar/api/basketball/nba.rb', line 144

def get_schedule
  data = api.get_data(path_schedule).to_h
  ingest_schedule(data)
end

#get_series_scheduleObject



162
163
164
165
# File 'lib/sportradar/api/basketball/nba.rb', line 162

def get_series_schedule
  data = api.get_data(path_series_schedule).to_h
  ingest_series_schedule(data)
end

#get_standingsObject



180
181
182
183
# File 'lib/sportradar/api/basketball/nba.rb', line 180

def get_standings
  data = api.get_data(path_standings).to_h
  ingest_standings(data)
end

#hierarchyObject



66
67
68
69
# File 'lib/sportradar/api/basketball/nba.rb', line 66

def hierarchy
  get_hierarchy if divisions.empty?
  self
end

#ingest_daily_schedule(data) ⇒ Object



157
158
159
160
# File 'lib/sportradar/api/basketball/nba.rb', line 157

def ingest_daily_schedule(data)
  update(data, source: :daily_schedule)
  data
end

#ingest_hierarchy(data) ⇒ Object



175
176
177
178
# File 'lib/sportradar/api/basketball/nba.rb', line 175

def ingest_hierarchy(data)
  update(data, source: :hierarchy)
  data
end

#ingest_schedule(data) ⇒ Object



148
149
150
151
# File 'lib/sportradar/api/basketball/nba.rb', line 148

def ingest_schedule(data)
  update(data, source: :schedule)
  data
end

#ingest_series_schedule(data) ⇒ Object



166
167
168
169
# File 'lib/sportradar/api/basketball/nba.rb', line 166

def ingest_series_schedule(data)
  update(data, source: :series_schedule)
  data
end

#ingest_standings(data) ⇒ Object



184
185
186
187
# File 'lib/sportradar/api/basketball/nba.rb', line 184

def ingest_standings(data)
  update(data, source: :standings)
  data
end

#nba_seasonObject Also known as: season



119
120
121
# File 'lib/sportradar/api/basketball/nba.rb', line 119

def nba_season
  @type || default_season
end

#path_daily_schedule(date = default_date) ⇒ Object



128
129
130
# File 'lib/sportradar/api/basketball/nba.rb', line 128

def path_daily_schedule(date = default_date)
  "games/#{ date.year }/#{ date.month }/#{ date.day }/schedule"
end

#path_hierarchyObject



136
137
138
# File 'lib/sportradar/api/basketball/nba.rb', line 136

def path_hierarchy
  "league/hierarchy"
end

#path_scheduleObject



124
125
126
# File 'lib/sportradar/api/basketball/nba.rb', line 124

def path_schedule
  "games/#{season_year}/#{nba_season}/schedule"
end

#path_series_scheduleObject



132
133
134
# File 'lib/sportradar/api/basketball/nba.rb', line 132

def path_series_schedule
  "series/#{season_year}/pst/schedule"
end

#path_standingsObject



140
141
142
# File 'lib/sportradar/api/basketball/nba.rb', line 140

def path_standings
  "seasontd/#{season_year}/#{nba_season}/standings"
end

#scheduleObject



56
57
58
59
# File 'lib/sportradar/api/basketball/nba.rb', line 56

def schedule
  get_schedule if games.empty?
  self
end

#season_yearObject Also known as: year



115
116
117
# File 'lib/sportradar/api/basketball/nba.rb', line 115

def season_year
  @season || default_year
end

#seriesObject



80
81
82
# File 'lib/sportradar/api/basketball/nba.rb', line 80

def series
  @series_hash.values
end

#series_scheduleObject



71
72
73
74
# File 'lib/sportradar/api/basketball/nba.rb', line 71

def series_schedule
  get_series_schedule if series.empty?
  self
end

#standingsObject



61
62
63
64
# File 'lib/sportradar/api/basketball/nba.rb', line 61

def standings
  get_standings if divisions.empty? || teams.first&.record.nil?
  self
end

#team(team_id) ⇒ Object



98
99
100
# File 'lib/sportradar/api/basketball/nba.rb', line 98

def team(team_id)
  teams.detect { |team| team.id == team_id }
end

#teamsObject



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/sportradar/api/basketball/nba.rb', line 84

def teams
  teams = divisions.flat_map(&:teams)
  if teams.empty?
    if @teams_hash.empty?
      get_hierarchy
      divisions.flat_map(&:teams)
    else
      @teams_hash.values
    end
  else
    teams
  end
end

#update(data, **opts) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/sportradar/api/basketball/nba.rb', line 26

def update(data, **opts)
  @id     = data['id'] if data['id']

  if data['league']
    @id    = data.dig('league', 'id')
    @name  = data.dig('league', 'name')
    @alias = data.dig('league', 'alias')
  end

  if data['season'].is_a?(Hash)
    @season   = data.dig('season', 'year')
    @type     = data.dig('season', 'type')
  else
    @season = data['season']  if data['season']
    @type   = data['type']    if data['type']
  end

  create_data(@teams_hash,        data['teams'],        klass: Team,        api: api) if data['teams']
  create_data(@conferences_hash,  data['conferences'],  klass: Conference,  api: api) if data['conferences']
  create_data(@games_hash,        data['games'],        klass: Game,        api: api) if data['games']
  create_data(@series_hash,       data['series'],       klass: Series,      api: api) if data['series']
end