lib/sportradar/api/baseball/team.rb
module Sportradar
module Api
module Baseball
class Team < Data
attr_accessor :response, :id, :market, :name, :alias, :full_name, :venue, :records, :player_stats, :team_stats
def initialize(data, **opts)
@response = data # comment this out when done developing
@api = opts[:api]
@id = data['id']
@games_hash = {}
@players_hash = {}
@player_stats = {}
@records = {}
@stats = nil
@runs = nil
update(data, **opts)
end
def update(data, **opts)
handle_names(data)
@venue = Venue.new(data['venue']) if data['venue']
@alias = data['abbr'] if data['abbr']
@runs = data['runs'].to_i if data['runs']
# # @home = data['home'] == 'true' if data['home']
# # @away = data['away'] == 'true' if data['away']
# # @scoring = data.dig('scoring', 'quarter') if data.dig('scoring', 'quarter')
parse_records(data) if data['win']
parse_players(data.dig('players'), opts[:game]) if data.dig('players')
if opts[:game]
# opts[:game].update_from_team(id, "runs"=>6)
# opts[:game].update_from_team(id, "hits"=>11)
# opts[:game].update_from_team(id, "errors"=>1)
# opts[:game].update_from_team(id, "win"=>11)
# opts[:game].update_from_team(id, "loss"=>16)
# opts[:game].update_from_team(id, "probable_pitcher"=>{"jersey_number"=>"45", "id"=>"c1f19b5a-9dee-4053-9cad-ee4196f921e1", "win"=>2, "loss"=>3, "era"=>5.0})
# opts[:game].update_from_team(id, "starting_pitcher"=>{"last_name"=>"Cotton", "first_name"=>"Jharel", "preferred_name"=>"Jharel", "jersey_number"=>"45"})
# opts[:game].update_from_team(id, "current_pitcher"=>{"last_name"=>"Dull", "first_name"=>"Ryan", "preferred_name"=>"Ryan", "jersey_number"=>"66"})
# add_game(opts[:game])
# opts[:game].update_score(id => @runs) if @runs
opts[:game].update_stats(self, data['statistics']) if data['statistics']
end
end
def handle_names(data)
# need to do some more work here
@name = data['name'] if data['name']
if data['name'] && data['market']
@market = data['market']
@full_name = [@market, data['name']].join(' ')
elsif data['name'] && !data.key?('market')
@full_name = data['name']
end
end
def record(type = 'overall')
@records[type]
end
def games
@games_hash.values
end
def add_game(game)
@games_hash[game.id] = game.id if game
end
def players
get_roster if @players_hash.empty?
@players_hash.values
end
alias :roster :players
# parsing response data
def parse_players(data, game)
create_data(@players_hash, data, klass: Player, api: api, team: self, game: game)
end
def update_player_stats(player, stats, game = nil)
game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge(player: player))
end
def parse_records(data)
@records['overall'] = Record.new(data, type: 'overall')
end
def parse_season_stats(data)
@team_stats = data.dig('statistics')
update(data)
player_data = data.dig('players')
create_data(@players_hash, player_data, klass: Player, api: api, team: self)
data
end
# data retrieval
def get_roster
data = api.get_data(path_roster).to_h
ingest_roster(data)
end
def ingest_roster(data)
update(data)
data
end
def queue_roster
url, headers, options, timeout = api.get_request_info(path_roster)
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_roster)}
end
def get_season_stats(year = Date.today.year)
data = api.get_data(path_season_stats(year)).to_h
ingest_season_stats(data)
end
def ingest_season_stats(data)
parse_season_stats(data)
end
def queue_season_stats(year = Date.today.year)
url, headers, options, timeout = api.get_request_info(path_season_stats(year))
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_season_stats)}
end
# url path helpers
def path_base
"teams/#{ id }"
end
def path_base_stats(season_year = api.default_year, default_season = api.default_season)
"seasons/#{season_year}/#{default_season}/teams/#{id}"
end
def path_roster
"#{ path_base }/profile"
end
def path_season_stats(year)
"#{ path_base_stats(year) }/statistics"
end
def api
@api || Sportradar::Api::Baseball::Mlb::Api.new
end
end
end
end
end