chgk_rating 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +8 -499
  4. data/chgk_rating.gemspec +7 -6
  5. data/lib/chgk_rating/attribute_mappings.rb +20 -4
  6. data/lib/chgk_rating/chgk_object.rb +1 -0
  7. data/lib/chgk_rating/client.rb +40 -9
  8. data/lib/chgk_rating/collections/ratings/player_ratings.rb +22 -0
  9. data/lib/chgk_rating/collections/{ratings.rb → ratings/team_ratings.rb} +2 -3
  10. data/lib/chgk_rating/collections/tournaments/player_tournaments.rb +44 -0
  11. data/lib/chgk_rating/collections/{tournament_players.rb → tournaments/tournament_team_players.rb} +2 -2
  12. data/lib/chgk_rating/collections/{tournament_team_results.rb → tournaments/tournament_team_results.rb} +0 -0
  13. data/lib/chgk_rating/collections/{tournament_teams.rb → tournaments/tournament_teams.rb} +0 -0
  14. data/lib/chgk_rating/collections/{tournaments.rb → tournaments/tournaments.rb} +2 -1
  15. data/lib/chgk_rating/connection.rb +4 -1
  16. data/lib/chgk_rating/models/base.rb +17 -5
  17. data/lib/chgk_rating/models/player.rb +25 -0
  18. data/lib/chgk_rating/models/rating/player_rating.rb +16 -0
  19. data/lib/chgk_rating/models/{tournament_player.rb → rating/rating.rb} +1 -1
  20. data/lib/chgk_rating/models/{rating.rb → rating/team_rating.rb} +1 -4
  21. data/lib/chgk_rating/models/team.rb +6 -6
  22. data/lib/chgk_rating/models/tournament/player_tournament.rb +8 -0
  23. data/lib/chgk_rating/models/{tournament.rb → tournament/tournament.rb} +4 -4
  24. data/lib/chgk_rating/models/{tournament_team.rb → tournament/tournament_team.rb} +3 -3
  25. data/lib/chgk_rating/models/tournament/tournament_team_player.rb +8 -0
  26. data/lib/chgk_rating/models/{tournament_team_result.rb → tournament/tournament_team_result.rb} +0 -0
  27. data/lib/chgk_rating/utils/transformations.rb +1 -0
  28. data/lib/chgk_rating/version.rb +1 -1
  29. data/lib/chgk_rating.rb +15 -10
  30. data/spec/lib/chgk_rating/client_spec.rb +46 -7
  31. data/spec/lib/chgk_rating/collections/player_ratings_spec.rb +15 -0
  32. data/spec/lib/chgk_rating/collections/{ratings_spec.rb → team_ratings_spec.rb} +1 -1
  33. data/spec/lib/chgk_rating/collections/tournaments/player_tournaments_spec.rb +38 -0
  34. data/spec/lib/chgk_rating/collections/{tournament_players_spec.rb → tournaments/tournament_team_players_spec.rb} +1 -1
  35. data/spec/lib/chgk_rating/collections/{tournament_team_results_spec.rb → tournaments/tournament_team_results_spec.rb} +0 -0
  36. data/spec/lib/chgk_rating/collections/{tournament_teams_spec.rb → tournaments/tournament_teams_spec.rb} +0 -0
  37. data/spec/lib/chgk_rating/collections/{tournaments_spec.rb → tournaments/tournaments_spec.rb} +0 -0
  38. data/spec/lib/chgk_rating/models/player_rating_spec.rb +22 -0
  39. data/spec/lib/chgk_rating/models/player_spec.rb +27 -0
  40. data/spec/lib/chgk_rating/models/{rating_spec.rb → team_rating_spec.rb} +1 -1
  41. data/spec/lib/chgk_rating/models/team_spec.rb +2 -2
  42. data/spec/lib/chgk_rating/models/{tournament_spec.rb → tournament/tournament_spec.rb} +3 -3
  43. data/spec/lib/chgk_rating/models/{tournament_player_spec.rb → tournament/tournament_team_player_spec.rb} +1 -1
  44. data/spec/lib/chgk_rating/models/{tournament_team_result_spec.rb → tournament/tournament_team_result_spec.rb} +0 -0
  45. data/spec/lib/chgk_rating/models/{tournament_team_spec.rb → tournament/tournament_team_spec.rb} +1 -1
  46. data/spec/spec_helper.rb +2 -0
  47. metadata +70 -46
