basketball 0.0.4 → 0.0.6

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -2
  3. data/CODE_OF_CONDUCT.md +1 -1
  4. data/README.md +120 -18
  5. data/basketball.gemspec +1 -1
  6. data/exe/basketball-schedule +7 -0
  7. data/lib/basketball/drafting/cli.rb +15 -15
  8. data/lib/basketball/drafting/engine.rb +43 -42
  9. data/lib/basketball/drafting/engine_serializer.rb +41 -49
  10. data/lib/basketball/drafting/event.rb +10 -10
  11. data/lib/basketball/drafting/front_office.rb +9 -4
  12. data/lib/basketball/drafting/league.rb +70 -0
  13. data/lib/basketball/drafting/pick_event.rb +3 -3
  14. data/lib/basketball/drafting/roster.rb +18 -24
  15. data/lib/basketball/drafting/sim_event.rb +3 -3
  16. data/lib/basketball/drafting.rb +6 -0
  17. data/lib/basketball/scheduling/calendar.rb +121 -0
  18. data/lib/basketball/scheduling/calendar_serializer.rb +84 -0
  19. data/lib/basketball/scheduling/cli.rb +198 -0
  20. data/lib/basketball/scheduling/conference.rb +57 -0
  21. data/lib/basketball/scheduling/coordinator.rb +180 -0
  22. data/lib/basketball/scheduling/division.rb +43 -0
  23. data/lib/basketball/scheduling/game.rb +32 -0
  24. data/lib/basketball/scheduling/league.rb +114 -0
  25. data/lib/basketball/scheduling/league_serializer.rb +90 -0
  26. data/lib/basketball/scheduling/preseason_game.rb +11 -0
  27. data/lib/basketball/scheduling/season_game.rb +8 -0
  28. data/lib/basketball/scheduling/team.rb +21 -0
  29. data/lib/basketball/scheduling.rb +17 -0
  30. data/lib/basketball/value_object.rb +16 -7
  31. data/lib/basketball/version.rb +1 -1
  32. data/lib/basketball.rb +1 -0
  33. metadata +18 -3
  34. data/lib/basketball/drafting/team.rb +0 -28
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basketball
4
+ module Scheduling
5
+ class PreseasonGame < Game
6
+ def to_s
7
+ "#{super} (preseason)"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basketball
4
+ module Scheduling
5
+ class SeasonGame < Game
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,17 @@
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
@@ -4,14 +4,23 @@ module Basketball
4
4
  class ValueObject
5
5
  include Comparable
6
6
 
7
- # NOTE: This current implementation most likely does not work for deep inheritance trees.
8
7
  class << self
9
- def value_keys
10
- @value_keys ||= []
8
+ def all_value_keys
9
+ @all_value_keys ||= ancestors.flat_map do |ancestor|
10
+ if ancestor < Basketball::ValueObject
11
+ ancestor.value_keys
12
+ else
13
+ []
14
+ end
15
+ end.uniq.sort
16
+ end
17
+
18
+ def all_sorted_value_keys
19
+ all_value_keys.sort
11
20
  end
12
21
 
13
- def sorted_value_keys
14
- value_keys.sort
22
+ def value_keys
23
+ @value_keys ||= []
15
24
  end
16
25
 
17
26
  def attr_reader_value(*keys)
@@ -26,7 +35,7 @@ module Basketball
26
35
  end
27
36
 
28
37
  def to_h
29
- self.class.sorted_value_keys.to_h { |k| [k, send(k)] }
38
+ self.class.all_sorted_value_keys.to_h { |k| [k, send(k)] }
30
39
  end
31
40
 
32
41
  def [](key)
@@ -47,7 +56,7 @@ module Basketball
47
56
  end
48
57
 
49
58
  def all_sorted_values
50
- self.class.sorted_value_keys.map { |k| self[k] }
59
+ self.class.all_sorted_value_keys.map { |k| self[k] }
51
60
  end
52
61
  end
53
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Basketball
4
- VERSION = '0.0.4'
4
+ VERSION = '0.0.6'
5
5
  end
data/lib/basketball.rb CHANGED
@@ -13,3 +13,4 @@ require_relative 'basketball/value_object'
13
13
 
14
14
  # Submodules
15
15
  require_relative 'basketball/drafting'
16
+ require_relative 'basketball/scheduling'
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
4
+ version: 0.0.6
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-05 00:00:00.000000000 Z
11
+ date: 2023-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faker
@@ -186,6 +186,7 @@ email:
186
186
  - mattruggio@icloud.com
187
187
  executables:
188
188
  - basketball-draft
189
+ - basketball-schedule
189
190
  extensions: []
190
191
  extra_rdoc_files: []
191
192
  files:
@@ -202,6 +203,7 @@ files:
202
203
  - Rakefile
203
204
  - basketball.gemspec
204
205
  - exe/basketball-draft
206
+ - exe/basketball-schedule
205
207
  - lib/basketball.rb
206
208
  - lib/basketball/drafting.rb
207
209
  - lib/basketball/drafting/cli.rb
@@ -209,6 +211,7 @@ files:
209
211
  - lib/basketball/drafting/engine_serializer.rb
210
212
  - lib/basketball/drafting/event.rb
211
213
  - lib/basketball/drafting/front_office.rb
214
+ - lib/basketball/drafting/league.rb
212
215
  - lib/basketball/drafting/pick_event.rb
213
216
  - lib/basketball/drafting/player.rb
214
217
  - lib/basketball/drafting/player_search.rb
@@ -216,8 +219,20 @@ files:
216
219
  - lib/basketball/drafting/roster.rb
217
220
  - lib/basketball/drafting/sim_event.rb
218
221
  - lib/basketball/drafting/skip_event.rb
219
- - lib/basketball/drafting/team.rb
220
222
  - lib/basketball/entity.rb
223
+ - lib/basketball/scheduling.rb
224
+ - lib/basketball/scheduling/calendar.rb
225
+ - lib/basketball/scheduling/calendar_serializer.rb
226
+ - lib/basketball/scheduling/cli.rb
227
+ - lib/basketball/scheduling/conference.rb
228
+ - lib/basketball/scheduling/coordinator.rb
229
+ - lib/basketball/scheduling/division.rb
230
+ - lib/basketball/scheduling/game.rb
231
+ - lib/basketball/scheduling/league.rb
232
+ - lib/basketball/scheduling/league_serializer.rb
233
+ - lib/basketball/scheduling/preseason_game.rb
234
+ - lib/basketball/scheduling/season_game.rb
235
+ - lib/basketball/scheduling/team.rb
221
236
  - lib/basketball/value_object.rb
222
237
  - lib/basketball/version.rb
223
238
  homepage: https://github.com/mattruggio/basketball
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Basketball
4
- module Drafting
5
- class Team < Entity
6
- extend Forwardable
7
-
8
- attr_reader :name, :front_office
9
-
10
- def_delegators :front_office, :pick
11
-
12
- def initialize(id:, name: '', front_office: FrontOffice.new)
13
- super(id)
14
-
15
- raise ArgumentError, 'front_office is required' unless front_office
16
-
17
- @name = name.to_s
18
- @front_office = front_office
19
-
20
- freeze
21
- end
22
-
23
- def to_s
24
- "[#{super}] #{name}"
25
- end
26
- end
27
- end
28
- end