bodrovis/ChgkRating

View on GitHub
lib/chgk_rating/client.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module ChgkRating
  class Client
    # Returns a single Team
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the Team cannot be found.
    # @return [ChgkRating::Models::Team] The requested Team.
    # @param id [String or Integer] Team's id
    # @param lazy [Boolean] Should the Team be lazily loaded? Default is `false`.
    def team(id, lazy = false)
      ChgkRating::Models::Team.new id, lazy: lazy
    end

    # Returns a single Player
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the Player cannot be found.
    # @return [ChgkRating::Models::Player] The requested Player.
    # @param id [String or Integer] Player's id
    # @param lazy [Boolean] Should the Player be lazily loaded? Default is `false`.
    def player(id, lazy = false)
      ChgkRating::Models::Player.new id, lazy: lazy
    end

    # Returns a single Recap for a given Team
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
    # @return [ChgkRating::Models::Recap] The requested Recap.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load recaps for.
    # @param season_id [String or Integer] Season to load recap for.
    def recap(team_or_id, season_id)
      team(team_or_id, true).recap(season_id)
    end

    # Returns a single Tournament
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament cannot be found.
    # @return [ChgkRating::Models::Tournament] The requested Tournament.
    # @param id [String or Integer] Tournament's id
    # @param lazy [Boolean] Should the Tournament be lazily loaded? Default is `false`.
    def tournament(id, lazy = false)
      ChgkRating::Models::Tournament.new id, lazy: lazy
    end

    # Returns a single TournamentTeam
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament or Team cannot be found.
    # @return [ChgkRating::Models::TournamentTeam] The requested TournamentTeam.
    # @param tournament_or_id [String, Integer or Tournament] Tournament to load team for.
    # @param team_or_id [String, Integer or Team] Team to search for.
    def team_at_tournament(tournament_or_id, team_or_id)
      tournament(tournament_or_id, true).team_by(team_or_id)
    end

    # Returns rating for a given Team in a given release
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested release or Team cannot be found.
    # @return [ChgkRating::Models::TeamRating] The requested rating.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load rating for.
    # @param release_id [String or Integer] Release to load rating for.
    def team_rating(team_or_id, release_id)
      team(team_or_id, true).rating(release_id)
    end

    # Returns rating for a given Player in a given release
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested release or Player cannot be found.
    # @return [ChgkRating::Models::PlayerRating] The requested rating.
    # @param player_or_id [String, Integer or ChgkRating::Models::Team] Player to load rating for.
    # @param release_id [String or Integer] Release to load rating for.
    def player_rating(player_or_id, release_id)
      player(player_or_id, true).rating(release_id)
    end

    # Search

    # Returns a Players collection based on the search criteria.
    #
    # @return [ChgkRating::Collection::Players::Search] Found Players.
    # @option params [String] :name Player's name
    # @option params [String] :surname Player's surname
    # @option params [String] :patronymic Player's patronymic
    # @option params [String or Integer] :page The requested page. Default is 1, and there are 1000 results per page.
    def search_players(params)
      ChgkRating::Collections::Players.search request: params
    end

    # Returns a Teams collection based on the search criteria.
    #
    # @return [ChgkRating::Collection::Teams::Search] Found Teams.
    # @option params [String] :name Team's name
    # @option params [String] :town Team's town of origin
    # @option params [String or Integer] :page The requested page. Default is 1, and there are 1000 results per page.
    def search_teams(params)
      ChgkRating::Collections::Teams.search request: params
    end

    # Collections

    # Returns an array-like Teams collection that contains Team models
    #
    # @return [ChgkRating::Collection::Teams] The collection of Teams.
    # @option params [String or Integer] :page The requested page. Default is 1, and there are 1000 results per page.
    # @option params [Boolean] :lazy Should the Teams models be marked as lazily loaded?
    #                          Note that the models will still contain all the information returned by the API.
    # @option params [Enumerable] :collection An array or collection of Teams that will be used to build a new
    #                             collection. If this option is provided, API request will not be sent.
    def teams(params = {})
      ChgkRating::Collections::Teams.new params
    end

    # Returns an array-like Players collection that contains Player models
    #
    # @return [ChgkRating::Collection::Players] The collection of Players.
    # @option params [String or Integer] :page The requested page. Default is 1, and there are 1000 results per page.
    # @option params [Boolean] :lazy Should the Player models be marked as lazily loaded?
    #                          Note that the models will still contain all the information returned by the API.
    # @option params [Enumerable] :collection An array or collection of Players that will be used to build a new
    #                             collection. If this option is provided, API request will not be sent.
    def players(params = {})
      ChgkRating::Collections::Players.new params
    end

    # Returns an hash-like Recaps collection for a given team, grouped by seasons. Seasons act
    # as keys, whereas Recap models - as values.
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
    # @return [ChgkRating::Collection::Recaps] The collection of recaps.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load recaps for.
    def recaps(team_or_id)
      team(team_or_id, true).recaps
    end

    # Returns a collection of Tournaments based on the given criteria
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when nothing can be found based on the given criteria.
    # @return [ChgkRating::Collection::Tournaments] The collection of tournaments.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load tournaments for.
    # @param season_id [String or Integer] Season to load tournaments for
    # @option params [String or Integer] :page The requested page. Default is 1
    def tournaments(team_or_id: nil, season_id: nil, params: {})
      ChgkRating::Collections::Tournaments.new params.merge(
        team: team_or_id, season_id: season_id
      )
    end

    # Returns a collection of Tournaments that the Player has participated in
    #
    # @return [ChgkRating::Collection::PlayerTournaments] The collection of tournaments.
    # @param player_or_id [String, Integer or ChgkRating::Models::Player] Player to load tournaments for.
    # @param season_id [String or Integer] Season to load tournaments for
    def player_tournaments(player_or_id, season_id = nil)
      ChgkRating::Collections::PlayerTournaments.new player: player_or_id,
                                                     season_id: season_id
    end

    # Returns an array-like Ratings collection for a given Team.
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
    # @return [ChgkRating::Collection::Ratings] The collection of ratings.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load ratings for.
    def team_ratings(team_or_id)
      team(team_or_id, true).ratings
    end

    # Returns an array-like Ratings collection for a given Player.
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Player cannot be found.
    # @return [ChgkRating::Collection::Ratings] The collection of ratings.
    # @param player_or_id [String, Integer or ChgkRating::Models::Team] Player to load ratings for.
    def player_ratings(player_or_id)
      player(player_or_id, true).ratings
    end

    # Returns an array-like TournamentTeams collection specifying which teams participated in a given tournament
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament cannot be found.
    # @return [ChgkRating::Collection::Ratings] The collection of teams.
    # @param tournament_or_id [String, Integer or ChgkRating::Models::Tournament] Tournament to load teams for.
    def teams_at_tournament(tournament_or_id)
      tournament(tournament_or_id, true).team_list
    end

    # Returns an array-like TournamentTeamResults collection with results for a given team in a given
    # tournament
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament or Team cannot be found.
    # @return [ChgkRating::Collection::TournamentTeamResults] The collection of results.
    # @param tournament_or_id [String, Integer or ChgkRating::Models::Tournament] Tournament to load results for.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load results for.
    def team_results_at_tournament(tournament_or_id, team_or_id)
      team_at_tournament(tournament_or_id, team_or_id).results
    end

    # Returns an array-like TournamentTeamPlayers collection containing roster for a
    # given team at a given tournament.
    #
    # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament or Team cannot be found.
    # @return [ChgkRating::Collection::TournamentTeamPlayers] The collection of results.
    # @param tournament_or_id [String, Integer or ChgkRating::Models::Tournament] Tournament to load players for.
    # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load players for.
    def team_players_at_tournament(tournament_or_id, team_or_id)
      team_at_tournament(tournament_or_id, team_or_id).players
    end
  end
end