@@ -47,19 +47,29 @@ module ChgkRating
47
47
  # @param tournament_or_id [String, Integer or Tournament] Tournament to load team for.
48
48
  # @param team_or_id [String, Integer or Team] Team to search for.
49
49
  def team_at_tournament(tournament_or_id, team_or_id)
50
- tournament(tournament_or_id, true).team(team_or_id)
50
+ tournament(tournament_or_id, true).team_by(team_or_id)
51
51
  end
52
52
 
53
- # Returns Rating for a given Team in a given release
53
+ # Returns rating for a given Team in a given release
54
54
  #
55
55
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested release or Team cannot be found.
56
- # @return [ChgkRating::Models::Rating] The requested Rating.
56
+ # @return [ChgkRating::Models::TeamRating] The requested rating.
57
57
  # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load rating for.
58
58
  # @param release_id [String or Integer] Release to load rating for.
59
- def rating(team_or_id, release_id)
59
+ def team_rating(team_or_id, release_id)
60
60
  team(team_or_id, true).rating(release_id)
61
61
  end
62
62
 
63
+ # Returns rating for a given Player in a given release
64
+ #
65
+ # @raise [ChgkRating::Error::NotFound] Error raised when the requested release or Player cannot be found.
66
+ # @return [ChgkRating::Models::PlayerRating] The requested rating.
67
+ # @param player_or_id [String, Integer or ChgkRating::Models::Team] Player to load rating for.
68
+ # @param release_id [String or Integer] Release to load rating for.
69
+ def player_rating(player_or_id, release_id)
70
+ player(player_or_id, true).rating(release_id)
71
+ end
72
+
63
73
  # Search
64
74
 
65
75
  # Returns a Players collection based on the search criteria.
@@ -127,18 +137,39 @@ module ChgkRating
127
137
  # @param season_id [String or Integer] Season to load tournaments for
128
138
  # @option params [String or Integer] :page The requested page. Default is 1
129
139
  def tournaments(team_or_id: nil, season_id: nil, params: {})
130
- ChgkRating::Collections::Tournaments.new params.merge(team: team_or_id, season_id: season_id)
140
+ ChgkRating::Collections::Tournaments.new params.merge(
141
+ team: team_or_id, season_id: season_id
142
+ )
143
+ end
144
+
145
+ # Returns a collection of Tournaments that the Player has participated in
146
+ #
147
+ # @return [ChgkRating::Collection::PlayerTournaments] The collection of tournaments.
148
+ # @param player_or_id [String, Integer or ChgkRating::Models::Player] Player to load tournaments for.
149
+ # @param season_id [String or Integer] Season to load tournaments for
150
+ def player_tournaments(player_or_id, season_id = nil)
151
+ ChgkRating::Collections::PlayerTournaments.new player: player_or_id,
152
+ season_id: season_id
131
153
  end
132
154
 
133
- # Returns an array-like Ratings collection for a given team.
155
+ # Returns an array-like Ratings collection for a given Team.
134
156
  #
135
157
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
136
158
  # @return [ChgkRating::Collection::Ratings] The collection of ratings.
137
159
  # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load ratings for.
138
- def ratings(team_or_id)
160
+ def team_ratings(team_or_id)
139
161
  team(team_or_id, true).ratings
140
162
  end
141
163
 
