basketball 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile +11 -0
- data/README.md +26 -20
- data/basketball.gemspec +0 -11
- data/lib/basketball/drafting/engine_serializer.rb +62 -50
- data/lib/basketball/scheduling/calendar_serializer.rb +30 -20
- data/lib/basketball/scheduling/league_serializer.rb +25 -16
- data/lib/basketball/version.rb +1 -1
- metadata +2 -142
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00ac0278bb2e786c5a68b3cc7ac8fd5d49005f9f9a01fad32501c75a00880dce
|
4
|
+
data.tar.gz: 4b76f9d42a702a206c837346de20396c6948c9bcb071a4143610e8179ba93c64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 806f800744de18f81e590cd712adf83592e372b8f1b19c3b8f9a6e702c7fbc04981380ba784b63436f2cc34d5f80238c0fce53366eed8a2a8a63eb9b64cb69c4
|
7
|
+
data.tar.gz: acffa65b0315e7d5ec6638cd92c217e9aa665787114935d0859a4b6b02cfb0c8afd6e66d7914de6b147d6878d83ca210b2d5f5bfbdeb748784f559300fe79d46
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
#### 0.0.7 - May 14th, 2023
|
2
|
+
|
3
|
+
* Added #to_hash and #from_hash serializer methods to allow larger consumer json constructions more directly.
|
4
|
+
* Opt for string keys during serialization/deserialization.
|
5
|
+
|
1
6
|
#### 0.0.6 - May 11th, 2023
|
2
7
|
|
3
8
|
* Added Scheduling module that can generate full schedules for entire league.
|
data/Gemfile
CHANGED
@@ -3,3 +3,14 @@
|
|
3
3
|
source 'https://rubygems.org'
|
4
4
|
|
5
5
|
gemspec
|
6
|
+
|
7
|
+
gem 'bundler-audit', '~>0.9'
|
8
|
+
gem 'guard-rspec', '~>4.7'
|
9
|
+
gem 'pry', '~>0.14'
|
10
|
+
gem 'rake', '~>13.0'
|
11
|
+
gem 'rspec', '~>3.12'
|
12
|
+
gem 'rubocop', '~>1.49'
|
13
|
+
gem 'rubocop-rake', '~>0.6'
|
14
|
+
gem 'rubocop-rspec', '~>2.20'
|
15
|
+
gem 'simplecov', '~>0.22'
|
16
|
+
gem 'simplecov-console', '~>0.9'
|
data/README.md
CHANGED
@@ -32,6 +32,10 @@ This library is broken down into several bounded contexts that can be consumed e
|
|
32
32
|
|
33
33
|
![Basketball Architecture - Overview](/docs/architecture/overview.png)
|
34
34
|
|
35
|
+
#### Command Line Interfaces
|
36
|
+
|
37
|
+
Each module is meant to be interfaced with using its Ruby API by consuming applications. Each module also ships with a CLI script (backed by a module service) which a user can interact with to emulate different portions of the league management process. Technically speaking, the CLI provides an example application built on top of the each individual core module. Each module section below should contain with it example CLI calls.
|
38
|
+
|
35
39
|
## Drafting Module
|
36
40
|
|
37
41
|
The drafting module is responsible for providing a turn-based iterator allowing the consumer to either manually pick or simulate picks. Here is a cartoon showing the major components:
|
@@ -53,65 +57,65 @@ Element | Description
|
|
53
57
|
**Sim Event** | Result event emitted when a player is automatically selected by a front office.
|
54
58
|
**Skip Event** | Result event emitted when a front office decides to skip a round.
|
55
59
|
|
56
|
-
|
60
|
+
#### The Drafting CLI
|
57
61
|
|
58
|
-
The drafting module
|
62
|
+
The drafting module's main object: `Basketball::Drafting::Engine` is a stateful iterator. Each time a CLI command is executed, it's results will be re-saved to disk so the output file can then be used as the next command's input file to string together commands.
|
59
63
|
|
60
|
-
|
64
|
+
###### Generate a Fresh Draft
|
61
65
|
|
62
66
|
```zsh
|
63
67
|
basketball-draft -o tmp/draft.json
|
64
68
|
```
|
65
69
|
|
66
|
-
|
70
|
+
###### N Top Available Players
|
67
71
|
|
68
72
|
```zsh
|
69
73
|
basketball-draft -i tmp/draft.json -t 10
|
70
74
|
```
|
71
75
|
|
72
|
-
|
76
|
+
###### N Top Available Players for a Position
|
73
77
|
|
74
78
|
```zsh
|
75
79
|
basketball-draft -i tmp/draft.json -t 10 -q PG
|
76
80
|
```
|
77
81
|
|
78
|
-
|
82
|
+
###### Output Current Rosters
|
79
83
|
|
80
84
|
```zsh
|
81
85
|
basketball-draft -i tmp/draft.json -r
|
82
86
|
```
|
83
87
|
|
84
|
-
|
88
|
+
###### Output Event Log
|
85
89
|
|
86
90
|
```zsh
|
87
91
|
basketball-draft -i tmp/draft.json -l
|
88
92
|
```
|
89
93
|
|
90
|
-
|
94
|
+
###### Simulate N Picks
|
91
95
|
|
92
96
|
```zsh
|
93
97
|
basketball-draft -i tmp/draft.json -s 10
|
94
98
|
```
|
95
99
|
|
96
|
-
|
100
|
+
###### Skip N Picks
|
97
101
|
|
98
102
|
```zsh
|
99
103
|
basketball-draft -i tmp/draft.json -x 10
|
100
104
|
```
|
101
105
|
|
102
|
-
|
106
|
+
###### Pick Players
|
103
107
|
|
104
108
|
```zsh
|
105
109
|
basketball-draft -i tmp/draft.json -p P-100,P-200,P-300
|
106
110
|
```
|
107
111
|
|
108
|
-
|
112
|
+
###### Simulate the Rest of the Draft
|
109
113
|
|
110
114
|
```zsh
|
111
115
|
basketball-draft -i tmp/draft.json -a
|
112
116
|
```
|
113
117
|
|
114
|
-
|
118
|
+
###### Help Menu
|
115
119
|
|
116
120
|
```zsh
|
117
121
|
basketball-draft -h
|
@@ -138,49 +142,51 @@ Element | Description
|
|
138
142
|
**Scheduling** | Bounded context (sub-module) dealing with matchup and calendar generation.
|
139
143
|
**Team** | Identified by an ID and described by a name: represents a basketball team that can be scheduled.
|
140
144
|
|
141
|
-
|
145
|
+
#### The Scheduling CLI
|
146
|
+
|
147
|
+
###### Generate League
|
142
148
|
|
143
149
|
```zsh
|
144
150
|
basketball-schedule -o tmp/league.json
|
145
151
|
```
|
146
152
|
|
147
|
-
|
153
|
+
###### Generate Calendar From League
|
148
154
|
|
149
155
|
```zsh
|
150
156
|
basketball-schedule -i tmp/league.json -o tmp/calendar.json
|
151
157
|
```
|
152
158
|
|
153
|
-
|
159
|
+
###### Generate Calendar From League For a Specific Year
|
154
160
|
|
155
161
|
```zsh
|
156
162
|
basketball-schedule -i tmp/league.json -o tmp/calendar.json -y 2005
|
157
163
|
```
|
158
164
|
|
159
|
-
|
165
|
+
###### Output a Generated Calendar's Matchups
|
160
166
|
|
161
167
|
```zsh
|
162
168
|
basketball-schedule -c tmp/calendar.json
|
163
169
|
```
|
164
170
|
|
165
|
-
|
171
|
+
###### Output a Generated Calendar's Matchups For a Specific Team
|
166
172
|
|
167
173
|
```zsh
|
168
174
|
basketball-schedule -c tmp/calendar.json -t C0-D0-T0
|
169
175
|
```
|
170
176
|
|
171
|
-
|
177
|
+
###### Output a Generated Calendar's Matchups For a Specific Date
|
172
178
|
|
173
179
|
```zsh
|
174
180
|
basketball-schedule -c tmp/calendar.json -d 2005-02-03
|
175
181
|
```
|
176
182
|
|
177
|
-
|
183
|
+
###### Output a Generated Calendar's Matchups For a Specific Team and Date
|
178
184
|
|
179
185
|
```zsh
|
180
186
|
basketball-schedule -c tmp/calendar.json -d 2005-02-03 -t C0-D0-T0
|
181
187
|
```
|
182
188
|
|
183
|
-
|
189
|
+
###### Help Menu
|
184
190
|
|
185
191
|
```zsh
|
186
192
|
basketball-schedule -h
|
data/basketball.gemspec
CHANGED
@@ -33,15 +33,4 @@ Gem::Specification.new do |s|
|
|
33
33
|
|
34
34
|
s.add_dependency('faker', '~>3.2')
|
35
35
|
s.add_dependency('slop', '~>4.10')
|
36
|
-
|
37
|
-
s.add_development_dependency('bundler-audit', '~>0.9')
|
38
|
-
s.add_development_dependency('guard-rspec', '~>4.7')
|
39
|
-
s.add_development_dependency('pry', '~>0.14')
|
40
|
-
s.add_development_dependency('rake', '~>13.0')
|
41
|
-
s.add_development_dependency('rspec', '~>3.12')
|
42
|
-
s.add_development_dependency('rubocop', '~>1.49')
|
43
|
-
s.add_development_dependency('rubocop-rake', '~>0.6')
|
44
|
-
s.add_development_dependency('rubocop-rspec', '~>2.20')
|
45
|
-
s.add_development_dependency('simplecov', '~>0.22')
|
46
|
-
s.add_development_dependency('simplecov-console', '~>0.9')
|
47
36
|
end
|
@@ -17,8 +17,15 @@ module Basketball
|
|
17
17
|
|
18
18
|
private_constant :EVENT_CLASSES
|
19
19
|
|
20
|
-
def
|
21
|
-
|
20
|
+
def to_hash(engine)
|
21
|
+
{
|
22
|
+
'info' => serialize_info(engine),
|
23
|
+
'engine' => serialize_engine(engine),
|
24
|
+
'league' => serialize_league(engine)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def from_hash(json)
|
22
29
|
front_offices = deserialize_front_offices(json)
|
23
30
|
players = deserialize_players(json)
|
24
31
|
events = deserialize_events(json, players, front_offices)
|
@@ -29,39 +36,41 @@ module Basketball
|
|
29
36
|
events:
|
30
37
|
}
|
31
38
|
|
32
|
-
engine_opts[:rounds] = json.dig(
|
39
|
+
engine_opts[:rounds] = json.dig('engine', 'rounds') if json.dig('engine', 'rounds')
|
33
40
|
|
34
41
|
Engine.new(**engine_opts)
|
35
42
|
end
|
36
43
|
|
44
|
+
def deserialize(string)
|
45
|
+
json = JSON.parse(string)
|
46
|
+
|
47
|
+
from_hash(json)
|
48
|
+
end
|
49
|
+
|
37
50
|
def serialize(engine)
|
38
|
-
|
39
|
-
info: serialize_info(engine),
|
40
|
-
engine: serialize_engine(engine),
|
41
|
-
league: serialize_league(engine)
|
42
|
-
}.to_json
|
51
|
+
to_hash(engine).to_json
|
43
52
|
end
|
44
53
|
|
45
54
|
private
|
46
55
|
|
47
56
|
def serialize_engine(engine)
|
48
57
|
{
|
49
|
-
rounds
|
50
|
-
front_offices
|
51
|
-
players
|
52
|
-
events
|
58
|
+
'rounds' => engine.rounds,
|
59
|
+
'front_offices' => serialize_front_offices(engine),
|
60
|
+
'players' => serialize_players(engine),
|
61
|
+
'events' => serialize_events(engine.events)
|
53
62
|
}
|
54
63
|
end
|
55
64
|
|
56
65
|
def serialize_info(engine)
|
57
66
|
{
|
58
|
-
total_picks
|
59
|
-
current_round
|
60
|
-
current_round_pick
|
61
|
-
current_front_office
|
62
|
-
current_pick
|
63
|
-
remaining_picks
|
64
|
-
done
|
67
|
+
'total_picks' => engine.total_picks,
|
68
|
+
'current_round' => engine.current_round,
|
69
|
+
'current_round_pick' => engine.current_round_pick,
|
70
|
+
'current_front_office' => engine.current_front_office&.id,
|
71
|
+
'current_pick' => engine.current_pick,
|
72
|
+
'remaining_picks' => engine.remaining_picks,
|
73
|
+
'done' => engine.done?
|
65
74
|
}
|
66
75
|
end
|
67
76
|
|
@@ -72,14 +81,14 @@ module Basketball
|
|
72
81
|
[
|
73
82
|
roster.id,
|
74
83
|
{
|
75
|
-
players
|
84
|
+
'players' => roster.players.map(&:id)
|
76
85
|
}
|
77
86
|
]
|
78
87
|
end
|
79
88
|
|
80
89
|
{
|
81
|
-
free_agents
|
82
|
-
rosters
|
90
|
+
'free_agents' => league.free_agents.map(&:id),
|
91
|
+
'rosters' => rosters
|
83
92
|
}
|
84
93
|
end
|
85
94
|
|
@@ -88,10 +97,10 @@ module Basketball
|
|
88
97
|
[
|
89
98
|
front_office.id,
|
90
99
|
{
|
91
|
-
name
|
92
|
-
fuzz
|
93
|
-
depth
|
94
|
-
prioritized_positions
|
100
|
+
'name' => front_office.name,
|
101
|
+
'fuzz' => front_office.fuzz,
|
102
|
+
'depth' => front_office.depth,
|
103
|
+
'prioritized_positions' => front_office.prioritized_positions.map(&:code)
|
95
104
|
}
|
96
105
|
]
|
97
106
|
end
|
@@ -102,10 +111,10 @@ module Basketball
|
|
102
111
|
[
|
103
112
|
player.id,
|
104
113
|
{
|
105
|
-
first_name
|
106
|
-
last_name
|
107
|
-
overall
|
108
|
-
position
|
114
|
+
'first_name' => player.first_name,
|
115
|
+
'last_name' => player.last_name,
|
116
|
+
'overall' => player.overall,
|
117
|
+
'position' => player.position.code
|
109
118
|
}
|
110
119
|
]
|
111
120
|
end
|
@@ -114,29 +123,29 @@ module Basketball
|
|
114
123
|
def serialize_events(events)
|
115
124
|
events.map do |event|
|
116
125
|
{
|
117
|
-
type
|
118
|
-
front_office
|
119
|
-
pick
|
120
|
-
round
|
121
|
-
round_pick
|
126
|
+
'type' => event.class.name.split('::').last,
|
127
|
+
'front_office' => event.front_office.id,
|
128
|
+
'pick' => event.pick,
|
129
|
+
'round' => event.round,
|
130
|
+
'round_pick' => event.round_pick
|
122
131
|
}.tap do |hash|
|
123
|
-
hash[
|
132
|
+
hash['player'] = event.player.id if event.respond_to?(:player)
|
124
133
|
end
|
125
134
|
end
|
126
135
|
end
|
127
136
|
|
128
137
|
def deserialize_front_offices(json)
|
129
|
-
(json.dig(
|
130
|
-
prioritized_positions = (front_office_hash[
|
138
|
+
(json.dig('engine', 'front_offices') || []).map do |id, front_office_hash|
|
139
|
+
prioritized_positions = (front_office_hash['prioritized_positions'] || []).map do |v|
|
131
140
|
Position.new(v)
|
132
141
|
end
|
133
142
|
|
134
143
|
front_office_opts = {
|
135
144
|
id:,
|
136
|
-
name: front_office_hash[
|
145
|
+
name: front_office_hash['name'],
|
137
146
|
prioritized_positions:,
|
138
|
-
fuzz: front_office_hash[
|
139
|
-
depth: front_office_hash[
|
147
|
+
fuzz: front_office_hash['fuzz'],
|
148
|
+
depth: front_office_hash['depth']
|
140
149
|
}
|
141
150
|
|
142
151
|
FrontOffice.new(**front_office_opts)
|
@@ -144,26 +153,29 @@ module Basketball
|
|
144
153
|
end
|
145
154
|
|
146
155
|
def deserialize_players(json)
|
147
|
-
(json.dig(
|
148
|
-
player_opts =
|
156
|
+
(json.dig('engine', 'players') || []).map do |id, player_hash|
|
157
|
+
player_opts = {
|
149
158
|
id:,
|
150
|
-
|
151
|
-
|
159
|
+
first_name: player_hash['first_name'],
|
160
|
+
last_name: player_hash['last_name'],
|
161
|
+
overall: player_hash['overall'],
|
162
|
+
position: Position.new(player_hash['position'])
|
163
|
+
}
|
152
164
|
|
153
165
|
Player.new(**player_opts)
|
154
166
|
end
|
155
167
|
end
|
156
168
|
|
157
169
|
def deserialize_events(json, players, front_offices)
|
158
|
-
(json.dig(
|
159
|
-
event_opts = event_hash.slice(
|
160
|
-
front_office: front_offices.find { |t| t.id == event_hash[
|
170
|
+
(json.dig('engine', 'events') || []).map do |event_hash|
|
171
|
+
event_opts = event_hash.slice('pick', 'round', 'round_pick').merge(
|
172
|
+
front_office: front_offices.find { |t| t.id == event_hash['front_office'] }
|
161
173
|
)
|
162
174
|
|
163
|
-
class_constant = EVENT_CLASSES.fetch(event_hash[
|
175
|
+
class_constant = EVENT_CLASSES.fetch(event_hash['type'])
|
164
176
|
|
165
177
|
if [PickEvent, SimEvent].include?(class_constant)
|
166
|
-
event_opts[:player] = players.find { |p| p.id == event_hash[
|
178
|
+
event_opts[:player] = players.find { |p| p.id == event_hash['player'] }
|
167
179
|
end
|
168
180
|
|
169
181
|
class_constant.new(**event_opts)
|
@@ -12,21 +12,31 @@ module Basketball
|
|
12
12
|
'SeasonGame' => SeasonGame
|
13
13
|
}.freeze
|
14
14
|
|
15
|
-
def
|
16
|
-
|
15
|
+
def to_hash(calendar)
|
16
|
+
teams = calendar.games.flat_map(&:teams).uniq
|
17
17
|
|
18
|
+
{
|
19
|
+
'year' => calendar.preseason_start_date.year,
|
20
|
+
'teams' => serialize_teams(teams),
|
21
|
+
'games' => serialize_games(calendar.games)
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def from_hash(json)
|
18
26
|
Calendar.new(
|
19
|
-
year: json[
|
27
|
+
year: json['year'].to_i,
|
20
28
|
games: deserialize_games(json)
|
21
29
|
)
|
22
30
|
end
|
23
31
|
|
32
|
+
def deserialize(string)
|
33
|
+
json = JSON.parse(string)
|
34
|
+
|
35
|
+
from_hash(json)
|
36
|
+
end
|
37
|
+
|
24
38
|
def serialize(calendar)
|
25
|
-
|
26
|
-
year: calendar.preseason_start_date.year,
|
27
|
-
teams: serialize_teams(calendar.games.flat_map(&:teams).uniq),
|
28
|
-
games: serialize_games(calendar.games)
|
29
|
-
}.to_json
|
39
|
+
to_hash(calendar).to_json
|
30
40
|
end
|
31
41
|
|
32
42
|
private
|
@@ -34,20 +44,20 @@ module Basketball
|
|
34
44
|
## Deserialization
|
35
45
|
|
36
46
|
def deserialize_games(json)
|
37
|
-
teams = deserialize_teams(json[
|
47
|
+
teams = deserialize_teams(json['teams'])
|
38
48
|
|
39
|
-
(json[
|
40
|
-
GAME_CLASSES.fetch(game_hash[
|
41
|
-
date: Date.parse(game_hash[
|
42
|
-
home_team: teams.fetch(game_hash[
|
43
|
-
away_team: teams.fetch(game_hash[
|
49
|
+
(json['games'] || []).map do |game_hash|
|
50
|
+
GAME_CLASSES.fetch(game_hash['type']).new(
|
51
|
+
date: Date.parse(game_hash['date']),
|
52
|
+
home_team: teams.fetch(game_hash['home_team']),
|
53
|
+
away_team: teams.fetch(game_hash['away_team'])
|
44
54
|
)
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
48
58
|
def deserialize_teams(teams)
|
49
59
|
(teams || []).to_h do |id, team_hash|
|
50
|
-
team = Team.new(id:, name: team_hash[
|
60
|
+
team = Team.new(id:, name: team_hash['name'])
|
51
61
|
|
52
62
|
[
|
53
63
|
team.id,
|
@@ -63,7 +73,7 @@ module Basketball
|
|
63
73
|
[
|
64
74
|
team.id,
|
65
75
|
{
|
66
|
-
name
|
76
|
+
'name' => team.name
|
67
77
|
}
|
68
78
|
]
|
69
79
|
end
|
@@ -72,10 +82,10 @@ module Basketball
|
|
72
82
|
def serialize_games(games)
|
73
83
|
games.sort_by(&:date).map do |game|
|
74
84
|
{
|
75
|
-
type
|
76
|
-
date
|
77
|
-
home_team
|
78
|
-
away_team
|
85
|
+
'type' => game.class.name.split('::').last,
|
86
|
+
'date' => game.date.to_s,
|
87
|
+
'home_team' => game.home_team.id,
|
88
|
+
'away_team' => game.away_team.id
|
79
89
|
}
|
80
90
|
end
|
81
91
|
end
|
@@ -3,17 +3,26 @@
|
|
3
3
|
module Basketball
|
4
4
|
module Scheduling
|
5
5
|
class LeagueSerializer
|
6
|
-
def
|
7
|
-
|
8
|
-
|
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'])
|
9
14
|
|
10
15
|
League.new(conferences:)
|
11
16
|
end
|
12
17
|
|
18
|
+
def deserialize(string)
|
19
|
+
json = JSON.parse(string)
|
20
|
+
|
21
|
+
from_hash(json)
|
22
|
+
end
|
23
|
+
|
13
24
|
def serialize(league)
|
14
|
-
|
15
|
-
conferences: serialize_conferences(league.conferences)
|
16
|
-
}.to_json
|
25
|
+
to_hash(league).to_json
|
17
26
|
end
|
18
27
|
|
19
28
|
private
|
@@ -24,8 +33,8 @@ module Basketball
|
|
24
33
|
(conferences || []).map do |conference_id, conference_hash|
|
25
34
|
Conference.new(
|
26
35
|
id: conference_id,
|
27
|
-
name: conference_hash[
|
28
|
-
divisions: deserialize_divisions(conference_hash[
|
36
|
+
name: conference_hash['name'],
|
37
|
+
divisions: deserialize_divisions(conference_hash['divisions'])
|
29
38
|
)
|
30
39
|
end
|
31
40
|
end
|
@@ -34,8 +43,8 @@ module Basketball
|
|
34
43
|
(divisions || []).map do |division_id, division_hash|
|
35
44
|
Division.new(
|
36
45
|
id: division_id,
|
37
|
-
name: division_hash[
|
38
|
-
teams: deserialize_teams(division_hash[
|
46
|
+
name: division_hash['name'],
|
47
|
+
teams: deserialize_teams(division_hash['teams'])
|
39
48
|
)
|
40
49
|
end
|
41
50
|
end
|
@@ -44,7 +53,7 @@ module Basketball
|
|
44
53
|
(teams || []).map do |team_id, team_hash|
|
45
54
|
Team.new(
|
46
55
|
id: team_id,
|
47
|
-
name: team_hash[
|
56
|
+
name: team_hash['name']
|
48
57
|
)
|
49
58
|
end
|
50
59
|
end
|
@@ -56,8 +65,8 @@ module Basketball
|
|
56
65
|
[
|
57
66
|
conference.id,
|
58
67
|
{
|
59
|
-
name
|
60
|
-
divisions
|
68
|
+
'name' => conference.name,
|
69
|
+
'divisions' => serialize_divisions(conference.divisions)
|
61
70
|
}
|
62
71
|
]
|
63
72
|
end
|
@@ -68,8 +77,8 @@ module Basketball
|
|
68
77
|
[
|
69
78
|
division.id,
|
70
79
|
{
|
71
|
-
name
|
72
|
-
teams
|
80
|
+
'name' => division.name,
|
81
|
+
'teams' => serialize_teams(division.teams)
|
73
82
|
}
|
74
83
|
]
|
75
84
|
end
|
@@ -80,7 +89,7 @@ module Basketball
|
|
80
89
|
[
|
81
90
|
team.id,
|
82
91
|
{
|
83
|
-
name
|
92
|
+
'name' => team.name
|
84
93
|
}
|
85
94
|
]
|
86
95
|
end
|
data/lib/basketball/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: basketball
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faker
|
@@ -38,146 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.10'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: bundler-audit
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.9'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.9'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: guard-rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4.7'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '4.7'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0.14'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0.14'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '13.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '13.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.12'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '3.12'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '1.49'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '1.49'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-rake
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.6'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.6'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rubocop-rspec
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '2.20'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '2.20'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: simplecov
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0.22'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0.22'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: simplecov-console
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0.9'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0.9'
|
181
41
|
description: |2
|
182
42
|
This library is meant to serve as the domain for a basketball league/season simulator/turn-based game.
|
183
43
|
It models core ideas such as: players, general managers, draft strategy, drafting, season generation, season simultation,
|