module Sportradar module Api module Mma class Fight < Data attr_accessor :response, :id, :season, :start_time, :start_time_confirmed, :sport_event_context, :coverage, :venue, :status, :match_status, :winner_id, :final_round, :final_round_length, :end_method, :winner, :scheduled_length, :weight_class, :title_fight, :statistics def initialize(data, **opts) @response = data @api = opts[:api] @season = opts[:season] @fighters_hash = {} @id = data['id'] @statistics = {} update(data) end def fighters @fighters_hash.values end def update(data, **opts) if data["sport_event"] update(data["sport_event"]) end if data["sport_event_status"] update(data["sport_event_status"]) end @id = data['id'] if data['id'] && !@id @start_time = Time.parse(data['start_time']) if data['start_time'] @start_time_confirmed = data['start_time_confirmed'] if data['start_time_confirmed'] @sport_event_context = data['sport_event_context'] if data['sport_event_context'] @coverage = data['coverage'] if data['coverage'] @venue = data['venue'] if data['venue'] @status = data['status'] if data['status'] @match_status = data['match_status'] if data['match_status'] @winner_id = data['winner_id'] if data['winner_id'] @final_round = data['final_round'] if data['final_round'] @final_round_length = data['final_round_length'] if data['final_round_length'] @end_method = data['method'] if data['method'] @winner = data['winner'] if data['winner'] @scheduled_length = data['scheduled_length'] if data['scheduled_length'] @weight_class = data['weight_class'] if data['weight_class'] @title_fight = data['title_fight'] if data['title_fight'] update_fighters(data) if data['competitors'] update_statistics(data['statistics']) if data["statistics"] self end def season_id @season&.id || @sport_event_context&.dig('season', 'id') end def starts_at @start_time end def coverage_level 'live' if @coverage&.dig('live') end def title fighters.map(&:display_name).join(' vs ') end def scheduled @start_time end def update_fighters(data) if data['competitors'] create_data(@fighters_hash, data['competitors'], klass: Fighter, api: api, fight: self) end end def update_statistics(data) @statistics['totals'] = structure_stats(data["totals"]) if data["totals"] if data['periods'] data['periods'].each do |round| @statistics[round['number']] = structure_stats(round) end end end def structure_stats(data) data['competitors'].map { |comp_data| [comp_data['id'], comp_data.merge(comp_data.delete('statistics'))] }.to_h end def api @api ||= Sportradar::Api::Mma.new end def path_base "sport_events/#{ id }" end def path_summary "#{ path_base }/summary" end def get_summary data = api.get_data(path_summary) update(data) data end # def get_pbp # data = api.get_data(path_pbp)['game'] # update(data) # @quarter = data['quarter'].first # @pbp = set_pbp(data['quarter'][1..-1]) # end # def set_pbp(data) # @quarters = parse_into_array_with_options(selector: data, klass: self.parent::Quarter, api: api, game: self) # @plays = nil # to clear empty array empty # @quarters # end KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"] end end end end __END__ m = Sportradar::Api::Mma.new sc = m.schedule; sc.events.size; e = sc.events.sample; e = sc.events.first; e = sc.events.last; e.venue.events.size