164
+ # Returns an array-like Ratings collection for a given Player.
165
+ #
166
+ # @raise [ChgkRating::Error::NotFound] Error raised when the requested Player cannot be found.
167
+ # @return [ChgkRating::Collection::Ratings] The collection of ratings.
168
+ # @param player_or_id [String, Integer or ChgkRating::Models::Team] Player to load ratings for.
169
+ def player_ratings(player_or_id)
170
+ player(player_or_id, true).ratings
171
+ end
172
+
142
173
  # Returns an array-like TournamentTeams collection specifying which teams participated in a given tournament
143
174
  #
144
175
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament cannot be found.
@@ -159,11 +190,11 @@ module ChgkRating
159
190
  team_at_tournament(tournament_or_id, team_or_id).results
160
191
  end
161
192
 
162
- # Returns an array-like TournamentPlayers collection containing roster for a
193
+ # Returns an array-like TournamentTeamPlayers collection containing roster for a
163
194
  # given team at a given tournament.
164
195
  #
165
196
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested Tournament or Team cannot be found.
166
- # @return [ChgkRating::Collection::TournamentPlayers] The collection of results.
197
+ # @return [ChgkRating::Collection::TournamentTeamPlayers] The collection of results.
167
198
  # @param tournament_or_id [String, Integer or ChgkRating::Models::Tournament] Tournament to load players for.
168
199
  # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load players for.
169
200
  def team_players_at_tournament(tournament_or_id, team_or_id)
@@ -0,0 +1,22 @@
1
+ module ChgkRating
2
+ module Collections
3
+ class PlayerRatings < Base
4
+ attr_reader :player
5
+
6
+ def initialize(params = {})
7
+ @player = build_model params[:player], ChgkRating::Models::Player
8
+ super
9
+ end
10
+
11
+ private
12
+
13
+ def process(*_args)
14
+ super { |result| ChgkRating::Models::PlayerRating.new result }
15
+ end
16
+
17
+ def api_path
18
+ "players/#{@player.id}/rating"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,18 +1,17 @@
1
1
  module ChgkRating
2
2
  module Collections
3
- class Ratings < Base
3
+ class TeamRatings < Base
4
4
  attr_reader :team
5
5
 
6
6
  def initialize(params = {})
7
7
  @team = build_model params[:team]
8
-
9
8
  super
10
9
  end
11
10
 
12
11
  private
13
12
 
14
13
  def process(*_args)
15
- super { |result| ChgkRating::Models::Rating.new result }
14
+ super { |result| ChgkRating::Models::TeamRating.new result }
16
15
  end
17
16
 
18
17
  def api_path
@@ -0,0 +1,44 @@
1
+ module ChgkRating
2
+ module Collections
3
+ class PlayerTournaments < Base
4
+ attr_reader :season_id, :player
5
+
6
+ def initialize(params = {})
7
+ @player = build_model params[:player], ChgkRating::Models::Player
8
+
9
+ @season_id = params[:season_id]
10
+ super
11
+ end
12
+
13
+ def revert_to_hash(key, values)
14
+ [
15
+ key,
16
+ {
17
+ 'idplayer' => @player.id.to_s,
18
+ 'idseason' => key,
19
+ 'tournaments' => values.map(&:to_h)
20
+ }
21
+ ]
22
+ end
23
+
24
+ private
25
+
26
+ def process(_results, params = {})
27
+ super do |result|
28
+ if @player && @season_id.nil?
29
+ ChgkRating::Collections::PlayerTournaments.new(collection: result['tournaments']).items
30
+ else
31
+ ChgkRating::Models::PlayerTournament.new result
32
+ end
33
+ end
34
+ end
35
+
36
+ # @return [String] Either `tournaments`, `teams/ID/tournaments`, `players/ID/tournaments`, `teams/ID/tournaments/SEASON_ID`, `players/ID/tournaments/SEASON_ID`
37
+ def api_path
38
+ path = "players/#{@player.id}/tournaments"
39
+ return path unless @season_id
40
+ path + "/#{@season_id}"
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,6 +1,6 @@
1
1
  module ChgkRating
2
2
  module Collections
3
- class TournamentPlayers < Base
3
+ class TournamentTeamPlayers < Base
4
4
  attr_reader :team, :tournament
