beneggett/sportradar-api

View on GitHub
lib/sportradar/api/soccer/player.rb

Summary

Maintainability
C
1 day
Test Coverage
module Sportradar
  module Api
    module Soccer
      class Player < Data

        attr_reader :id, :league_group, :name, :type, :nationality, :country_code, :height, :weight, :jersey_number, :preferred_foot, :stats, :game_stats, :date_of_birth, :matches_played, :starter, :team
        alias :position :type

        def initialize(data = {}, league_group: nil, **opts)
          @response     = data
          @id           = data['id'] if data['id']
          @api          = opts[:api]
          @team         = opts[:team]

          @league_group = league_group || data['league_group'] || @api&.league_group

          update(data, **opts)
        end

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

          if data['player']
            update(data['player'])
          end

          @name           = data['name']           if data['name']
          @last_name      = data['last_name']      if data['last_name']
          @first_name     = data['first_name']     if data['first_name']
          @type           = data['type']           if data['type']
          @nationality    = data['nationality']    if data['nationality']
          @country_code   = data['country_code']   if data['country_code']
          @height         = data['height']         if data['height']
          @weight         = data['weight']         if data['weight']
          @jersey_number  = data['jersey_number']  if data['jersey_number']
          @preferred_foot = data['preferred_foot'] if data['preferred_foot']
          @matches_played = data['matches_played'] if data['matches_played']
          @stats          = data['statistics']     if data['statistics']
          @starter        = data['starter']        if data.key?('starter')

          @date_of_birth  = Date.parse(data['date_of_birth']) if data['date_of_birth']
          set_game_stats(data)

          if data['statistics'] && @team
            @team.update_player_stats(self, data['statistics'])
            if opts[:match]
              @team.update_player_stats(self, data['statistics'], opts[:match])
            end
          end

        end

        def set_game_stats(data)
          @game_stats ||= {}

          @game_stats[:substituted_in] = data['substituted_in'] if data['substituted_in'].present?
          @game_stats[:substituted_out] = data['substituted_out'] if data['substituted_out'].present?
          @game_stats[:goals_scored] = data['goals_scored'] if data['goals_scored'].present?
          @game_stats[:assists] = data['assists'] if data['assists'].present?
          @game_stats[:own_goals] = data['own_goals'] if data['own_goals'].present?
          @game_stats[:yellow_cards] = data['yellow_cards'] if data['yellow_cards'].present?
          @game_stats[:yellow_red_cards] = data['yellow_red_cards'] if data['yellow_red_cards'].present?
          @game_stats[:red_cards] = data['red_cards'] if data['red_cards'].present?
          @game_stats[:goal_line_clearances] = data['goal_line_clearances'] if data['goal_line_clearances'].present?
          @game_stats[:interceptions] = data['interceptions'] if data['interceptions'].present?
          @game_stats[:chances_created] = data['chances_created'] if data['chances_created'].present?
          @game_stats[:crosses_successful] = data['crosses_successful'] if data['crosses_successful'].present?
          @game_stats[:crosses_total] = data['crosses_total'] if data['crosses_total'].present?
          @game_stats[:passes_short_successful] = data['passes_short_successful'] if data['passes_short_successful'].present?
          @game_stats[:passes_medium_successful] = data['passes_medium_successful'] if data['passes_medium_successful'].present?
          @game_stats[:passes_long_successful] = data['passes_long_successful'] if data['passes_long_successful'].present?
          @game_stats[:passes_short_total] = data['passes_short_total'] if data['passes_short_total'].present?
          @game_stats[:passes_medium_total] = data['passes_medium_total'] if data['passes_medium_total'].present?
          @game_stats[:passes_long_total] = data['passes_long_total'] if data['passes_long_total'].present?
          @game_stats[:duels_header_successful] = data['duels_header_successful'] if data['duels_header_successful'].present?
          @game_stats[:duels_sprint_successful] = data['duels_sprint_successful'] if data['duels_sprint_successful'].present?
          @game_stats[:duels_tackle_successful] = data['duels_tackle_successful'] if data['duels_tackle_successful'].present?
          @game_stats[:duels_header_total] = data['duels_header_total'] if data['duels_header_total'].present?
          @game_stats[:duels_sprint_total] = data['duels_sprint_total'] if data['duels_sprint_total'].present?
          @game_stats[:duels_tackle_total] = data['duels_tackle_total'] if data['duels_tackle_total'].present?
          @game_stats[:goals_conceded] = data['goals_conceded'] if data['goals_conceded'].present?
          @game_stats[:shots_faced_saved] = data['shots_faced_saved'] if data['shots_faced_saved'].present?
          @game_stats[:shots_faced_total] = data['shots_faced_total'] if data['shots_faced_total'].present?
          @game_stats[:penalties_faced] = data['penalties_faced'] if data['penalties_faced'].present?
          @game_stats[:penalties_saved] = data['penalties_saved'] if data['penalties_saved'].present?
          @game_stats[:fouls_committed] = data['fouls_committed'] if data['fouls_committed'].present?
          @game_stats[:was_fouled] = data['was_fouled'] if data['was_fouled'].present?
          @game_stats[:offsides] = data['offsides'] if data['offsides'].present?
          @game_stats[:shots_on_goal] = data['shots_on_goal'] if data['shots_on_goal'].present?
          @game_stats[:shots_off_goal] = data['shots_off_goal'] if data['shots_off_goal'].present?
          @game_stats[:shots_blocked] = data['shots_blocked'] if data['shots_blocked'].present?
          @game_stats[:minutes_played] = data['minutes_played'] if data['minutes_played'].present?
          @game_stats[:performance_score] = data['performance_score'] if data['performance_score'].present?
          @game_stats[:goals_by_head] = data['goals_by_head'] if data['goals_by_head'].present?
          @game_stats[:goals_by_penalty] = data['goals_by_penalty'] if data['goals_by_penalty'].present?
        end

        def display_name
          @name || [@first_name, @last_name].join(' ')
        end

        def birth_date
          @date_of_birth
        end

        def jersey
          @jersey_number
        end

        def first_name
          @name.split()[1]
        end

        def last_name
          @name.split()[0].delete(',')
        end

        def injured?
          false
        end

        def api
          @api || Sportradar::Api::Soccer::Api.new(league_group: @league_group)
        end

        def path_base
          "players/#{ id }"
        end

        def path_profile
          "#{ path_base }/profile"
        end
        def get_profile
          data = api.get_data(path_profile).to_h
          ingest_profile(data)
        end
        def ingest_profile(data)
          update(data)
          data
        end
        def queue_profile
          url, headers, options, timeout = api.get_request_info(path_profile)
          {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_profile)}
        end
      end
    end
  end
end