environment_helpers 1.4.0 → 1.5.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 +4 -4
- data/.github/workflows/quality.yml +1 -1
- data/.github/workflows/rspec.yml +3 -1
- data/.github/workflows/type_check.yml +18 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +4 -0
- data/README.md +15 -0
- data/Steepfile +17 -0
- data/lib/environment_helpers/boolean_helpers.rb +16 -4
- data/lib/environment_helpers/enumerable_helpers.rb +13 -12
- data/lib/environment_helpers/range_helpers.rb +1 -1
- data/lib/environment_helpers/string_helpers.rb +1 -1
- data/lib/environment_helpers/version.rb +1 -1
- data/lib/environment_helpers.rb +8 -8
- data/sig/environment_helpers.rbs +96 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e1df5aabc663c1ed5969c56db3d1be35f6b329272718ce174b30260f4c2f1e8
|
4
|
+
data.tar.gz: 855f2cf510c568464310ef1bc30fb6115a6dff653618f25472a452fcf901cb77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dcccd3be2e778d76ce595521efc58204b680acfbe3328c86e357946574c338e323ee7a4e479e39d768f97a67fb6ecb7bb2c7aad7c68db7ed2d6f30bd761f299
|
7
|
+
data.tar.gz: 6a9bccc3864329bf295f59c268d64bed2078d072f9eed08ce2ff3063ead716f2e3e5a14b333f710b01b6092ec3be595bb71e74548c83515f230dfb9306e51bd7
|
data/.github/workflows/rspec.yml
CHANGED
@@ -9,9 +9,11 @@ jobs:
|
|
9
9
|
fail-fast: false
|
10
10
|
matrix:
|
11
11
|
ruby-version: ['2.7', '3.0', '3.1', '3.2', 'head']
|
12
|
+
env:
|
13
|
+
NO_STEEP: "Because we need to test on versions that are older than steep supports"
|
12
14
|
|
13
15
|
steps:
|
14
|
-
- uses: actions/checkout@
|
16
|
+
- uses: actions/checkout@v4
|
15
17
|
|
16
18
|
- name: Set up ruby
|
17
19
|
uses: ruby/setup-ruby@v1
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Steep Type Checking
|
2
|
+
|
3
|
+
on: push
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
check:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v4
|
10
|
+
|
11
|
+
- name: Set up ruby
|
12
|
+
uses: ruby/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
ruby-version: 3.3
|
15
|
+
bundler-cache: true
|
16
|
+
|
17
|
+
- name: Run Steep
|
18
|
+
run: bundle exec steep check
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Release 1.5.0
|
4
|
+
|
5
|
+
* Add rbs/steep, and enforce types in CI (.rbs file is exported as part
|
6
|
+
of the gem) (#28, resolves #21)
|
7
|
+
* Support env-based customization of the truthy/falsey strings used by
|
8
|
+
`ENV.boolean` (#29, resolves #27)
|
9
|
+
* Update github workflows to use checkout@v4 (which should have no real
|
10
|
+
impact on us, aside from staying current). (#30)
|
11
|
+
* Update README to explain `ENV.array`
|
12
|
+
|
3
13
|
## Release 1.4.0
|
4
14
|
|
5
15
|
* Drop support for ruby 2.6
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -43,6 +43,7 @@ ENV.integer("MAX_THREAD_COUNT", default: 5)
|
|
43
43
|
ENV.file_path("FILE_PATH", default: "/some/path", required: true)
|
44
44
|
ENV.date("SCHEDULED_DATE", required: true, format: "%Y-%m-%d")
|
45
45
|
ENV.date_time("RUN_AT", required: true, default: DateTime.now)
|
46
|
+
ENV.array("QUEUE_NAMES", of: :strings, required: false, default: ["high", "low"])
|
46
47
|
```
|
47
48
|
|
48
49
|
Each of the supplied methods takes a positional parameter for the name of the
|
@@ -83,3 +84,17 @@ The available methods added to `ENV`:
|
|
83
84
|
as a strptime format string (the `:unix` format is equivalent to the format
|
84
85
|
string `"%s"`). It handles invalid or unparseable values like `ENV.date` does,
|
85
86
|
in that they are treated as if not supplied.
|
87
|
+
* `array` - produces an array of strings, symbols, or integers, depending on the
|
88
|
+
value of the `of` parameter. You can specify the delimiter using a `delimiter`
|
89
|
+
parameter (it defaults to a comma).
|
90
|
+
|
91
|
+
## Configuration
|
92
|
+
|
93
|
+
If you want to specify your own list of truthy/falsey strings, you can do that
|
94
|
+
by setting either or both of these environment variables, supplying comma-
|
95
|
+
separated (whitespace-free) strings:
|
96
|
+
|
97
|
+
* `ENVIRONMENT_HELPERS_TRUTHY_STRINGS` - the default value used is
|
98
|
+
`true,yes,on,enabled,enable,allow,t,y,1,ok,okay`
|
99
|
+
* `ENVIRONMENT_HELPERS_FALSEY_STRINGS` - the default value used is
|
100
|
+
`false,no,off,disabled,disable,deny,f,n,0,nope`
|
data/Steepfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
D = Steep::Diagnostic
|
2
|
+
|
3
|
+
target :lib do
|
4
|
+
signature "sig"
|
5
|
+
check "lib"
|
6
|
+
configure_code_diagnostics(D::Ruby.default)
|
7
|
+
library "pathname"
|
8
|
+
library "date"
|
9
|
+
end
|
10
|
+
|
11
|
+
target :test do
|
12
|
+
signature "sig"
|
13
|
+
check "test"
|
14
|
+
configure_code_diagnostics(D::Ruby.default)
|
15
|
+
library "pathname"
|
16
|
+
library "date"
|
17
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module EnvironmentHelpers
|
2
2
|
module BooleanHelpers
|
3
|
-
TRUTHY_STRINGS = %w[true yes on enabled enable allow t y 1 ok okay].to_set
|
4
|
-
FALSEY_STRINGS = %w[false no off disabled disable deny f n 0 nope].to_set
|
5
3
|
BOOLEAN_VALUES = [true, false, nil].to_set
|
6
4
|
|
7
5
|
def boolean(name, default: nil, required: false)
|
@@ -19,12 +17,26 @@ module EnvironmentHelpers
|
|
19
17
|
|
20
18
|
def truthy_text?(text)
|
21
19
|
return false if text.nil?
|
22
|
-
|
20
|
+
truthy_strings.include?(text.strip.downcase)
|
23
21
|
end
|
24
22
|
|
25
23
|
def falsey_text?(text)
|
26
24
|
return false if text.nil?
|
27
|
-
|
25
|
+
falsey_strings.include?(text.strip.downcase)
|
26
|
+
end
|
27
|
+
|
28
|
+
def truthy_strings
|
29
|
+
@_truthy_strings ||=
|
30
|
+
ENV.fetch("ENVIRONMENT_HELPERS_TRUTHY_STRINGS", "true,yes,on,enabled,enable,allow,t,y,1,ok,okay")
|
31
|
+
.split(",")
|
32
|
+
.to_set
|
33
|
+
end
|
34
|
+
|
35
|
+
def falsey_strings
|
36
|
+
@_falsey_strings ||=
|
37
|
+
ENV.fetch("ENVIRONMENT_HELPERS_FALSEY_STRINGS", "false,no,off,disabled,disable,deny,f,n,0,nope")
|
38
|
+
.split(",")
|
39
|
+
.to_set
|
28
40
|
end
|
29
41
|
end
|
30
42
|
end
|
@@ -2,6 +2,18 @@ module EnvironmentHelpers
|
|
2
2
|
module EnumerableHelpers
|
3
3
|
VALID_TYPES = %i[strings symbols integers]
|
4
4
|
|
5
|
+
TYPE_HANDLERS = {
|
6
|
+
integers: :to_i,
|
7
|
+
strings: :to_s,
|
8
|
+
symbols: :to_sym
|
9
|
+
}
|
10
|
+
|
11
|
+
TYPE_MAP = {
|
12
|
+
integers: Integer,
|
13
|
+
strings: String,
|
14
|
+
symbols: Symbol
|
15
|
+
}
|
16
|
+
|
5
17
|
def array(key, of: :strings, delimiter: ",", default: nil, required: false)
|
6
18
|
check_default_type(:array, default, Array)
|
7
19
|
check_valid_data_type!(of)
|
@@ -22,23 +34,12 @@ module EnvironmentHelpers
|
|
22
34
|
end
|
23
35
|
|
24
36
|
def check_default_data_types!(default, type)
|
37
|
+
return if default.nil?
|
25
38
|
invalid = Array(default).reject { |val| val.is_a? TYPE_MAP[type] }
|
26
39
|
|
27
40
|
unless invalid.empty?
|
28
41
|
fail(BadDefault, "Default array contains values not of type `#{type}': #{invalid.join(", ")}")
|
29
42
|
end
|
30
43
|
end
|
31
|
-
|
32
|
-
TYPE_HANDLERS = {
|
33
|
-
integers: :to_i,
|
34
|
-
strings: :to_s,
|
35
|
-
symbols: :to_sym
|
36
|
-
}
|
37
|
-
|
38
|
-
TYPE_MAP = {
|
39
|
-
integers: Integer,
|
40
|
-
strings: String,
|
41
|
-
symbols: Symbol
|
42
|
-
}
|
43
44
|
end
|
44
45
|
end
|
@@ -6,7 +6,7 @@ module EnvironmentHelpers
|
|
6
6
|
check_range_endpoint(:integer_range, default.end) if default
|
7
7
|
|
8
8
|
text = fetch_value(name, required: required)
|
9
|
-
range = parse_range_from(text)
|
9
|
+
range = text ? parse_range_from(text) : nil
|
10
10
|
return range if range
|
11
11
|
return default unless required
|
12
12
|
fail(InvalidRangeText, "Required Integer Range environment variable #{name} had inappropriate content '#{text}'")
|
@@ -6,7 +6,7 @@ module EnvironmentHelpers
|
|
6
6
|
|
7
7
|
def symbol(name, default: nil, required: false)
|
8
8
|
check_default_type(:symbol, default, Symbol)
|
9
|
-
string(name, default: default, required: required)&.to_sym
|
9
|
+
string(name, default: default&.to_s, required: required)&.to_sym
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/lib/environment_helpers.rb
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
# And we're compatible back to 2.6
|
3
3
|
require "set" # rubocop:disable Lint/RedundantRequireStatement
|
4
4
|
|
5
|
-
require_relative "
|
6
|
-
require_relative "
|
7
|
-
require_relative "
|
8
|
-
require_relative "
|
9
|
-
require_relative "
|
10
|
-
require_relative "
|
11
|
-
require_relative "
|
12
|
-
require_relative "
|
5
|
+
require_relative "environment_helpers/access_helpers"
|
6
|
+
require_relative "environment_helpers/string_helpers"
|
7
|
+
require_relative "environment_helpers/boolean_helpers"
|
8
|
+
require_relative "environment_helpers/range_helpers"
|
9
|
+
require_relative "environment_helpers/numeric_helpers"
|
10
|
+
require_relative "environment_helpers/file_helpers"
|
11
|
+
require_relative "environment_helpers/datetime_helpers"
|
12
|
+
require_relative "environment_helpers/enumerable_helpers"
|
13
13
|
|
14
14
|
module EnvironmentHelpers
|
15
15
|
Error = Class.new(::StandardError)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module EnvironmentHelpers
|
2
|
+
VERSION: String
|
3
|
+
|
4
|
+
class Error < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
class MissingVariableError < Error
|
8
|
+
end
|
9
|
+
|
10
|
+
class BadDefault < Error
|
11
|
+
end
|
12
|
+
|
13
|
+
class BadFormat < Error
|
14
|
+
end
|
15
|
+
|
16
|
+
class InvalidType < Error
|
17
|
+
end
|
18
|
+
|
19
|
+
class InvalidValue < Error
|
20
|
+
end
|
21
|
+
|
22
|
+
class InvalidBooleanText < InvalidValue
|
23
|
+
end
|
24
|
+
|
25
|
+
class InvalidRangeText < InvalidValue
|
26
|
+
end
|
27
|
+
|
28
|
+
class InvalidIntegerText < InvalidValue
|
29
|
+
end
|
30
|
+
|
31
|
+
class InvalidDateText < InvalidValue
|
32
|
+
end
|
33
|
+
|
34
|
+
class InvalidDateTimeText < InvalidValue
|
35
|
+
end
|
36
|
+
|
37
|
+
module AccessHelpers
|
38
|
+
# (Actually provided by ENV, which these are all extended onto)
|
39
|
+
def fetch: (String name) -> String?
|
40
|
+
| (String name, String? default) -> String?
|
41
|
+
|
42
|
+
private def fetch_value: (String name, required: bool) -> String?
|
43
|
+
private def check_default_type: (String | Symbol context, untyped value, *Class types) -> void
|
44
|
+
private def check_default_value: (String | Symbol context, untyped value, allow: Enumerable[untyped]) -> void
|
45
|
+
end
|
46
|
+
|
47
|
+
module FileHelpers : AccessHelpers
|
48
|
+
def file_path: (String name, default: String?, required: bool) -> Pathname?
|
49
|
+
end
|
50
|
+
|
51
|
+
module DatetimeHelpers : AccessHelpers
|
52
|
+
type date_time_result = DateTime? | Time?
|
53
|
+
def date: (String name, format: String, default: Date?, required: bool) -> Date?
|
54
|
+
def date_time: (String name, format: String | Symbol, default: date_time_result, required: bool) -> date_time_result
|
55
|
+
private def parse_date_from: (String? text, format: String) -> Date?
|
56
|
+
private def parse_date_time_from: (String? text, format: String | Symbol) -> DateTime?
|
57
|
+
private def iso8601_date_time: (String) -> DateTime?
|
58
|
+
private def unix_date_time: (String) -> DateTime?
|
59
|
+
private def strptime_date_time: (String, format: String) -> DateTime?
|
60
|
+
end
|
61
|
+
|
62
|
+
module NumericHelpers : AccessHelpers
|
63
|
+
def integer: (String name, default: Integer?, required: bool) -> Integer?
|
64
|
+
end
|
65
|
+
|
66
|
+
module RangeHelpers : AccessHelpers
|
67
|
+
def integer_range: (String name, default: Range[Integer]?, required: bool) -> Range[Integer]?
|
68
|
+
private def check_range_endpoint: (String | Symbol context, untyped value) -> void
|
69
|
+
private def parse_range_bound_from: (String?) -> Integer?
|
70
|
+
private def parse_range_from: (String) -> Range[Integer]?
|
71
|
+
end
|
72
|
+
|
73
|
+
module BooleanHelpers : AccessHelpers
|
74
|
+
BOOLEAN_VALUES: Set[bool]
|
75
|
+
def boolean: (String name, default: bool?, required: bool) -> boolish
|
76
|
+
private def truthy_text?: (String?) -> boolish
|
77
|
+
private def falsey_text?: (String?) -> boolish
|
78
|
+
private def truthy_strings: () -> Set[String]
|
79
|
+
private def falsey_strings: () -> Set[String]
|
80
|
+
end
|
81
|
+
|
82
|
+
module EnumerableHelpers : AccessHelpers
|
83
|
+
VALID_TYPES: Array[Symbol]
|
84
|
+
TYPE_HANDLERS: Hash[Symbol, Symbol]
|
85
|
+
TYPE_MAP: Hash[Symbol, Class]
|
86
|
+
type arrayable = Integer | String | Symbol
|
87
|
+
def array: (String key, of: Symbol, delimiter: String, default: Array[arrayable]?, required: bool) -> Array[arrayable]?
|
88
|
+
private def check_valid_data_type!: (Symbol) -> void
|
89
|
+
private def check_default_data_types!: (Array[arrayable]?, Symbol) -> void
|
90
|
+
end
|
91
|
+
|
92
|
+
module StringHelpers : AccessHelpers
|
93
|
+
def string: (String name, default: String?, required: bool) -> String?
|
94
|
+
def symbol: (String name, default: Symbol?, required: bool) -> Symbol?
|
95
|
+
end
|
96
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: environment_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -133,6 +133,7 @@ extra_rdoc_files: []
|
|
133
133
|
files:
|
134
134
|
- ".github/workflows/quality.yml"
|
135
135
|
- ".github/workflows/rspec.yml"
|
136
|
+
- ".github/workflows/type_check.yml"
|
136
137
|
- ".gitignore"
|
137
138
|
- ".mdl_rules.rb"
|
138
139
|
- ".mdlrc"
|
@@ -144,6 +145,7 @@ files:
|
|
144
145
|
- Gemfile
|
145
146
|
- LICENSE
|
146
147
|
- README.md
|
148
|
+
- Steepfile
|
147
149
|
- environment_helpers.gemspec
|
148
150
|
- lib/environment_helpers.rb
|
149
151
|
- lib/environment_helpers/access_helpers.rb
|
@@ -155,6 +157,7 @@ files:
|
|
155
157
|
- lib/environment_helpers/range_helpers.rb
|
156
158
|
- lib/environment_helpers/string_helpers.rb
|
157
159
|
- lib/environment_helpers/version.rb
|
160
|
+
- sig/environment_helpers.rbs
|
158
161
|
homepage: https://github.com/nevinera/environment_helpers
|
159
162
|
licenses:
|
160
163
|
- MIT
|