5
5
 
6
6
  def initialize(params = {})
@@ -13,7 +13,7 @@ module ChgkRating
13
13
  private
14
14
 
15
15
  def process(*_args)
16
- super { |result| ChgkRating::Models::TournamentPlayer.new result }
16
+ super { |result| ChgkRating::Models::TournamentTeamPlayer.new result }
17
17
  end
18
18
 
19
19
  def api_path
@@ -15,7 +15,7 @@ module ChgkRating
15
15
  [
16
16
  key,
17
17
  {
18
- 'idteam' => @team.id.to_s,
18
+ 'idteam' => @team&.id.to_s,
19
19
  'idseason' => key,
20
20
  'tournaments' => values.map(&:to_h)
21
21
  }
@@ -35,6 +35,7 @@ module ChgkRating
35
35
  end
36
36
  end
37
37
 
38
+ # @return [String] Either `tournaments`, `teams/ID/tournaments`, or `teams/ID/tournaments/SEASON_ID`
38
39
  def api_path
39
40
  path = 'tournaments'
40
41
  return path unless @team
@@ -1,3 +1,5 @@
1
+ require 'faraday_middleware'
2
+
1
3
  module ChgkRating
2
4
  module Connection
3
5
  BASE_URL = 'http://rating.chgk.info/api'.freeze
@@ -12,8 +14,9 @@ module ChgkRating
12
14
  }
13
15
 
14
16
  Faraday.new options do |faraday|
17
+ faraday.use FaradayMiddleware::FollowRedirects
15
18
  faraday.adapter Faraday.default_adapter
16
19
  end
17
20
  end
18
21
  end
19
- end
22
+ end
@@ -51,9 +51,12 @@ module ChgkRating
51
51
 
52
52
  private
53
53
 
54
+ # Grab the attribute mapping for the class and its superclass
55
+ # (as superclass may present common mappings for multiple classes)
54
56
  def self.attribute_mapping
55
57
  return nil unless self.name
56
- ChgkRating::AttributeMappings.find self.name
58
+ ChgkRating::AttributeMappings.find(self.name).
59
+ merge(ChgkRating::AttributeMappings.find(self.superclass.name))
57
60
  end
58
61
 
59
62
  def lazy_load?(params)
@@ -80,11 +83,20 @@ module ChgkRating
80
83
 
81
84
  def extract_from(raw_data)
82
85
  self.class.attribute_mapping.each do |attr, mapping|
83
- data = raw_data.is_a?(self.class) ? raw_data.send(attr) : raw_data[ mapping[:raw_name] ]
84
- data = mapping[:transform_up].call(data) if mapping.has_key?(:transform_up)
85
- instance_variable_set "@#{attr}", data
86
+ data = get_data_from raw_data, attr, mapping
87
+ next unless data
88
+ instance_variable_set "@#{attr}", transform_up(data, mapping)
86
89
  end
87
90
  end
91
+
92
+ def get_data_from(raw, attr, mapping)
93
+ raw.is_a?(self.class) ? raw.send(attr) : raw[ mapping[:raw_name] ]
94
+ end
95
+
96
+ def transform_up(data, mapping)
97
+ return data unless mapping.has_key?(:transform_up)
98
+ mapping[:transform_up].call(data)
99
+ end
88
100
  end
89
101
  end
90
- end
102
+ end
@@ -1,6 +1,31 @@
1
1
  module ChgkRating
2
2
  module Models
3
3
  class Player < Base
