lib/chgk_rating/client.rb
# 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