openfeature-sdk-sorbet 0.1.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/.DS_Store +0 -0
- data/.rubocop.yml +42 -0
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +15 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +113 -0
- data/LICENSE.txt +21 -0
- data/README.md +115 -0
- data/Rakefile +24 -0
- data/lib/open_feature/client.rb +180 -0
- data/lib/open_feature/client_metadata.rb +9 -0
- data/lib/open_feature/configuration.rb +47 -0
- data/lib/open_feature/error_code.rb +17 -0
- data/lib/open_feature/evaluation_context.rb +10 -0
- data/lib/open_feature/evaluation_details.rb +56 -0
- data/lib/open_feature/evaluation_options.rb +9 -0
- data/lib/open_feature/flag_metadata.rb +6 -0
- data/lib/open_feature/hook.rb +6 -0
- data/lib/open_feature/no_op_provider.rb +77 -0
- data/lib/open_feature/provider.rb +61 -0
- data/lib/open_feature/provider_metadata.rb +11 -0
- data/lib/open_feature/resolution_details.rb +20 -0
- data/lib/open_feature.rb +40 -0
- data/sorbet/config +4 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
- data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +1083 -0
- data/sorbet/rbi/gems/io-console@0.6.0.rbi +8 -0
- data/sorbet/rbi/gems/irb@1.6.4.rbi +342 -0
- data/sorbet/rbi/gems/json@2.6.3.rbi +1533 -0
- data/sorbet/rbi/gems/minitest@5.18.0.rbi +2153 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/parallel@1.23.0.rbi +273 -0
- data/sorbet/rbi/gems/parser@3.2.2.1.rbi +7253 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
- data/sorbet/rbi/gems/rake@13.0.6.rbi +3024 -0
- data/sorbet/rbi/gems/rbi@0.0.16.rbi +3049 -0
- data/sorbet/rbi/gems/regexp_parser@2.8.0.rbi +3748 -0
- data/sorbet/rbi/gems/reline@0.3.3.rbi +8 -0
- data/sorbet/rbi/gems/rexml@3.2.5.rbi +4717 -0
- data/sorbet/rbi/gems/rubocop-ast@1.28.1.rbi +6990 -0
- data/sorbet/rbi/gems/rubocop-minitest@0.31.0.rbi +2528 -0
- data/sorbet/rbi/gems/rubocop-performance@1.17.1.rbi +3036 -0
- data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +328 -0
- data/sorbet/rbi/gems/rubocop-sorbet@0.7.0.rbi +1043 -0
- data/sorbet/rbi/gems/rubocop@1.51.0.rbi +55316 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
- data/sorbet/rbi/gems/sorbet-struct-comparable@1.3.0.rbi +34 -0
- data/sorbet/rbi/gems/spoom@1.2.1.rbi +2536 -0
- data/sorbet/rbi/gems/tapioca@0.11.6.rbi +3301 -0
- data/sorbet/rbi/gems/thor@1.2.2.rbi +3965 -0
- data/sorbet/rbi/gems/unicode-display_width@2.4.2.rbi +65 -0
- data/sorbet/rbi/gems/unparser@0.6.7.rbi +4524 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
- data/sorbet/rbi/gems/yard@0.9.34.rbi +18219 -0
- data/sorbet/rbi/gems/zeitwerk@2.6.8.rbi +986 -0
- data/sorbet/tapioca/config.yml +4 -0
- data/sorbet/tapioca/require.rb +8 -0
- metadata +150 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "singleton"
|
5
|
+
|
6
|
+
module OpenFeature
|
7
|
+
# Singleton class that supports global configuration for OpenFeature.
|
8
|
+
# Should not be interacted with directly; rather, favor interacting
|
9
|
+
# with methods defined on the `OpenFeature` module.
|
10
|
+
class Configuration
|
11
|
+
extend T::Sig
|
12
|
+
|
13
|
+
include Singleton
|
14
|
+
|
15
|
+
sig { returns(Provider) }
|
16
|
+
attr_reader :provider
|
17
|
+
|
18
|
+
sig { returns(T::Array[Hook]) }
|
19
|
+
attr_reader :hooks
|
20
|
+
|
21
|
+
sig { void }
|
22
|
+
def initialize
|
23
|
+
@provider = T.let(NoOpProvider.new, Provider)
|
24
|
+
@hooks = T.let([], T::Array[Hook])
|
25
|
+
end
|
26
|
+
|
27
|
+
sig { returns(ProviderMetadata) }
|
28
|
+
def provider_metadata
|
29
|
+
provider.metadata
|
30
|
+
end
|
31
|
+
|
32
|
+
sig { params(provider: Provider).void }
|
33
|
+
def set_provider(provider) # rubocop:disable Naming/AccessorMethodName
|
34
|
+
@provider = provider
|
35
|
+
end
|
36
|
+
|
37
|
+
sig { params(hooks: T.any(Hook, T::Array[Hook])).void }
|
38
|
+
def add_hooks(hooks)
|
39
|
+
@hooks.concat(Array(hooks))
|
40
|
+
end
|
41
|
+
|
42
|
+
sig { void }
|
43
|
+
def clear_hooks!
|
44
|
+
@hooks = []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Possible error codes
|
6
|
+
class ErrorCode < T::Enum
|
7
|
+
enums do
|
8
|
+
ProviderNotReady = new("PROVIDER_NOT_READY")
|
9
|
+
FlagNotFound = new("FLAG_NOT_FOUND")
|
10
|
+
ParseError = new("PARSE_ERROR")
|
11
|
+
TypeMismatch = new("TYPE_MISMATCH")
|
12
|
+
TargetingKeyMissing = new("TARGETING_KEY_MISSING")
|
13
|
+
InvalidContext = new("INVALID_CONTEXT")
|
14
|
+
General = new("GENERAL")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Provides ambient information for the purposes of flag evaluation.
|
6
|
+
# Currently does not meet specification!
|
7
|
+
class EvaluationContext < T::Struct
|
8
|
+
const :targeting_key, T.nilable(String)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Information about resolved value, created by a Provider.
|
6
|
+
class EvaluationDetails < T::Struct
|
7
|
+
extend T::Generic
|
8
|
+
|
9
|
+
include T::Struct::ActsAsComparable
|
10
|
+
|
11
|
+
Value = type_member
|
12
|
+
SelfValue = type_template
|
13
|
+
|
14
|
+
const :flag_key, String
|
15
|
+
const :value, Value
|
16
|
+
const :error_code, T.nilable(ErrorCode)
|
17
|
+
const :error_message, T.nilable(String)
|
18
|
+
const :reason, T.nilable(String)
|
19
|
+
const :variant, T.nilable(String)
|
20
|
+
const :flag_metadata, T.nilable(FlagMetadata)
|
21
|
+
|
22
|
+
class << self
|
23
|
+
extend T::Sig
|
24
|
+
|
25
|
+
sig { params(details: ResolutionDetails[SelfValue], flag_key: String).returns(EvaluationDetails[SelfValue]) }
|
26
|
+
def from_resolution_details(details, flag_key:)
|
27
|
+
EvaluationDetails.new(
|
28
|
+
flag_key: flag_key,
|
29
|
+
value: details.value,
|
30
|
+
error_code: details.error_code,
|
31
|
+
error_message: details.error_message,
|
32
|
+
variant: details.variant,
|
33
|
+
reason: details.reason,
|
34
|
+
flag_metadata: details.flag_metadata
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
sig do
|
39
|
+
params(
|
40
|
+
error_message: String,
|
41
|
+
flag_key: String,
|
42
|
+
default_value: SelfValue
|
43
|
+
).returns(EvaluationDetails[SelfValue])
|
44
|
+
end
|
45
|
+
def from_error(error_message, flag_key:, default_value:)
|
46
|
+
EvaluationDetails.new(
|
47
|
+
flag_key: flag_key,
|
48
|
+
value: default_value,
|
49
|
+
error_code: ErrorCode::General,
|
50
|
+
error_message: "Provider raised error: #{error_message}",
|
51
|
+
reason: "ERROR"
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Default provider when initializing OpenFeature.
|
6
|
+
# Always returns the default value given.
|
7
|
+
# This will result in a TypeError if the given default value does not have the correct type.
|
8
|
+
class NoOpProvider
|
9
|
+
extend T::Sig
|
10
|
+
|
11
|
+
include Provider
|
12
|
+
|
13
|
+
sig { override.returns(ProviderMetadata) }
|
14
|
+
attr_reader :metadata
|
15
|
+
|
16
|
+
sig { override.returns(T::Array[Hook]) }
|
17
|
+
attr_reader :hooks
|
18
|
+
|
19
|
+
sig { void }
|
20
|
+
def initialize
|
21
|
+
@metadata = T.let(ProviderMetadata.new(name: "No Op Provider"), ProviderMetadata)
|
22
|
+
@hooks = T.let([], T::Array[Hook])
|
23
|
+
end
|
24
|
+
|
25
|
+
sig do
|
26
|
+
override
|
27
|
+
.params(
|
28
|
+
flag_key: String,
|
29
|
+
default_value: T::Boolean,
|
30
|
+
context: T.nilable(EvaluationContext)
|
31
|
+
)
|
32
|
+
.returns(ResolutionDetails[T::Boolean])
|
33
|
+
end
|
34
|
+
def resolve_boolean_value(flag_key:, default_value:, context: nil)
|
35
|
+
ResolutionDetails.new(value: default_value, reason: "DEFAULT")
|
36
|
+
end
|
37
|
+
|
38
|
+
sig do
|
39
|
+
override
|
40
|
+
.params(
|
41
|
+
flag_key: String,
|
42
|
+
default_value: String,
|
43
|
+
context: T.nilable(EvaluationContext)
|
44
|
+
)
|
45
|
+
.returns(ResolutionDetails[String])
|
46
|
+
end
|
47
|
+
def resolve_string_value(flag_key:, default_value:, context: nil)
|
48
|
+
ResolutionDetails.new(value: default_value, reason: "DEFAULT")
|
49
|
+
end
|
50
|
+
|
51
|
+
sig do
|
52
|
+
override
|
53
|
+
.params(
|
54
|
+
flag_key: String,
|
55
|
+
default_value: Numeric,
|
56
|
+
context: T.nilable(EvaluationContext)
|
57
|
+
)
|
58
|
+
.returns(ResolutionDetails[Numeric])
|
59
|
+
end
|
60
|
+
def resolve_number_value(flag_key:, default_value:, context: nil)
|
61
|
+
ResolutionDetails.new(value: default_value, reason: "DEFAULT")
|
62
|
+
end
|
63
|
+
|
64
|
+
sig do
|
65
|
+
override
|
66
|
+
.params(
|
67
|
+
flag_key: String,
|
68
|
+
default_value: T::Hash[T.untyped, T.untyped],
|
69
|
+
context: T.nilable(EvaluationContext)
|
70
|
+
)
|
71
|
+
.returns(ResolutionDetails[T::Hash[T.untyped, T.untyped]])
|
72
|
+
end
|
73
|
+
def resolve_structure_value(flag_key:, default_value:, context: nil)
|
74
|
+
ResolutionDetails.new(value: default_value, reason: "DEFAULT")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Interface that providers must implement.
|
6
|
+
module Provider
|
7
|
+
extend T::Sig
|
8
|
+
extend T::Helpers
|
9
|
+
interface!
|
10
|
+
|
11
|
+
sig { abstract.returns(ProviderMetadata) }
|
12
|
+
def metadata; end
|
13
|
+
|
14
|
+
sig { abstract.returns(T::Array[Hook]) }
|
15
|
+
def hooks; end
|
16
|
+
|
17
|
+
sig do
|
18
|
+
abstract
|
19
|
+
.params(
|
20
|
+
flag_key: String,
|
21
|
+
default_value: T::Boolean,
|
22
|
+
context: T.nilable(EvaluationContext)
|
23
|
+
)
|
24
|
+
.returns(ResolutionDetails[T::Boolean])
|
25
|
+
end
|
26
|
+
def resolve_boolean_value(flag_key:, default_value:, context: nil); end
|
27
|
+
|
28
|
+
sig do
|
29
|
+
abstract
|
30
|
+
.params(
|
31
|
+
flag_key: String,
|
32
|
+
default_value: String,
|
33
|
+
context: T.nilable(EvaluationContext)
|
34
|
+
)
|
35
|
+
.returns(ResolutionDetails[String])
|
36
|
+
end
|
37
|
+
def resolve_string_value(flag_key:, default_value:, context: nil); end
|
38
|
+
|
39
|
+
sig do
|
40
|
+
abstract
|
41
|
+
.params(
|
42
|
+
flag_key: String,
|
43
|
+
default_value: Numeric,
|
44
|
+
context: T.nilable(EvaluationContext)
|
45
|
+
)
|
46
|
+
.returns(ResolutionDetails[Numeric])
|
47
|
+
end
|
48
|
+
def resolve_number_value(flag_key:, default_value:, context: nil); end
|
49
|
+
|
50
|
+
sig do
|
51
|
+
abstract
|
52
|
+
.params(
|
53
|
+
flag_key: String,
|
54
|
+
default_value: T::Hash[T.untyped, T.untyped],
|
55
|
+
context: T.nilable(EvaluationContext)
|
56
|
+
)
|
57
|
+
.returns(ResolutionDetails[T::Hash[T.untyped, T.untyped]])
|
58
|
+
end
|
59
|
+
def resolve_structure_value(flag_key:, default_value:, context: nil); end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module OpenFeature
|
5
|
+
# Information about resolved value, created by a Provider.
|
6
|
+
class ResolutionDetails < T::Struct
|
7
|
+
extend T::Generic
|
8
|
+
|
9
|
+
include T::Struct::ActsAsComparable
|
10
|
+
|
11
|
+
Value = type_member
|
12
|
+
|
13
|
+
const :value, Value
|
14
|
+
const :error_code, T.nilable(ErrorCode)
|
15
|
+
const :error_message, T.nilable(String)
|
16
|
+
const :reason, T.nilable(String)
|
17
|
+
const :variant, T.nilable(String)
|
18
|
+
const :flag_metadata, T.nilable(FlagMetadata)
|
19
|
+
end
|
20
|
+
end
|
data/lib/open_feature.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
require "sorbet-struct-comparable"
|
6
|
+
require "zeitwerk"
|
7
|
+
loader = Zeitwerk::Loader.for_gem
|
8
|
+
loader.setup
|
9
|
+
|
10
|
+
# Sorbet-aware implementation of the OpenFeature specification
|
11
|
+
module OpenFeature
|
12
|
+
class << self
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { returns(ProviderMetadata) }
|
16
|
+
def provider_metadata
|
17
|
+
configuration.provider_metadata
|
18
|
+
end
|
19
|
+
|
20
|
+
sig { params(provider: Provider).void }
|
21
|
+
def set_provider(provider) # rubocop:disable Naming/AccessorMethodName
|
22
|
+
configuration.set_provider(provider)
|
23
|
+
end
|
24
|
+
|
25
|
+
sig { params(hooks: T.any(Hook, T::Array[Hook])).void }
|
26
|
+
def add_hooks(hooks)
|
27
|
+
configuration.add_hooks(hooks)
|
28
|
+
end
|
29
|
+
|
30
|
+
sig { params(name: T.nilable(String)).returns(Client) }
|
31
|
+
def create_client(name: nil)
|
32
|
+
Client.new(provider: configuration.provider, name: name)
|
33
|
+
end
|
34
|
+
|
35
|
+
sig { returns(Configuration) }
|
36
|
+
def configuration
|
37
|
+
Configuration.instance
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/sorbet/config
ADDED
@@ -0,0 +1,269 @@
|
|
1
|
+
# typed: strict
|
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 { returns(T::Array[Symbol]) }
|
64
|
+
def self.color_names; end
|
65
|
+
|
66
|
+
sig { returns(String) }
|
67
|
+
def self.valid_names; end
|
68
|
+
|
69
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
70
|
+
def initialize(ground, name); 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
|