4
+ # Returns rating for the current Player in a given release
5
+ #
6
+ # @return [ChgkRating::Models::PlayerRating] The requested rating.
7
+ # @param release_id [String or Integer] Release to load rating for.
8
+ def rating(release_id)
9
+ ChgkRating::Models::PlayerRating.new release_id, player: self
10
+ end
11
+
12
+ # Returns an array-like ratings collection for the current Player.
13
+ #
14
+ # @return [ChgkRating::Collection::PlayerRatings] The collection of ratings.
15
+ def ratings
16
+ ChgkRating::Collections::PlayerRatings.new player: self
17
+ end
18
+
19
+ # Returns a collection of Tournaments that the current player participated at based on the given criteria
20
+ #
21
+ # @raise [ChgkRating::Error::NotFound] Error raised when nothing can be found based on the given criteria.
22
+ # @return [ChgkRating::Collection::PlayerTournaments] The collection of tournaments.
23
+ # @param season_id [String or Integer] Season to load tournaments for
24
+ # @option params [String or Integer] :page The requested page. Default is 1
25
+ def tournaments(season_id = nil)
26
+ ChgkRating::Collections::PlayerTournaments.new player: self, season_id: season_id
27
+ end
28
+
4
29
  private
5
30
 
6
31
  def api_path
@@ -0,0 +1,16 @@
1
+ module ChgkRating
2
+ module Models
3
+ class PlayerRating < Rating
4
+ def initialize(release_id_or_hash, params = {})
5
+ @player_id = extract_id_from params[:player], ChgkRating::Models::Player
6
+ super
7
+ end
8
+
9
+ private
10
+
11
+ def api_path
12
+ "players/#{@player_id}/rating"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,6 +1,6 @@
1
1
  module ChgkRating
2
2
  module Models
3
- class TournamentPlayer < Base
3
+ class Rating < Base
4
4
  no_eager_loading!
5
5
  no_lazy_support!
6
6
  end
@@ -1,9 +1,6 @@
1
1
  module ChgkRating
2
2
  module Models
3
- class Rating < Base
4
- no_eager_loading!
5
- no_lazy_support!
6
-
3
+ class TeamRating < Rating
7
4
  def initialize(release_id_or_hash, params = {})
8
5
  @team_id = extract_id_from params[:team]
9
6
  super
@@ -19,19 +19,19 @@ module ChgkRating
19
19
  ChgkRating::Models::TournamentTeam.new self, tournament: tournament_or_id, lazy: true
20
20
  end
21
21
 
22
- # Returns Rating for the current Team in a given release
22
+ # Returns rating for the current Team in a given release
23
23
  #
24
- # @return [ChgkRating::Models::Rating] The requested Rating.
24
+ # @return [ChgkRating::Models::TeamRating] The requested rating.
25
25
  # @param release_id [String or Integer] Release to load rating for.
26
26
  def rating(release_id)
27
- ChgkRating::Models::Rating.new release_id, team: self
27
+ ChgkRating::Models::TeamRating.new release_id, team: self
28
28
  end
29
29
 
30
- # Returns an array-like Ratings collection for the current team.
30
+ # Returns an array-like ratings collection for the current Team.
31
31
  #
32
- # @return [ChgkRating::Collection::Ratings] The collection of ratings.
32
+ # @return [ChgkRating::Collection::TeamRatings] The collection of ratings.
33
33
  def ratings
34
- ChgkRating::Collections::Ratings.new team: self
34
+ ChgkRating::Collections::TeamRatings.new team: self
35
35
  end
36
36
 
37
37
  # Returns an hash-like Recaps collection for the current team, grouped by seasons. Seasons act
@@ -0,0 +1,8 @@
1
+ module ChgkRating
2
+ module Models
3
+ class PlayerTournament < Base
4
+ no_eager_loading!
5
+ no_lazy_support!
6
+ end
7
+ end
8
+ end
@@ -1,13 +1,13 @@
1
1
  module ChgkRating
2
2
  module Models
3
3
  class Tournament < Base
4
- # Returns an array-like TournamentPlayers collection containing roster for a team at the current tournament.
4
+ # Returns an array-like TournamentTeamPlayers collection containing roster for a team at the current tournament.
5
5
  #
6
6
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
7
- # @return [ChgkRating::Collection::TournamentPlayers] The collection of results.
7
+ # @return [ChgkRating::Collection::TournamentTeamPlayers] The collection of results.
8
8
  # @param team_or_id [String, Integer or ChgkRating::Models::Team] Team to load players for.
