playoffs 1.0.0 → 1.0.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/playoffs/cli.rb +27 -45
- data/lib/playoffs/loader.rb +47 -0
- data/lib/playoffs/random_simulator.rb +19 -0
- data/lib/playoffs/simulator.rb +14 -0
- data/lib/playoffs/version.rb +1 -1
- data/lib/playoffs.rb +2 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f197d46a02950cbcb057d745d07a3926082e09efc8e91c4935e84675c0c52f60
|
4
|
+
data.tar.gz: 746469e25a41e507424a225c4fb05acd6fe38e1808478b07154733a3286b4aa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ecc670d3b1736f563772f3eaa21b224cc641295c618cb2b9eeb05cd325341a59784ea3d06c988c3667557a6f3a162a4a238c9f43d4b0ae8219c8b2aef72ab69
|
7
|
+
data.tar.gz: 86fd1b47d7ffa6209b190c122d6df0af7b6b63d13fa4f9c435000b6cc29461091f88b64e17d05a39b813947d5cd32fe44648376177c2808d185dba3bf2e0dc5c
|
data/CHANGELOG.md
CHANGED
data/lib/playoffs/cli.rb
CHANGED
@@ -15,10 +15,25 @@ module Playoffs
|
|
15
15
|
sig { returns(String) }
|
16
16
|
attr_reader :script
|
17
17
|
|
18
|
-
sig {
|
19
|
-
|
18
|
+
sig { returns(Loader) }
|
19
|
+
attr_reader :loader
|
20
|
+
|
21
|
+
sig { returns(Simulator) }
|
22
|
+
attr_reader :simulator
|
23
|
+
|
24
|
+
sig do
|
25
|
+
params(
|
26
|
+
io: T.any(IO, StringIO),
|
27
|
+
script: String,
|
28
|
+
loader: Loader,
|
29
|
+
simulator: Simulator
|
30
|
+
).void
|
31
|
+
end
|
32
|
+
def initialize(io, script: 'bin/playoffs', loader: Loader.new, simulator: RandomSimulator.new)
|
20
33
|
@io = io
|
21
34
|
@script = script
|
35
|
+
@loader = loader
|
36
|
+
@simulator = simulator
|
22
37
|
end
|
23
38
|
|
24
39
|
sig { params(args: T::Array[String]).returns(Cli) }
|
@@ -45,39 +60,6 @@ module Playoffs
|
|
45
60
|
self
|
46
61
|
end
|
47
62
|
|
48
|
-
protected
|
49
|
-
|
50
|
-
sig { overridable.params(path: String, tournament: Tournament).returns(Cli) }
|
51
|
-
def save(path, tournament)
|
52
|
-
FileUtils.mkdir_p(File.dirname(path))
|
53
|
-
|
54
|
-
File.open(path, 'w') { |out| YAML.dump(tournament, out) }
|
55
|
-
|
56
|
-
self
|
57
|
-
end
|
58
|
-
|
59
|
-
sig { overridable.params(path: String).returns(Tournament) }
|
60
|
-
def load(path)
|
61
|
-
YAML.load_file(
|
62
|
-
path,
|
63
|
-
permitted_classes: [
|
64
|
-
BestOf,
|
65
|
-
Round,
|
66
|
-
Series,
|
67
|
-
Team,
|
68
|
-
Tournament
|
69
|
-
],
|
70
|
-
aliases: true
|
71
|
-
)
|
72
|
-
end
|
73
|
-
|
74
|
-
sig { overridable.params(series: Series).returns(Team) }
|
75
|
-
def pick(series)
|
76
|
-
index = rand(0..1)
|
77
|
-
|
78
|
-
T.must(series.teams[index])
|
79
|
-
end
|
80
|
-
|
81
63
|
private
|
82
64
|
|
83
65
|
# rubocop:disable Metrics/AbcSize
|
@@ -119,28 +101,28 @@ module Playoffs
|
|
119
101
|
|
120
102
|
tournament = Basketball.tournament_for(eastern_teams:, western_teams:)
|
121
103
|
|
122
|
-
save(path, tournament)
|
104
|
+
loader.save(path, tournament)
|
123
105
|
|
124
106
|
self
|
125
107
|
end
|
126
108
|
|
127
109
|
sig { params(path: String, _action: String, _args: T::Array[String]).returns(Cli) }
|
128
110
|
def run_bracket(path, _action, _args)
|
129
|
-
io.puts(load(path).print_bracket)
|
111
|
+
io.puts(loader.load(path).print_bracket)
|
130
112
|
|
131
113
|
self
|
132
114
|
end
|
133
115
|
|
134
116
|
sig { params(path: String, _action: String, _args: T::Array[String]).returns(Cli) }
|
135
117
|
def run_rounds(path, _action, _args)
|
136
|
-
io.puts(load(path).print_rounds)
|
118
|
+
io.puts(loader.load(path).print_rounds)
|
137
119
|
|
138
120
|
self
|
139
121
|
end
|
140
122
|
|
141
123
|
sig { params(path: String, _action: String, _args: T::Array[String]).returns(Cli) }
|
142
124
|
def run_up(path, _action, _args)
|
143
|
-
tournament = load(path)
|
125
|
+
tournament = loader.load(path)
|
144
126
|
|
145
127
|
series = tournament.up_next
|
146
128
|
|
@@ -154,26 +136,26 @@ module Playoffs
|
|
154
136
|
id = args[2].to_s
|
155
137
|
|
156
138
|
team = Team.new(id)
|
157
|
-
tournament = load(path)
|
139
|
+
tournament = loader.load(path)
|
158
140
|
series = tournament.up_next
|
159
141
|
|
160
142
|
T.must(series).win(team)
|
161
143
|
|
162
144
|
io.puts(series)
|
163
145
|
|
164
|
-
save(path, tournament)
|
146
|
+
loader.save(path, tournament)
|
165
147
|
|
166
148
|
self
|
167
149
|
end
|
168
150
|
|
169
151
|
sig { params(path: String, _action: String, _args: T::Array[String]).returns(Cli) }
|
170
152
|
def run_sim(path, _action, _args)
|
171
|
-
tournament = load(path)
|
153
|
+
tournament = loader.load(path)
|
172
154
|
|
173
155
|
total = 0
|
174
156
|
# while not nil (and assign series)
|
175
157
|
while (series = tournament.up_next)
|
176
|
-
team = pick(series)
|
158
|
+
team = simulator.pick(series)
|
177
159
|
|
178
160
|
series.win(team)
|
179
161
|
|
@@ -184,14 +166,14 @@ module Playoffs
|
|
184
166
|
|
185
167
|
io.puts(tournament.winner.to_s)
|
186
168
|
|
187
|
-
save(path, tournament)
|
169
|
+
loader.save(path, tournament)
|
188
170
|
|
189
171
|
self
|
190
172
|
end
|
191
173
|
|
192
174
|
sig { params(path: String, _action: String, _args: T::Array[String]).returns(Cli) }
|
193
175
|
def run_winner(path, _action, _args)
|
194
|
-
tournament = load(path)
|
176
|
+
tournament = loader.load(path)
|
195
177
|
|
196
178
|
io.puts(tournament.winner) if tournament.over?
|
197
179
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Playoffs
|
5
|
+
# Knows how to (de)serialize a tournament and read/write from/to disk.
|
6
|
+
class Loader
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
sig { overridable.params(tournament: Tournament).returns(String) }
|
10
|
+
def serialize(tournament)
|
11
|
+
io = StringIO.new
|
12
|
+
|
13
|
+
YAML.dump(tournament, io)
|
14
|
+
|
15
|
+
io.string
|
16
|
+
end
|
17
|
+
|
18
|
+
sig { overridable.params(string: String).returns(Tournament) }
|
19
|
+
def deserialize(string)
|
20
|
+
YAML.load(
|
21
|
+
string,
|
22
|
+
permitted_classes: [
|
23
|
+
BestOf,
|
24
|
+
Round,
|
25
|
+
Series,
|
26
|
+
Team,
|
27
|
+
Tournament
|
28
|
+
],
|
29
|
+
aliases: true
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
sig { overridable.params(path: String, tournament: Tournament).void }
|
34
|
+
def save(path, tournament)
|
35
|
+
FileUtils.mkdir_p(File.dirname(path))
|
36
|
+
|
37
|
+
File.write(path, serialize(tournament))
|
38
|
+
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
sig { overridable.params(path: String).returns(Tournament) }
|
43
|
+
def load(path)
|
44
|
+
deserialize(File.read(path))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative 'simulator'
|
5
|
+
|
6
|
+
module Playoffs
|
7
|
+
# Very simple example of how to select a winner for a series.
|
8
|
+
class RandomSimulator
|
9
|
+
extend T::Sig
|
10
|
+
include Simulator
|
11
|
+
|
12
|
+
sig { override.params(series: Series).returns(Team) }
|
13
|
+
def pick(series)
|
14
|
+
index = rand(0..1)
|
15
|
+
|
16
|
+
T.must(series.teams[index])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Playoffs
|
5
|
+
# Describes what functionality a Simulator should implement.
|
6
|
+
module Simulator
|
7
|
+
extend T::Sig
|
8
|
+
extend T::Helpers
|
9
|
+
interface!
|
10
|
+
|
11
|
+
sig { abstract.params(series: Series).returns(Team) }
|
12
|
+
def pick(series); end
|
13
|
+
end
|
14
|
+
end
|
data/lib/playoffs/version.rb
CHANGED
data/lib/playoffs.rb
CHANGED
@@ -9,6 +9,8 @@ require_relative 'playoffs/basketball'
|
|
9
9
|
require_relative 'playoffs/best_of'
|
10
10
|
require_relative 'playoffs/cli'
|
11
11
|
require_relative 'playoffs/contestant'
|
12
|
+
require_relative 'playoffs/loader'
|
13
|
+
require_relative 'playoffs/random_simulator'
|
12
14
|
require_relative 'playoffs/round'
|
13
15
|
require_relative 'playoffs/series'
|
14
16
|
require_relative 'playoffs/team'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playoffs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
@@ -276,8 +276,11 @@ files:
|
|
276
276
|
- lib/playoffs/best_of.rb
|
277
277
|
- lib/playoffs/cli.rb
|
278
278
|
- lib/playoffs/contestant.rb
|
279
|
+
- lib/playoffs/loader.rb
|
280
|
+
- lib/playoffs/random_simulator.rb
|
279
281
|
- lib/playoffs/round.rb
|
280
282
|
- lib/playoffs/series.rb
|
283
|
+
- lib/playoffs/simulator.rb
|
281
284
|
- lib/playoffs/team.rb
|
282
285
|
- lib/playoffs/tournament.rb
|
283
286
|
- lib/playoffs/tournament/bracketable.rb
|