basketball 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +9 -19
  3. data/CHANGELOG.md +1 -31
  4. data/README.md +72 -91
  5. data/basketball.gemspec +3 -6
  6. data/exe/{basketball-schedule → basketball-coordinator} +1 -1
  7. data/exe/{basketball-draft → basketball-room} +1 -1
  8. data/lib/basketball/app/coordinator_cli.rb +243 -0
  9. data/lib/basketball/app/coordinator_repository.rb +191 -0
  10. data/lib/basketball/app/file_store.rb +22 -0
  11. data/lib/basketball/app/room_cli.rb +212 -0
  12. data/lib/basketball/app/room_repository.rb +189 -0
  13. data/lib/basketball/app.rb +12 -0
  14. data/lib/basketball/draft/assessment.rb +31 -0
  15. data/lib/basketball/{drafting → draft}/event.rb +4 -3
  16. data/lib/basketball/draft/front_office.rb +99 -0
  17. data/lib/basketball/draft/pick.rb +32 -0
  18. data/lib/basketball/draft/room.rb +221 -0
  19. data/lib/basketball/{drafting/player_search.rb → draft/scout.rb} +5 -10
  20. data/lib/basketball/draft/skip.rb +12 -0
  21. data/lib/basketball/draft.rb +16 -0
  22. data/lib/basketball/entity.rb +10 -4
  23. data/lib/basketball/org/league.rb +73 -0
  24. data/lib/basketball/org/player.rb +26 -0
  25. data/lib/basketball/{drafting → org}/position.rb +3 -2
  26. data/lib/basketball/org/team.rb +38 -0
  27. data/lib/basketball/org.rb +12 -0
  28. data/lib/basketball/season/arena.rb +112 -0
  29. data/lib/basketball/season/calendar.rb +90 -0
  30. data/lib/basketball/season/coordinator.rb +239 -0
  31. data/lib/basketball/{scheduling/preseason_game.rb → season/exhibition.rb} +3 -2
  32. data/lib/basketball/season/game.rb +37 -0
  33. data/lib/basketball/season/matchup.rb +27 -0
  34. data/lib/basketball/season/opponent.rb +15 -0
  35. data/lib/basketball/season/regular.rb +9 -0
  36. data/lib/basketball/season/result.rb +37 -0
  37. data/lib/basketball/season.rb +16 -0
  38. data/lib/basketball/value_object.rb +4 -1
  39. data/lib/basketball/version.rb +1 -1
  40. data/lib/basketball.rb +11 -6
  41. metadata +40 -52
  42. data/lib/basketball/drafting/cli.rb +0 -235
  43. data/lib/basketball/drafting/engine.rb +0 -221
  44. data/lib/basketball/drafting/engine_serializer.rb +0 -186
  45. data/lib/basketball/drafting/front_office.rb +0 -92
  46. data/lib/basketball/drafting/league.rb +0 -70
  47. data/lib/basketball/drafting/pick_event.rb +0 -25
  48. data/lib/basketball/drafting/player.rb +0 -43
  49. data/lib/basketball/drafting/roster.rb +0 -37
  50. data/lib/basketball/drafting/sim_event.rb +0 -23
  51. data/lib/basketball/drafting/skip_event.rb +0 -13
  52. data/lib/basketball/drafting.rb +0 -9
  53. data/lib/basketball/scheduling/calendar.rb +0 -121
  54. data/lib/basketball/scheduling/calendar_serializer.rb +0 -94
  55. data/lib/basketball/scheduling/cli.rb +0 -198
  56. data/lib/basketball/scheduling/conference.rb +0 -57
  57. data/lib/basketball/scheduling/coordinator.rb +0 -180
  58. data/lib/basketball/scheduling/division.rb +0 -43
  59. data/lib/basketball/scheduling/game.rb +0 -32
  60. data/lib/basketball/scheduling/league.rb +0 -114
  61. data/lib/basketball/scheduling/league_serializer.rb +0 -99
  62. data/lib/basketball/scheduling/season_game.rb +0 -8
  63. data/lib/basketball/scheduling/team.rb +0 -21
  64. data/lib/basketball/scheduling.rb +0 -17
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Basketball
4
- module Scheduling
5
- class League
6
- class UnknownTeamError < StandardError; end
7
-
8
- class << self
9
- def generate_random; end
10
- end
11
-
12
- CONFERENCES_SIZE = 2
13
-
14
- attr_reader :conferences
15
-
16
- def initialize(conferences: [])
17
- @conferences = []
18
-
19
- conferences.each { |c| register_conference!(c) }
20
-
21
- if conferences.length != CONFERENCES_SIZE
22
- raise BadConferencesSizeError, "there has to be #{CONFERENCES_SIZE} conferences"
23
- end
24
-
25
- freeze
26
- end
27
-
28
- def to_s
29
- (['League'] + conferences.map(&:to_s)).join("\n")
30
- end
31
-
32
- def divisions
33
- conferences.flat_map(&:divisions)
34
- end
35
-
36
- def conference?(conference)
37
- conferences.include?(conference)
38
- end
39
-
40
- def division?(division)
41
- divisions.include?(division)
42
- end
43
-
44
- def team?(team)
45
- teams.include?(team)
46
- end
47
-
48
- def teams
49
- conferences.flat_map do |conference|
50
- conference.divisions.flat_map(&:teams)
51
- end
52
- end
53
-
54
- def conference_for(team)
55
- conferences.find { |c| c.divisions.find { |d| d.teams.include?(team) } }
56
- end
57
-
58
- def division_for(team)
59
- conference_for(team)&.divisions&.find { |d| d.teams.include?(team) }
60
- end
61
-
62
- # Same conference, same division
63
- def division_opponents_for(team)
64
- division = division_for(team)
65
-
66
- return nil unless division
67
-
68
- division.teams - [team]
69
- end
70
-
71
- # Same conference, different division
72
- def cross_division_opponents_for(team)
73
- conference = conference_for(team)
74
- division = division_for(team)
75
-
76
- return nil unless conference && division
77
-
78
- other_divisions = conference.divisions - [division]
79
-
80
- other_divisions.flat_map(&:teams)
81
- end
82
-
83
- # Different conference
84
- def cross_conference_opponents_for(team)
85
- conference = conference_for(team)
86
-
87
- return nil unless conference
88
-
89
- other_conferences = conferences - [conference]
90
-
91
- other_conferences.flat_map { |c| c.divisions.flat_map(&:teams) }
92
- end
93
-
94
- private
95
-
96
- def register_conference!(conference)
97
- raise ArgumentError, 'conference is required' unless conference
98
- raise ConferenceAlreadyRegisteredError, "#{conference} already registered" if conference?(conference)
99
-
100
- conference.divisions.each do |division|
101
- raise DivisionAlreadyRegisteredError, "#{division} already registered" if division?(division)
102
-
103
- division.teams.each do |team|
104
- raise TeamAlreadyRegisteredError, "#{team} already registered" if team?(team)
105
- end
106
- end
107
-
108
- conferences << conference
109
-
110
- self
111
- end
112
- end
113
- end
114
- end
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Basketball
4
- module Scheduling
5
- class LeagueSerializer
6
- def to_hash(league)
7
- {
8
- 'conferences' => serialize_conferences(league.conferences)
9
- }
10
- end
11
-
12
- def from_hash(json)
13
- conferences = deserialize_conferences(json['conferences'])
14
-
15
- League.new(conferences:)
16
- end
17
-
18
- def deserialize(string)
19
- json = JSON.parse(string)
20
-
21
- from_hash(json)
22
- end
23
-
24
- def serialize(league)
25
- to_hash(league).to_json
26
- end
27
-
28
- private
29
-
30
- ## Deserialization
31
-
32
- def deserialize_conferences(conferences)
33
- (conferences || []).map do |conference_id, conference_hash|
34
- Conference.new(
35
- id: conference_id,
36
- name: conference_hash['name'],
37
- divisions: deserialize_divisions(conference_hash['divisions'])
38
- )
39
- end
40
- end
41
-
42
- def deserialize_divisions(divisions)
43
- (divisions || []).map do |division_id, division_hash|
44
- Division.new(
45
- id: division_id,
46
- name: division_hash['name'],
47
- teams: deserialize_teams(division_hash['teams'])
48
- )
49
- end
50
- end
51
-
52
- def deserialize_teams(teams)
53
- (teams || []).map do |team_id, team_hash|
54
- Team.new(
55
- id: team_id,
56
- name: team_hash['name']
57
- )
58
- end
59
- end
60
-
61
- ## Serialization
62
-
63
- def serialize_conferences(conferences)
64
- conferences.to_h do |conference|
65
- [
66
- conference.id,
67
- {
68
- 'name' => conference.name,
69
- 'divisions' => serialize_divisions(conference.divisions)
70
- }
71
- ]
72
- end
73
- end
74
-
75
- def serialize_divisions(divisions)
76
- divisions.to_h do |division|
77
- [
78
- division.id,
79
- {
80
- 'name' => division.name,
81
- 'teams' => serialize_teams(division.teams)
82
- }
83
- ]
84
- end
85
- end
86
-
87
- def serialize_teams(teams)
88
- teams.to_h do |team|
89
- [
90
- team.id,
91
- {
92
- 'name' => team.name
93
- }
94
- ]
95
- end
96
- end
97
- end
98
- end
99
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Basketball
4
- module Scheduling
5
- class SeasonGame < Game
6
- end
7
- end
8
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Basketball
4
- module Scheduling
5
- class Team < Entity
6
- attr_reader :name
7
-
8
- def initialize(id:, name: '')
9
- super(id)
10
-
11
- @name = name.to_s
12
-
13
- freeze
14
- end
15
-
16
- def to_s
17
- "[#{super}] #{name}"
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'scheduling/cli'
4
-
5
- module Basketball
6
- module Scheduling
7
- class ConferenceAlreadyRegisteredError < StandardError; end
8
- class DivisionAlreadyRegisteredError < StandardError; end
9
- class TeamAlreadyRegisteredError < StandardError; end
10
-
11
- class BadConferencesSizeError < StandardError; end
12
- class BadDivisionsSizeError < StandardError; end
13
- class BadTeamsSizeError < StandardError; end
14
-
15
- class UnknownTeamError < StandardError; end
16
- end
17
- end