9
9
  def team_players(team_or_id)
10
- ChgkRating::Collections::TournamentPlayers.new tournament: self, team: team_or_id
10
+ ChgkRating::Collections::TournamentTeamPlayers.new tournament: self, team: team_or_id
11
11
  end
12
12
 
13
13
  # Returns an array-like TournamentTeamResults collection with results for a given team in the current
@@ -32,7 +32,7 @@ module ChgkRating
32
32
  # @raise [ChgkRating::Error::NotFound] Error raised when the requested Team cannot be found.
33
33
  # @return [ChgkRating::Models::TournamentTeam] The requested TournamentTeam.
34
34
  # @param team_or_id [String, Integer or Team] Team to search for.
35
- def team(team_or_id)
35
+ def team_by(team_or_id)
36
36
  ChgkRating::Models::TournamentTeam.new team_or_id, tournament: self, lazy: true
37
37
  end
38
38
 
@@ -11,11 +11,11 @@ module ChgkRating
11
11
  super extract_id_from(team_or_hash), params
12
12
  end
13
13
 
14
- # Returns an array-like TournamentPlayers collection containing roster for the current TournamentTeam
14
+ # Returns an array-like TournamentTeamPlayers collection containing roster for the current TournamentTeam
15
15
  #
16
- # @return [ChgkRating::Collection::TournamentPlayers] The collection of results.
16
+ # @return [ChgkRating::Collection::TournamentTeamPlayers] The collection of results.
17
17
  def players
18
- ChgkRating::Collections::TournamentPlayers.new tournament: @tournament, team: @team
18
+ ChgkRating::Collections::TournamentTeamPlayers.new tournament: @tournament, team: @team
19
19
  end
20
20
 
21
21
  # Returns an array-like TournamentTeamResults collection containing results for the current TournamentTeam
@@ -0,0 +1,8 @@
1
+ module ChgkRating
2
+ module Models
3
+ class TournamentTeamPlayer < Base
4
+ no_eager_loading!
5
+ no_lazy_support!
6
+ end
7
+ end
8
+ end
@@ -73,6 +73,7 @@ module ChgkRating
73
73
  d&.map {|result| to_boolean.call(result)}
74
74
  end,
75
75
  team: chgk_object('Team'),
76
+ tournament: chgk_object('Tournament'),
76
77
  player: chgk_object('Player'),
77
78
  players: chgk_object('Players', 'Collections')
78
79
  }.freeze
@@ -1,3 +1,3 @@
1
1
  module ChgkRating
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
data/lib/chgk_rating.rb CHANGED
@@ -21,21 +21,26 @@ require 'chgk_rating/concerns/searching'
21
21
  require 'chgk_rating/chgk_object'
22
22
 
23
23
  require 'chgk_rating/models/base'
24
- require 'chgk_rating/models/tournament_team_result'
25
- require 'chgk_rating/models/tournament_player'
26
- require 'chgk_rating/models/tournament_team'
27
- require 'chgk_rating/models/rating'
28
- require 'chgk_rating/models/tournament'
24
+ require 'chgk_rating/models/tournament/tournament_team_result'
25
+ require 'chgk_rating/models/tournament/tournament_team_player'
26
+ require 'chgk_rating/models/tournament/tournament_team'
27
+ require 'chgk_rating/models/tournament/player_tournament'
28
+ require 'chgk_rating/models/tournament/tournament'
29
+ require 'chgk_rating/models/rating/rating'
30
+ require 'chgk_rating/models/rating/player_rating'
31
+ require 'chgk_rating/models/rating/team_rating'
29
32
  require 'chgk_rating/models/player'
30
33
  require 'chgk_rating/models/team'
31
34
  require 'chgk_rating/models/recap'
32
35
 
33
36
  require 'chgk_rating/collections/base'
