basketball 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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