playoffs 1.0.0
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 +7 -0
- data/.bundle/config +2 -0
- data/.editorconfig +8 -0
- data/.github/workflows/ci.yaml +29 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +34 -0
- data/.tool-versions +1 -0
- data/.vscode/settings.json +5 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +73 -0
- data/Gemfile +5 -0
- data/Guardfile +17 -0
- data/LICENSE +5 -0
- data/README.md +245 -0
- data/Rakefile +11 -0
- data/bin/_guard-core +27 -0
- data/bin/bundle +109 -0
- data/bin/bundle-audit +27 -0
- data/bin/bundler-audit +27 -0
- data/bin/coderay +27 -0
- data/bin/console +11 -0
- data/bin/guard +27 -0
- data/bin/htmldiff +27 -0
- data/bin/ldiff +27 -0
- data/bin/listen +27 -0
- data/bin/playoffs +27 -0
- data/bin/pry +27 -0
- data/bin/racc +27 -0
- data/bin/rake +27 -0
- data/bin/rspec +27 -0
- data/bin/rubocop +27 -0
- data/bin/ruby-parse +27 -0
- data/bin/ruby-rewrite +27 -0
- data/bin/spoom +27 -0
- data/bin/srb +27 -0
- data/bin/srb-rbi +27 -0
- data/bin/tapioca +27 -0
- data/bin/thor +27 -0
- data/bin/yard +27 -0
- data/bin/yardoc +27 -0
- data/bin/yri +27 -0
- data/exe/playoffs +7 -0
- data/lib/playoffs/basketball.rb +120 -0
- data/lib/playoffs/best_of.rb +38 -0
- data/lib/playoffs/cli.rb +201 -0
- data/lib/playoffs/contestant.rb +8 -0
- data/lib/playoffs/round.rb +42 -0
- data/lib/playoffs/series.rb +167 -0
- data/lib/playoffs/team.rb +7 -0
- data/lib/playoffs/tournament/bracketable.rb +93 -0
- data/lib/playoffs/tournament/roundable.rb +53 -0
- data/lib/playoffs/tournament.rb +61 -0
- data/lib/playoffs/version.rb +6 -0
- data/lib/playoffs.rb +26 -0
- data/playoffs.gemspec +49 -0
- data/sorbet/config +4 -0
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/ansi@1.5.0.rbi +688 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +585 -0
- data/sorbet/rbi/gems/bundler-audit@0.9.1.rbi +309 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
- data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +1131 -0
- data/sorbet/rbi/gems/docile@1.4.0.rbi +377 -0
- data/sorbet/rbi/gems/erubi@1.12.0.rbi +145 -0
- data/sorbet/rbi/gems/ffi@1.16.3.rbi +9 -0
- data/sorbet/rbi/gems/formatador@1.1.0.rbi +9 -0
- data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +67 -0
- data/sorbet/rbi/gems/guard-rspec@4.7.3.rbi +563 -0
- data/sorbet/rbi/gems/guard@2.18.1.rbi +9 -0
- data/sorbet/rbi/gems/json@2.7.2.rbi +1562 -0
- data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14238 -0
- data/sorbet/rbi/gems/listen@3.9.0.rbi +9 -0
- data/sorbet/rbi/gems/lumberjack@1.2.10.rbi +9 -0
- data/sorbet/rbi/gems/method_source@1.1.0.rbi +304 -0
- data/sorbet/rbi/gems/nenv@0.3.0.rbi +9 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/notiffany@0.1.3.rbi +9 -0
- data/sorbet/rbi/gems/parallel@1.24.0.rbi +280 -0
- data/sorbet/rbi/gems/parser@3.3.1.0.rbi +7238 -0
- data/sorbet/rbi/gems/primitive@1.0.0.rbi +58 -0
- data/sorbet/rbi/gems/prism@0.29.0.rbi +37987 -0
- data/sorbet/rbi/gems/pry@0.14.2.rbi +10069 -0
- data/sorbet/rbi/gems/racc@1.7.3.rbi +162 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +403 -0
- data/sorbet/rbi/gems/rake@13.2.1.rbi +3028 -0
- data/sorbet/rbi/gems/rb-fsevent@0.11.2.rbi +9 -0
- data/sorbet/rbi/gems/rb-inotify@0.10.1.rbi +9 -0
- data/sorbet/rbi/gems/rbi@0.1.13.rbi +3078 -0
- data/sorbet/rbi/gems/regexp_parser@2.9.2.rbi +3772 -0
- data/sorbet/rbi/gems/rexml@3.2.8.rbi +4794 -0
- data/sorbet/rbi/gems/rspec-core@3.13.0.rbi +10874 -0
- data/sorbet/rbi/gems/rspec-expectations@3.13.0.rbi +8154 -0
- data/sorbet/rbi/gems/rspec-mocks@3.13.1.rbi +5341 -0
- data/sorbet/rbi/gems/rspec-support@3.13.1.rbi +1630 -0
- data/sorbet/rbi/gems/rspec@3.13.0.rbi +83 -0
- data/sorbet/rbi/gems/rubocop-ast@1.31.3.rbi +7159 -0
- data/sorbet/rbi/gems/rubocop-capybara@2.20.0.rbi +1208 -0
- data/sorbet/rbi/gems/rubocop-factory_bot@2.25.1.rbi +928 -0
- data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +329 -0
- data/sorbet/rbi/gems/rubocop-rspec@2.29.2.rbi +8247 -0
- data/sorbet/rbi/gems/rubocop-rspec_rails@2.28.3.rbi +911 -0
- data/sorbet/rbi/gems/rubocop-sorbet@0.8.3.rbi +1607 -0
- data/sorbet/rbi/gems/rubocop@1.63.5.rbi +57788 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1318 -0
- data/sorbet/rbi/gems/shellany@0.0.1.rbi +9 -0
- data/sorbet/rbi/gems/simplecov-console@0.9.1.rbi +103 -0
- data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +217 -0
- data/sorbet/rbi/gems/simplecov@0.22.0.rbi +2149 -0
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +9 -0
- data/sorbet/rbi/gems/sorbet-runtime-stub@0.2.0.rbi +8 -0
- data/sorbet/rbi/gems/spoom@1.3.2.rbi +4420 -0
- data/sorbet/rbi/gems/strscan@3.1.0.rbi +9 -0
- data/sorbet/rbi/gems/tapioca@0.14.2.rbi +3539 -0
- data/sorbet/rbi/gems/terminal-table@3.0.2.rbi +9 -0
- data/sorbet/rbi/gems/thor@1.3.1.rbi +4318 -0
- data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +66 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
- data/sorbet/rbi/gems/yard@0.9.36.rbi +18085 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- metadata +383 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Playoffs
|
|
5
|
+
class Tournament
|
|
6
|
+
# Understands how to take a top-level series
|
|
7
|
+
module Roundable
|
|
8
|
+
extend T::Helpers
|
|
9
|
+
extend T::Sig
|
|
10
|
+
|
|
11
|
+
abstract!
|
|
12
|
+
|
|
13
|
+
sig { abstract.returns(T::Array[Round]) }
|
|
14
|
+
def rounds; end
|
|
15
|
+
|
|
16
|
+
sig { returns(T.nilable(Round)) }
|
|
17
|
+
def current_round
|
|
18
|
+
rounds.find(&:not_over?)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
sig { returns(String) }
|
|
22
|
+
def print_rounds
|
|
23
|
+
rounds.map { |round, _number| [round.to_s, ''] }.join("\n")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
sig { params(series: Series).returns(T::Array[Round]) }
|
|
29
|
+
def rounds_from_series(series)
|
|
30
|
+
group_by_round(series).values.reverse.map { |s| Round.new(s) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
sig do
|
|
34
|
+
params(
|
|
35
|
+
series: Series,
|
|
36
|
+
depth: Integer,
|
|
37
|
+
series_by_depth: T::Hash[Integer, T::Array[Series]]
|
|
38
|
+
).returns(T::Hash[Integer, T::Array[Series]])
|
|
39
|
+
end
|
|
40
|
+
def group_by_round(series, depth = 0, series_by_depth = {})
|
|
41
|
+
series_by_depth[depth] ||= []
|
|
42
|
+
|
|
43
|
+
T.must(series_by_depth[depth]) << series
|
|
44
|
+
|
|
45
|
+
series.contestants.each do |contestant|
|
|
46
|
+
group_by_round(contestant, depth + 1, series_by_depth) if contestant.is_a?(Series)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
series_by_depth
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require_relative 'tournament/bracketable'
|
|
5
|
+
require_relative 'tournament/roundable'
|
|
6
|
+
|
|
7
|
+
module Playoffs
|
|
8
|
+
# Models the construction and lifecycle of a set of series in the configured order
|
|
9
|
+
# leading to completion.
|
|
10
|
+
class Tournament
|
|
11
|
+
extend T::Sig
|
|
12
|
+
include Bracketable
|
|
13
|
+
include Roundable
|
|
14
|
+
|
|
15
|
+
sig { override.returns(Series) }
|
|
16
|
+
attr_reader :championship
|
|
17
|
+
|
|
18
|
+
sig { override.returns(T::Array[Round]) }
|
|
19
|
+
attr_reader :rounds
|
|
20
|
+
|
|
21
|
+
sig { params(championship: Series).void }
|
|
22
|
+
def initialize(championship)
|
|
23
|
+
@championship = T.let(championship, Series)
|
|
24
|
+
@rounds = T.let(rounds_from_series(championship), T::Array[Round])
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
sig { returns(String) }
|
|
28
|
+
def to_s
|
|
29
|
+
[
|
|
30
|
+
print_bracket,
|
|
31
|
+
'',
|
|
32
|
+
print_rounds
|
|
33
|
+
].join("\n")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
sig { returns(T.nilable(Series)) }
|
|
37
|
+
def up_next
|
|
38
|
+
current_round&.up_next
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
sig { returns(T::Boolean) }
|
|
42
|
+
def over?
|
|
43
|
+
!not_over?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
sig { returns(T::Boolean) }
|
|
47
|
+
def not_over?
|
|
48
|
+
!up_next.nil?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
sig { returns(T::Array[Round]) }
|
|
52
|
+
def not_over
|
|
53
|
+
rounds.select(&:not_over?)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
sig { returns(T.nilable(Team)) }
|
|
57
|
+
def winner
|
|
58
|
+
championship.winner
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/playoffs.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'sorbet-runtime'
|
|
5
|
+
require 'primitive'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
|
|
8
|
+
require_relative 'playoffs/basketball'
|
|
9
|
+
require_relative 'playoffs/best_of'
|
|
10
|
+
require_relative 'playoffs/cli'
|
|
11
|
+
require_relative 'playoffs/contestant'
|
|
12
|
+
require_relative 'playoffs/round'
|
|
13
|
+
require_relative 'playoffs/series'
|
|
14
|
+
require_relative 'playoffs/team'
|
|
15
|
+
require_relative 'playoffs/tournament'
|
|
16
|
+
|
|
17
|
+
module Playoffs
|
|
18
|
+
class IncorrectTeamCount < StandardError; end
|
|
19
|
+
class InvalidTeamError < StandardError; end
|
|
20
|
+
class InvalidTeamsError < StandardError; end
|
|
21
|
+
class NotEnoughTeamsError < StandardError; end
|
|
22
|
+
class RoundOverError < StandardError; end
|
|
23
|
+
class SeriesOverError < StandardError; end
|
|
24
|
+
class TeamsMustBeUniqueError < StandardError; end
|
|
25
|
+
class TournamentOverError < StandardError; end
|
|
26
|
+
end
|
data/playoffs.gemspec
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require './lib/playoffs/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = 'playoffs'
|
|
7
|
+
s.version = Playoffs::VERSION
|
|
8
|
+
s.summary = 'Underlying data structures to power a bracket-style tournament of teams/competitors.'
|
|
9
|
+
|
|
10
|
+
s.description = <<~DESC
|
|
11
|
+
I was looking to create a turn-based sports game which, inevitably, would include a playoffs simulator.
|
|
12
|
+
This library provides a few, easy-to-use APIs to create, simulate, and complete a team & series-based tournament with one clear winner.
|
|
13
|
+
DESC
|
|
14
|
+
|
|
15
|
+
s.authors = ['Matthew Ruggio']
|
|
16
|
+
s.email = ['mattruggio@icloud.com']
|
|
17
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
18
|
+
s.bindir = 'exe'
|
|
19
|
+
s.executables = %w[playoffs]
|
|
20
|
+
s.homepage = 'https://github.com/mattruggio/playoffs'
|
|
21
|
+
s.license = 'MIT'
|
|
22
|
+
s.metadata = {
|
|
23
|
+
'bug_tracker_uri' => 'https://github.com/mattruggio/playoffs/issues',
|
|
24
|
+
'changelog_uri' => 'https://github.com/mattruggio/playoffs/blob/main/CHANGELOG.md',
|
|
25
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/playoffs',
|
|
26
|
+
'homepage_uri' => s.homepage,
|
|
27
|
+
'source_code_uri' => s.homepage,
|
|
28
|
+
'rubygems_mfa_required' => 'true'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
s.required_ruby_version = '>= 3.2.1'
|
|
32
|
+
|
|
33
|
+
s.add_runtime_dependency('primitive')
|
|
34
|
+
s.add_runtime_dependency('sorbet-runtime')
|
|
35
|
+
|
|
36
|
+
s.add_development_dependency('bundler-audit')
|
|
37
|
+
s.add_development_dependency('guard-rspec')
|
|
38
|
+
s.add_development_dependency('pry')
|
|
39
|
+
s.add_development_dependency('rake')
|
|
40
|
+
s.add_development_dependency('rspec')
|
|
41
|
+
s.add_development_dependency('rubocop')
|
|
42
|
+
s.add_development_dependency('rubocop-rake')
|
|
43
|
+
s.add_development_dependency('rubocop-rspec')
|
|
44
|
+
s.add_development_dependency('rubocop-sorbet')
|
|
45
|
+
s.add_development_dependency('simplecov')
|
|
46
|
+
s.add_development_dependency('simplecov-console')
|
|
47
|
+
s.add_development_dependency('sorbet')
|
|
48
|
+
s.add_development_dependency('tapioca')
|
|
49
|
+
end
|
data/sorbet/config
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
**/*.rbi linguist-vendored=true
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# DO NOT EDIT MANUALLY
|
|
4
|
+
# This file was pulled from a central RBI files repository.
|
|
5
|
+
# Please run `bin/tapioca annotations` to update it.
|
|
6
|
+
|
|
7
|
+
module Rainbow
|
|
8
|
+
# @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12
|
|
9
|
+
sig { returns(T::Boolean) }
|
|
10
|
+
attr_accessor :enabled
|
|
11
|
+
|
|
12
|
+
class Color
|
|
13
|
+
sig { returns(Symbol) }
|
|
14
|
+
attr_reader :ground
|
|
15
|
+
|
|
16
|
+
sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) }
|
|
17
|
+
def self.build(ground, values); end
|
|
18
|
+
|
|
19
|
+
sig { params(hex: String).returns([Integer, Integer, Integer]) }
|
|
20
|
+
def self.parse_hex_color(hex); end
|
|
21
|
+
|
|
22
|
+
class Indexed < Rainbow::Color
|
|
23
|
+
sig { returns(Integer) }
|
|
24
|
+
attr_reader :num
|
|
25
|
+
|
|
26
|
+
sig { params(ground: Symbol, num: Integer).void }
|
|
27
|
+
def initialize(ground, num); end
|
|
28
|
+
|
|
29
|
+
sig { returns(T::Array[Integer]) }
|
|
30
|
+
def codes; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Named < Rainbow::Color::Indexed
|
|
34
|
+
NAMES = T.let(nil, T::Hash[Symbol, Integer])
|
|
35
|
+
|
|
36
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
|
37
|
+
def initialize(ground, name); end
|
|
38
|
+
|
|
39
|
+
sig { returns(T::Array[Symbol]) }
|
|
40
|
+
def self.color_names; end
|
|
41
|
+
|
|
42
|
+
sig { returns(String) }
|
|
43
|
+
def self.valid_names; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class RGB < Rainbow::Color::Indexed
|
|
47
|
+
sig { returns(Integer) }
|
|
48
|
+
attr_reader :r, :g, :b
|
|
49
|
+
|
|
50
|
+
sig { params(ground: Symbol, values: Integer).void }
|
|
51
|
+
def initialize(ground, *values); end
|
|
52
|
+
|
|
53
|
+
sig { returns(T::Array[Integer]) }
|
|
54
|
+
def codes; end
|
|
55
|
+
|
|
56
|
+
sig { params(value: Numeric).returns(Integer) }
|
|
57
|
+
def self.to_ansi_domain(value); end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class X11Named < Rainbow::Color::RGB
|
|
61
|
+
include Rainbow::X11ColorNames
|
|
62
|
+
|
|
63
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
|
64
|
+
def initialize(ground, name); end
|
|
65
|
+
|
|
66
|
+
sig { returns(T::Array[Symbol]) }
|
|
67
|
+
def self.color_names; end
|
|
68
|
+
|
|
69
|
+
sig { returns(String) }
|
|
70
|
+
def self.valid_names; end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
sig { returns(Wrapper) }
|
|
75
|
+
def self.global; end
|
|
76
|
+
|
|
77
|
+
sig { returns(T::Boolean) }
|
|
78
|
+
def self.enabled; end
|
|
79
|
+
|
|
80
|
+
sig { params(value: T::Boolean).returns(T::Boolean) }
|
|
81
|
+
def self.enabled=(value); end
|
|
82
|
+
|
|
83
|
+
sig { params(string: String).returns(String) }
|
|
84
|
+
def self.uncolor(string); end
|
|
85
|
+
|
|
86
|
+
class NullPresenter < String
|
|
87
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
88
|
+
def color(*values); end
|
|
89
|
+
|
|
90
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
91
|
+
def foreground(*values); end
|
|
92
|
+
|
|
93
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
94
|
+
def fg(*values); end
|
|
95
|
+
|
|
96
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
97
|
+
def background(*values); end
|
|
98
|
+
|
|
99
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
100
|
+
def bg(*values); end
|
|
101
|
+
|
|
102
|
+
sig { returns(NullPresenter) }
|
|
103
|
+
def reset; end
|
|
104
|
+
|
|
105
|
+
sig { returns(NullPresenter) }
|
|
106
|
+
def bright; end
|
|
107
|
+
|
|
108
|
+
sig { returns(NullPresenter) }
|
|
109
|
+
def faint; end
|
|
110
|
+
|
|
111
|
+
sig { returns(NullPresenter) }
|
|
112
|
+
def italic; end
|
|
113
|
+
|
|
114
|
+
sig { returns(NullPresenter) }
|
|
115
|
+
def underline; end
|
|
116
|
+
|
|
117
|
+
sig { returns(NullPresenter) }
|
|
118
|
+
def blink; end
|
|
119
|
+
|
|
120
|
+
sig { returns(NullPresenter) }
|
|
121
|
+
def inverse; end
|
|
122
|
+
|
|
123
|
+
sig { returns(NullPresenter) }
|
|
124
|
+
def hide; end
|
|
125
|
+
|
|
126
|
+
sig { returns(NullPresenter) }
|
|
127
|
+
def cross_out; end
|
|
128
|
+
|
|
129
|
+
sig { returns(NullPresenter) }
|
|
130
|
+
def black; end
|
|
131
|
+
|
|
132
|
+
sig { returns(NullPresenter) }
|
|
133
|
+
def red; end
|
|
134
|
+
|
|
135
|
+
sig { returns(NullPresenter) }
|
|
136
|
+
def green; end
|
|
137
|
+
|
|
138
|
+
sig { returns(NullPresenter) }
|
|
139
|
+
def yellow; end
|
|
140
|
+
|
|
141
|
+
sig { returns(NullPresenter) }
|
|
142
|
+
def blue; end
|
|
143
|
+
|
|
144
|
+
sig { returns(NullPresenter) }
|
|
145
|
+
def magenta; end
|
|
146
|
+
|
|
147
|
+
sig { returns(NullPresenter) }
|
|
148
|
+
def cyan; end
|
|
149
|
+
|
|
150
|
+
sig { returns(NullPresenter) }
|
|
151
|
+
def white; end
|
|
152
|
+
|
|
153
|
+
sig { returns(NullPresenter) }
|
|
154
|
+
def bold; end
|
|
155
|
+
|
|
156
|
+
sig { returns(NullPresenter) }
|
|
157
|
+
def dark; end
|
|
158
|
+
|
|
159
|
+
sig { returns(NullPresenter) }
|
|
160
|
+
def strike; end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class Presenter < String
|
|
164
|
+
TERM_EFFECTS = T.let(nil, T::Hash[Symbol, Integer])
|
|
165
|
+
|
|
166
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
167
|
+
def color(*values); end
|
|
168
|
+
|
|
169
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
170
|
+
def foreground(*values); end
|
|
171
|
+
|
|
172
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
173
|
+
def fg(*values); end
|
|
174
|
+
|
|
175
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
176
|
+
def background(*values); end
|
|
177
|
+
|
|
178
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
179
|
+
def bg(*values); end
|
|
180
|
+
|
|
181
|
+
sig { returns(Presenter) }
|
|
182
|
+
def reset; end
|
|
183
|
+
|
|
184
|
+
sig { returns(Presenter) }
|
|
185
|
+
def bright; end
|
|
186
|
+
|
|
187
|
+
sig { returns(Presenter) }
|
|
188
|
+
def faint; end
|
|
189
|
+
|
|
190
|
+
sig { returns(Presenter) }
|
|
191
|
+
def italic; end
|
|
192
|
+
|
|
193
|
+
sig { returns(Presenter) }
|
|
194
|
+
def underline; end
|
|
195
|
+
|
|
196
|
+
sig { returns(Presenter) }
|
|
197
|
+
def blink; end
|
|
198
|
+
|
|
199
|
+
sig { returns(Presenter) }
|
|
200
|
+
def inverse; end
|
|
201
|
+
|
|
202
|
+
sig { returns(Presenter) }
|
|
203
|
+
def hide; end
|
|
204
|
+
|
|
205
|
+
sig { returns(Presenter) }
|
|
206
|
+
def cross_out; end
|
|
207
|
+
|
|
208
|
+
sig { returns(Presenter) }
|
|
209
|
+
def black; end
|
|
210
|
+
|
|
211
|
+
sig { returns(Presenter) }
|
|
212
|
+
def red; end
|
|
213
|
+
|
|
214
|
+
sig { returns(Presenter) }
|
|
215
|
+
def green; end
|
|
216
|
+
|
|
217
|
+
sig { returns(Presenter) }
|
|
218
|
+
def yellow; end
|
|
219
|
+
|
|
220
|
+
sig { returns(Presenter) }
|
|
221
|
+
def blue; end
|
|
222
|
+
|
|
223
|
+
sig { returns(Presenter) }
|
|
224
|
+
def magenta; end
|
|
225
|
+
|
|
226
|
+
sig { returns(Presenter) }
|
|
227
|
+
def cyan; end
|
|
228
|
+
|
|
229
|
+
sig { returns(Presenter) }
|
|
230
|
+
def white; end
|
|
231
|
+
|
|
232
|
+
sig { returns(Presenter) }
|
|
233
|
+
def bold; end
|
|
234
|
+
|
|
235
|
+
sig { returns(Presenter) }
|
|
236
|
+
def dark; end
|
|
237
|
+
|
|
238
|
+
sig { returns(Presenter) }
|
|
239
|
+
def strike; end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
class StringUtils
|
|
243
|
+
sig { params(string: String, codes: T::Array[Integer]).returns(String) }
|
|
244
|
+
def self.wrap_with_sgr(string, codes); end
|
|
245
|
+
|
|
246
|
+
sig { params(string: String).returns(String) }
|
|
247
|
+
def self.uncolor(string); end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
VERSION = T.let(nil, String)
|
|
251
|
+
|
|
252
|
+
class Wrapper
|
|
253
|
+
sig { returns(T::Boolean) }
|
|
254
|
+
attr_accessor :enabled
|
|
255
|
+
|
|
256
|
+
sig { params(enabled: T::Boolean).void }
|
|
257
|
+
def initialize(enabled = true); end
|
|
258
|
+
|
|
259
|
+
sig { params(string: String).returns(T.any(Rainbow::Presenter, Rainbow::NullPresenter)) }
|
|
260
|
+
def wrap(string); end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
module X11ColorNames
|
|
264
|
+
NAMES = T.let(nil, T::Hash[Symbol, [Integer, Integer, Integer]])
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
sig { params(string: String).returns(Rainbow::Presenter) }
|
|
269
|
+
def Rainbow(string); end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
**/*.rbi linguist-generated=true
|