34
- require 'chgk_rating/collections/tournament_team_results'
35
- require 'chgk_rating/collections/tournament_players'
36
- require 'chgk_rating/collections/tournament_teams'
37
- require 'chgk_rating/collections/ratings'
38
- require 'chgk_rating/collections/tournaments'
37
+ require 'chgk_rating/collections/tournaments/tournament_team_results'
38
+ require 'chgk_rating/collections/tournaments/tournament_team_players'
39
+ require 'chgk_rating/collections/tournaments/tournament_teams'
40
+ require 'chgk_rating/collections/tournaments/player_tournaments'
41
+ require 'chgk_rating/collections/tournaments/tournaments'
42
+ require 'chgk_rating/collections/ratings/player_ratings'
43
+ require 'chgk_rating/collections/ratings/team_ratings'
39
44
  require 'chgk_rating/collections/players'
40
45
  require 'chgk_rating/collections/teams'
41
46
  require 'chgk_rating/collections/recaps'
@@ -47,12 +47,20 @@ RSpec.describe ChgkRating::Client do
47
47
  it { is_expected.to be_an_instance_of ChgkRating::Models::Tournament }
48
48
  end
49
49
 
50
- describe '#rating' do
50
+ describe '#team_rating' do
51
51
  subject do
52
- VCR.use_cassette('rating_release') { test_client.rating team_1, 24 }
52
+ VCR.use_cassette('rating_release') { test_client.team_rating team_1, 24 }
53
53
  end
54
54
 
55
- it { is_expected.to be_an_instance_of ChgkRating::Models::Rating }
55
+ it { is_expected.to be_an_instance_of ChgkRating::Models::TeamRating }
56
+ end
57
+
58
+ describe '#player_rating' do
59
+ subject do
60
+ VCR.use_cassette('player_rating_release') { test_client.player_rating 42511, 1000 }
61
+ end
62
+
63
+ it { is_expected.to be_an_instance_of ChgkRating::Models::PlayerRating }
56
64
  end
57
65
 
58
66
  describe '#recap' do
@@ -85,13 +93,22 @@ RSpec.describe ChgkRating::Client do
85
93
  end
86
94
  end
87
95
 
88
- describe '#ratings' do
96
+ describe '#team_ratings' do
89
97
  subject do
90
98
  VCR.use_cassette 'team_ratings' do
91
- test_client.ratings team_1
99
+ test_client.team_ratings team_1
100
+ end
101
+ end
102
+ it { is_expected.to be_an_instance_of ChgkRating::Collections::TeamRatings }
103
+ end
104
+
105
+ describe '#player_ratings' do
106
+ subject do
107
+ VCR.use_cassette 'player_ratings_all_releases' do
108
+ test_client.player_ratings 42511
92
109
  end
93
110
  end
94
- it { is_expected.to be_an_instance_of ChgkRating::Collections::Ratings }
111
+ it { is_expected.to be_an_instance_of ChgkRating::Collections::PlayerRatings }
95
112
  end
96
113
 
97
114
  describe '#team_players_at_tournament' do
@@ -101,7 +118,7 @@ RSpec.describe ChgkRating::Client do
101
118
  end
102
119
  end
103
120
 
104
- it { is_expected.to be_an_instance_of ChgkRating::Collections::TournamentPlayers }
121
+ it { is_expected.to be_an_instance_of ChgkRating::Collections::TournamentTeamPlayers }
105
122
  end
106
123
 
107
124
  describe '#team_results_at_tournament' do
@@ -124,6 +141,28 @@ RSpec.describe ChgkRating::Client do
124
141
  it { is_expected.to be_an_instance_of ChgkRating::Collections::TournamentTeams }
125
142
  end
126
143
 
144
+ describe '#player_tournaments' do
145
+ context 'all tournaments for a player by season' do
146
+ subject do
147
+ VCR.use_cassette 'player_tournaments_season' do
148
+ test_client.player_tournaments 1000, 51
149
+ end
150
+ end
151
+
152
+ it { is_expected.to be_an_instance_of ChgkRating::Collections::PlayerTournaments }
153
+ end
154
+
155
+ context 'tournaments for a player' do
156
+ subject do
157
+ VCR.use_cassette 'player_tournaments' do
158
+ test_client.player_tournaments 1000
159
+ end
160
+ end
161
+
162
+ it { is_expected.to be_an_instance_of ChgkRating::Collections::PlayerTournaments }
163
+ end
164
+ end
165
+
127
166
  describe '#tournaments' do
128
167
  context 'all tournaments for a team by season' do
129
168
  subject do
@@ -0,0 +1,15 @@
1
+ RSpec.describe ChgkRating::Collections::PlayerRatings do
2
+ subject do
3
+ VCR.use_cassette 'player_ratings' do
4
+ described_class.new(player: 1000)[-1]
5
+ end
6
+ end
7
+
8
+ specify('#player') { expect(subject.player.id).to eq '1000' }
9
+ specify('#release_id') { expect(subject.release_id).to eq '1336' }
10
+ specify('#rating') { expect(subject.rating).to eq 7674 }
11
+ specify('#rating_position') { expect(subject.rating_position).to eq 1417 }
12
+ specify('#date') { expect(subject.date).to eq Date.new(2018, 04, 12) }
13
+ specify('#tournaments_in_year') { expect(subject.tournaments_in_year).to eq 15 }
14
+ specify('#tournament_count_total') { expect(subject.tournament_count_total).to eq 284 }
15
+ end
@@ -1,4 +1,4 @@
1
- RSpec.describe ChgkRating::Collections::Ratings do
1
+ RSpec.describe ChgkRating::Collections::TeamRatings do
2
2
  subject do
3
3
  VCR.use_cassette 'team_ratings' do
4
4
  described_class.new(team: 1)
@@ -0,0 +1,38 @@
1
+ RSpec.describe ChgkRating::Collections::PlayerTournaments do
2
+ context 'all tournaments for a player' do
3
+ subject do
4
+ VCR.use_cassette 'player_tournaments' do
5
+ described_class.new(player: 1000)
6
+ end
7
+ end
8
+ let(:player_tournament) { subject['3'][0] }
9
+
10
+ specify '#to_h' do
11
+ subject_h = subject.to_h['6']
12
+ expect(subject_h['tournaments'][0]['idtournament']).to eq '220'
13
+ expect(subject_h['tournaments'][0]['in_base_team']).to eq '1'
14
+ expect(subject_h['tournaments'][0]['idteam']).to eq '233'
15
+ expect(subject_h['idplayer']).to eq '1000'
16
+ end
17
+ specify('#tournament') { expect(player_tournament.tournament.id).to eq '91' }
18
+ end
19
+
20
+ context 'all tournaments for a player by season' do
21
+ subject do
22
+ VCR.use_cassette 'player_tournaments_season' do
23
+ described_class.new(player: 1000, season_id: 51)
24
+ end
25
+ end
26
+ let(:player_tournament) { subject[0] }
27
+
28
+ specify '#to_a' do
29
+ tournaments_arr = subject.to_a
30
+ expect(tournaments_arr[2]['idtournament']).to eq '4782'
31
+ end
32
+ specify('#tournament') { expect(player_tournament.tournament.id).to eq '4712' }
33
+ specify('#team') { expect(player_tournament.team.id).to eq '51284' }
34
+ specify('#in_base_team') { expect(player_tournament.in_base_team).to eq false }
35
+ specify('#player') { expect(subject.player.id).to eq 1000 }
36
+ specify('#season_id') { expect(subject.season_id).to eq 51 }
37
+ end
38
+ end
@@ -1,4 +1,4 @@
1
- RSpec.describe ChgkRating::Collections::TournamentPlayers do
1
+ RSpec.describe ChgkRating::Collections::TournamentTeamPlayers do
2
2
  subject do
3
3
  VCR.use_cassette 'team_players_at_tournament' do
4
4
  described_class.new(tournament: 3506, team: 52853)