env_parser 1.6.1 → 1.7.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +5 -4
  3. data/.ruby-version +1 -1
  4. data/Gemfile.lock +108 -43
  5. data/README.md +28 -15
  6. data/docs/EnvParser/AutoregisterFileNotFound.html +12 -9
  7. data/docs/EnvParser/Error.html +10 -8
  8. data/docs/EnvParser/TypeAlreadyDefinedError.html +11 -8
  9. data/docs/EnvParser/Types/BaseTypes.html +11 -11
  10. data/docs/EnvParser/Types/ChronologyTypes.html +10 -9
  11. data/docs/EnvParser/Types/InternetTypes.html +10 -9
  12. data/docs/EnvParser/Types.html +12 -10
  13. data/docs/EnvParser/UnknownTypeError.html +12 -9
  14. data/docs/EnvParser/UnparseableAutoregisterSpec.html +12 -9
  15. data/docs/EnvParser/ValueNotAllowedError.html +12 -9
  16. data/docs/EnvParser/ValueNotConvertibleError.html +11 -8
  17. data/docs/EnvParser.html +67 -113
  18. data/docs/_index.html +9 -7
  19. data/docs/class_list.html +10 -7
  20. data/docs/css/common.css +1 -1
  21. data/docs/css/full_list.css +201 -53
  22. data/docs/css/style.css +991 -399
  23. data/docs/file.README.html +243 -315
  24. data/docs/file_list.html +9 -6
  25. data/docs/frames.html +10 -5
  26. data/docs/index.html +243 -315
  27. data/docs/js/app.js +799 -312
  28. data/docs/js/full_list.js +332 -214
  29. data/docs/method_list.html +9 -6
  30. data/docs/top-level-namespace.html +8 -6
  31. data/env_parser.gemspec +5 -5
  32. data/lib/env_parser/types/internet_types.rb +2 -2
  33. data/lib/env_parser/version.rb +1 -1
  34. data/lib/env_parser.rb +1 -3
  35. metadata +9 -21
  36. data/spec/env_parser/types/base_types_spec.rb +0 -98
  37. data/spec/env_parser/types/chronology_types_spec.rb +0 -49
  38. data/spec/env_parser/types/internet_types_spec.rb +0 -95
  39. data/spec/env_parser_spec.rb +0 -214
  40. data/spec/spec_helper.rb +0 -14
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: env_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nestor Custodio
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-01-01 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -19,7 +18,7 @@ dependencies:
19
18
  version: 6.1.0
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '7.1'
21
+ version: '9'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +28,7 @@ dependencies:
29
28
  version: 6.1.0
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '7.1'
31
+ version: '9'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: chronic
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +63,14 @@ dependencies:
64
63
  requirements:
65
64
  - - "~>"
66
65
  - !ruby/object:Gem::Version
67
- version: '2'
66
+ version: '4'
68
67
  type: :development
69
68
  prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - "~>"
73
72
  - !ruby/object:Gem::Version
74
- version: '2'
73
+ version: '4'
75
74
  - !ruby/object:Gem::Dependency
76
75
  name: rspec
77
76
  requirement: !ruby/object:Gem::Requirement
@@ -128,9 +127,8 @@ dependencies:
128
127
  - - ">="
129
128
  - !ruby/object:Gem::Version
130
129
  version: '0'
131
- description:
132
130
  email:
133
- - sakimorix@gmail.com
131
+ - nestor@custodio.org
134
132
  executables: []
135
133
  extensions: []
136
134
  extra_rdoc_files: []
@@ -190,17 +188,11 @@ files:
190
188
  - lib/env_parser/types/chronology_types.rb
191
189
  - lib/env_parser/types/internet_types.rb
192
190
  - lib/env_parser/version.rb
193
- - spec/env_parser/types/base_types_spec.rb
194
- - spec/env_parser/types/chronology_types_spec.rb
195
- - spec/env_parser/types/internet_types_spec.rb
196
- - spec/env_parser_spec.rb
197
- - spec/spec_helper.rb
198
191
  homepage: https://github.com/nestor-custodio/env_parser
199
192
  licenses:
200
193
  - MIT
201
194
  metadata:
202
195
  rubygems_mfa_required: 'true'
203
- post_install_message:
204
196
  rdoc_options: []
205
197
  require_paths:
206
198
  - lib
@@ -208,18 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
200
  requirements:
209
201
  - - ">="
210
202
  - !ruby/object:Gem::Version
211
- version: '3.0'
212
- - - "<"
213
- - !ruby/object:Gem::Version
214
- version: '3.2'
203
+ version: '3'
215
204
  required_rubygems_version: !ruby/object:Gem::Requirement
216
205
  requirements:
217
206
  - - ">="
218
207
  - !ruby/object:Gem::Version
219
208
  version: '0'
220
209
  requirements: []
221
- rubygems_version: 3.2.33
222
- signing_key:
210
+ rubygems_version: 3.6.9
223
211
  specification_version: 4
224
212
  summary: A tool for painless parsing and validation of environment variables.
225
213
  test_files: []
@@ -1,98 +0,0 @@
1
- RSpec.describe EnvParser::Types::BaseTypes do
2
- it 'can parse strings' do
3
- expect(EnvParser.parse(nil, as: :string)).to eq('')
4
- expect(EnvParser.parse('', as: :string)).to eq('')
5
-
6
- expect(EnvParser.parse('value', as: :string)).to eq('value')
7
- end
8
-
9
- it 'can parse symbols' do
10
- expect(EnvParser.parse(nil, as: :symbol)).to eq(:'')
11
- expect(EnvParser.parse('', as: :symbol)).to eq(:'')
12
-
13
- expect(EnvParser.parse('value', as: :symbol)).to eq(:value)
14
- end
15
-
16
- it 'can parse booleans' do
17
- expect(EnvParser.parse(nil, as: :boolean)).to eq(false)
18
- expect(EnvParser.parse('', as: :boolean)).to eq(false)
19
-
20
- expect(EnvParser.parse('0', as: :boolean)).to eq(false)
21
- expect(EnvParser.parse('f', as: :boolean)).to eq(false)
22
- expect(EnvParser.parse('false', as: :boolean)).to eq(false)
23
-
24
- expect(EnvParser.parse('1', as: :boolean)).to eq(true)
25
- expect(EnvParser.parse('t', as: :boolean)).to eq(true)
26
- expect(EnvParser.parse('true', as: :boolean)).to eq(true)
27
- end
28
-
29
- it 'can parse integers' do
30
- %i[int integer].each do |type|
31
- expect(EnvParser.parse(nil, as: type)).to eq(0)
32
- expect(EnvParser.parse('', as: type)).to eq(0)
33
-
34
- expect(EnvParser.parse('-1.9', as: type)).to eq(-1)
35
- expect(EnvParser.parse('-1.1', as: type)).to eq(-1)
36
- expect(EnvParser.parse('-1', as: type)).to eq(-1)
37
- expect(EnvParser.parse('0', as: type)).to eq(0)
38
- expect(EnvParser.parse('1', as: type)).to eq(1)
39
- expect(EnvParser.parse('1.1', as: type)).to eq(1)
40
- expect(EnvParser.parse('1.9', as: type)).to eq(1)
41
-
42
- expect(EnvParser.parse('non-numeric', as: type)).to eq(0)
43
- end
44
- end
45
-
46
- it 'can parse floats' do
47
- %i[float decimal number].each do |type|
48
- expect(EnvParser.parse(nil, as: type)).to eq(0.0)
49
- expect(EnvParser.parse('', as: type)).to eq(0.0)
50
-
51
- expect(EnvParser.parse('-1.9', as: type)).to eq(-1.9)
52
- expect(EnvParser.parse('-1.1', as: type)).to eq(-1.1)
53
- expect(EnvParser.parse('-1', as: type)).to eq(-1.0)
54
- expect(EnvParser.parse('0', as: type)).to eq(0.0)
55
- expect(EnvParser.parse('1', as: type)).to eq(1.0)
56
- expect(EnvParser.parse('1.1', as: type)).to eq(1.1)
57
- expect(EnvParser.parse('1.9', as: type)).to eq(1.9)
58
-
59
- expect(EnvParser.parse('non-numeric', as: type)).to eq(0.0)
60
- end
61
- end
62
-
63
- it 'can parse json' do
64
- expect(EnvParser.parse(nil, as: :json)).to eq(nil)
65
- expect(EnvParser.parse('', as: :json)).to eq(nil)
66
-
67
- expect { EnvParser.parse('non-json-parseable string', as: :json) }.to raise_error(JSON::ParserError)
68
-
69
- expect(EnvParser.parse('null', as: :json)).to eq(nil)
70
- expect(EnvParser.parse('true', as: :json)).to eq(true)
71
- expect(EnvParser.parse('false', as: :json)).to eq(false)
72
- expect(EnvParser.parse('1', as: :json)).to eq(1)
73
- expect(EnvParser.parse('1.1', as: :json)).to eq(1.1)
74
- expect(EnvParser.parse('"some string"', as: :json)).to eq('some string')
75
- expect(EnvParser.parse('["one", 2, "three"]', as: :json)).to eq(['one', 2, 'three'])
76
- expect(EnvParser.parse('{ "one": 1, "two": 2, "three": "three" }', as: :json)).to eq('one' => 1, 'two' => 2, 'three' => 'three')
77
- end
78
-
79
- it 'can parse arrays' do
80
- expect(EnvParser.parse(nil, as: :array)).to eq([])
81
- expect(EnvParser.parse('', as: :array)).to eq([])
82
-
83
- expect { EnvParser.parse('non-json-parseable string', as: :array) }.to raise_error(JSON::ParserError)
84
- expect { EnvParser.parse('"parseable json, but not an array"', as: :array) }.to raise_error(EnvParser::ValueNotConvertibleError)
85
-
86
- expect(EnvParser.parse('["one", 2, "three"]', as: :array)).to eq(['one', 2, 'three'])
87
- end
88
-
89
- it 'can parse hashes' do
90
- expect(EnvParser.parse(nil, as: :hash)).to eq({})
91
- expect(EnvParser.parse('', as: :hash)).to eq({})
92
-
93
- expect { EnvParser.parse('non-json-parseable string', as: :hash) }.to raise_error(JSON::ParserError)
94
- expect { EnvParser.parse('"parseable json, but not a hash"', as: :hash) }.to raise_error(EnvParser::ValueNotConvertibleError)
95
-
96
- expect(EnvParser.parse('{ "one": 1, "two": 2, "three": "three" }', as: :hash)).to eq('one' => 1, 'two' => 2, 'three' => 'three')
97
- end
98
- end
@@ -1,49 +0,0 @@
1
- RSpec.describe EnvParser::Types::ChronologyTypes do
2
- it 'can parse dates' do
3
- expect(EnvParser.parse(nil, as: :date)).to eq(nil)
4
- expect(EnvParser.parse('', as: :date)).to eq(nil)
5
-
6
- expect(EnvParser.parse('11/05/1955 06:00', as: :date)).to eq(Date.new(1955, 11, 5))
7
- expect(EnvParser.parse('11/12/1955 22:04', as: :date)).to eq(Date.new(1955, 11, 12))
8
- expect(EnvParser.parse('1885-09-02 08:00', as: :date)).to eq(Date.new(1885, 9, 2))
9
- expect(EnvParser.parse('1885-09-07', as: :date)).to eq(Date.new(1885, 9, 7))
10
-
11
- expect(EnvParser.parse('tomorrow', as: :date)).to eq(Date.today + 1.day)
12
-
13
- expect { EnvParser.parse('not a date', as: :date) }.to raise_error(EnvParser::ValueNotConvertibleError)
14
- expect { EnvParser.parse('2018-02-29', as: :date) }.to raise_error(EnvParser::ValueNotConvertibleError)
15
- end
16
-
17
- it 'can parse times' do
18
- %i[time datetime].each do |type|
19
- expect(EnvParser.parse(nil, as: type)).to eq(nil)
20
- expect(EnvParser.parse('', as: type)).to eq(nil)
21
-
22
- expect(EnvParser.parse('11/05/1955 06:00', as: type)).to eq(Time.new(1955, 11, 5, 6, 0))
23
- expect(EnvParser.parse('11/12/1955 22:04', as: type)).to eq(Time.new(1955, 11, 12, 22, 4))
24
- expect(EnvParser.parse('1885-09-02 08:00', as: type)).to eq(Time.new(1885, 9, 2, 8, 0))
25
- expect(EnvParser.parse('1885-09-07', as: type)).to eq(Time.new(1885, 9, 7))
26
-
27
- expect(EnvParser.parse('today at 07:15', as: type)).to eq(Date.today + 7.hours + 15.minutes)
28
-
29
- expect { EnvParser.parse('not a date/time', as: type) }.to raise_error(EnvParser::ValueNotConvertibleError)
30
- expect { EnvParser.parse('today at 33:25', as: type) }.to raise_error(EnvParser::ValueNotConvertibleError)
31
- end
32
- end
33
-
34
- it 'can parse durations' do
35
- expect(EnvParser.parse(nil, as: :duration)).to eq(nil)
36
- expect(EnvParser.parse('', as: :duration)).to eq(nil)
37
-
38
- expect(EnvParser.parse('12 seconds', as: :duration)).to eq(12)
39
- expect(EnvParser.parse('5 minutes', as: :duration)).to eq(5 * 60)
40
- expect(EnvParser.parse('24 hours', as: :duration)).to eq(24 * 60 * 60)
41
- expect(EnvParser.parse('1.5 days', as: :duration)).to eq(1.5 * 24 * 60 * 60)
42
- expect(EnvParser.parse('1 day', as: :duration)).to eq(24 * 60 * 60)
43
- expect(EnvParser.parse('2 weeks, 1 day', as: :duration)).to eq((2 * 7 * 24 * 60 * 60) + (24 * 60 * 60))
44
- expect(EnvParser.parse('P2W1DT3H', as: :duration)).to eq((2 * 7 * 24 * 60 * 60) + (24 * 60 * 60) + (3 * 60 * 60))
45
-
46
- expect { EnvParser.parse('not a duration', as: :duration) }.to raise_error(EnvParser::ValueNotConvertibleError)
47
- expect { EnvParser.parse('37 dinglebops', as: :duration) }.to raise_error(EnvParser::ValueNotConvertibleError)
48
- end
49
- end
@@ -1,95 +0,0 @@
1
- RSpec.describe EnvParser::Types::InternetTypes do
2
- it 'can parse ipv4 addresses' do
3
- expect(EnvParser.parse(nil, as: :ipv4_address)).to eq(nil)
4
- expect(EnvParser.parse('', as: :ipv4_address)).to eq(nil)
5
-
6
- expect(EnvParser.parse('localhost', as: :ipv4_address)).to eq('127.0.0.1')
7
- expect(EnvParser.parse('192.168.000.001', as: :ipv4_address)).to eq('192.168.0.1')
8
-
9
- expect { EnvParser.parse('not an ip address', as: :ipv4_address) }.to raise_error(EnvParser::ValueNotConvertibleError)
10
- end
11
-
12
- it 'can parse ipv6 addresses' do
13
- expect(EnvParser.parse(nil, as: :ipv6_address)).to eq(nil)
14
- expect(EnvParser.parse('', as: :ipv6_address)).to eq(nil)
15
-
16
- expect(EnvParser.parse('::', as: :ipv6_address)).to eq('::')
17
- expect(EnvParser.parse('::1', as: :ipv6_address)).to eq('::1')
18
- expect(EnvParser.parse('abcd::abcd:abcd', as: :ipv6_address)).to eq('abcd::abcd:abcd')
19
-
20
- expect { EnvParser.parse('not an ip address', as: :ipv6_address) }.to raise_error(EnvParser::ValueNotConvertibleError)
21
- end
22
-
23
- it 'can parse network ports' do
24
- %i[network_port port].each do |type|
25
- expect(EnvParser.parse(nil, as: type)).to eq(nil)
26
- expect(EnvParser.parse('', as: type)).to eq(nil)
27
-
28
- expect(EnvParser.parse('80', as: type)).to eq(80)
29
- expect(EnvParser.parse('8080', as: type)).to eq(8080)
30
-
31
- expect { EnvParser.parse('99999999', as: type) }.to raise_error(EnvParser::ValueNotAllowedError)
32
- expect { EnvParser.parse('not a port number', as: type) }.to raise_error(EnvParser::ValueNotConvertibleError)
33
- end
34
- end
35
-
36
- it 'can parse email addresses' do
37
- expect(EnvParser.parse(nil, as: :email_address)).to eq(nil)
38
- expect(EnvParser.parse('', as: :email_address)).to eq(nil)
39
-
40
- expect(EnvParser.parse('email@example.com', as: :email_address)).to eq('email@example.com')
41
- expect(EnvParser.parse('some.user@gmail.com', as: :email_address)).to eq('some.user@gmail.com')
42
-
43
- expect { EnvParser.parse('not an email address', as: :email_address) }.to raise_error(EnvParser::ValueNotConvertibleError)
44
- end
45
-
46
- it 'can parse version numbers' do
47
- %i[version semver].each do |type|
48
- expect(EnvParser.parse(nil, as: type)).to eq(nil)
49
- expect(EnvParser.parse('', as: type)).to eq(nil)
50
-
51
- # Our list of valid version strings is a subset of those in the official semver.org-provided regex suite.
52
- # rubocop:disable Layout
53
- #
54
- valid_version_strings = {
55
- '0.0.4' => { major: '0' , minor: '0', patch: '4', prerelease: nil , buildmetadata: nil },
56
- '1.2.3' => { major: '1' , minor: '2', patch: '3', prerelease: nil , buildmetadata: nil },
57
- '1.1.2-prerelease+meta' => { major: '1' , minor: '1', patch: '2', prerelease: 'prerelease' , buildmetadata: 'meta' },
58
- '1.1.2+meta' => { major: '1' , minor: '1', patch: '2', prerelease: nil , buildmetadata: 'meta' },
59
- '1.1.2+meta-valid' => { major: '1' , minor: '1', patch: '2', prerelease: nil , buildmetadata: 'meta-valid' },
60
- '1.0.0-alpha' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha' , buildmetadata: nil },
61
- '1.0.0-beta' => { major: '1' , minor: '0', patch: '0', prerelease: 'beta' , buildmetadata: nil },
62
- '1.0.0-alpha.beta' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha.beta' , buildmetadata: nil },
63
- '1.0.0-alpha.beta.1' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha.beta.1', buildmetadata: nil },
64
- '1.0.0-alpha.1' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha.1' , buildmetadata: nil },
65
- '1.0.0-alpha0.valid' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha0.valid', buildmetadata: nil },
66
- '1.0.0-alpha.0valid' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha.0valid', buildmetadata: nil },
67
- '1.0.0-rc.1+build.1' => { major: '1' , minor: '0', patch: '0', prerelease: 'rc.1' , buildmetadata: 'build.1' },
68
- '2.0.0-rc.1+build.123' => { major: '2' , minor: '0', patch: '0', prerelease: 'rc.1' , buildmetadata: 'build.123' },
69
- '1.2.3-beta' => { major: '1' , minor: '2', patch: '3', prerelease: 'beta' , buildmetadata: nil },
70
- '10.2.3-DEV-SNAPSHOT' => { major: '10', minor: '2', patch: '3', prerelease: 'DEV-SNAPSHOT', buildmetadata: nil },
71
- '1.2.3-SNAPSHOT-123' => { major: '1' , minor: '2', patch: '3', prerelease: 'SNAPSHOT-123', buildmetadata: nil },
72
- '2.0.0+build.1848' => { major: '2' , minor: '0', patch: '0', prerelease: nil , buildmetadata: 'build.1848' },
73
- '2.0.1-alpha.1227' => { major: '2' , minor: '0', patch: '1', prerelease: 'alpha.1227' , buildmetadata: nil },
74
- '1.0.0-alpha+beta' => { major: '1' , minor: '0', patch: '0', prerelease: 'alpha' , buildmetadata: 'beta' },
75
- '1.0.0-0A.is.legal' => { major: '1' , minor: '0', patch: '0', prerelease: '0A.is.legal' , buildmetadata: nil }
76
- }
77
- # rubocop:enable Layout
78
-
79
- valid_version_strings.each do |version, expected_matches|
80
- parsed_value = EnvParser.parse(version, as: type)
81
-
82
- expect(parsed_value).to_not eq(nil)
83
- expected_matches.each { |match_name, expected_value| expect(parsed_value[match_name]).to eq(expected_value) }
84
- end
85
-
86
- # Our list of invalid version strings is a subset of those in the official semver.org-provided regex suite.
87
- #
88
- invalid_version_strings = ['1', '1.2', '1.2.3-0123', '1.2.3-0123.0123', '1.1.2+.123', '+invalid', '-invalid', '-invalid+invalid',
89
- '-invalid.01', 'alpha', 'alpha.1', 'alpha+beta', '1.0.0-alpha..', '1.0.0-alpha..1', '01.1.1', '1.01.1',
90
- '1.1.01', '1.2.3.DEV', '1.2-SNAPSHOT', '+justmeta', '9.8.7+meta+meta', '9.8.7-whatever+meta+meta']
91
-
92
- invalid_version_strings.each { |version| expect { EnvParser.parse(version, as: type) }.to raise_error(EnvParser::ValueNotConvertibleError) }
93
- end
94
- end
95
- end
@@ -1,214 +0,0 @@
1
- require 'tempfile'
2
-
3
- module Sample; end
4
-
5
- RSpec.describe EnvParser do
6
- it 'has a version number' do
7
- expect(EnvParser::VERSION).not_to be nil
8
- end
9
-
10
- describe 'EnvParser.define_type' do
11
- it 'exists' do
12
- expect(EnvParser).to respond_to(:define_type)
13
- end
14
-
15
- it 'can register new types' do
16
- EnvParser.define_type(:thirty) { |_| 30 }
17
- expect(EnvParser.parse('dummy value', as: :thirty)).to eq(30)
18
- end
19
- end
20
-
21
- describe 'EnvParser.parse' do
22
- it 'exists' do
23
- expect(EnvParser).to respond_to(:parse)
24
- end
25
-
26
- it 'returns the requested default when necessary' do
27
- expect(EnvParser.parse(nil, as: :integer, if_unset: 25)).to eq(25)
28
- expect(EnvParser.parse('', as: :integer, if_unset: 25)).to eq(25)
29
-
30
- expect(EnvParser.parse('99', as: :float, if_unset: 25.0)).to eq(99.0)
31
- end
32
-
33
- it 'only allows values from a limited set' do
34
- expect(EnvParser.parse('25', as: :integer, from_set: [20, 25, 30])).to eq(25)
35
- expect { EnvParser.parse('25', as: :integer, from_set: [1, 2, 3]) }.to raise_error(EnvParser::ValueNotAllowedError)
36
-
37
- expect(EnvParser.parse(nil, as: :integer, if_unset: 9, from_set: [1, 2, 3])).to eq(9)
38
- end
39
-
40
- it 'only allows values that pass user-defined validation' do
41
- expect(EnvParser.parse('abc', as: :string)).to eq('abc')
42
- expect(EnvParser.parse('abc', as: :string) { |_| true }).to eq('abc')
43
- expect { EnvParser.parse('abc', as: :string) { |_| false } }.to raise_error(EnvParser::ValueNotAllowedError)
44
-
45
- expect(EnvParser.parse('abc', as: :string)).to eq('abc')
46
- expect(EnvParser.parse('abc', as: :string, validated_by: ->(_) { true })).to eq('abc')
47
- expect { EnvParser.parse('abc', as: :string, validated_by: ->(_) { false }) }.to raise_error(EnvParser::ValueNotAllowedError)
48
- end
49
- end
50
-
51
- describe 'EnvParse.register' do
52
- it 'exists' do
53
- expect(EnvParser).to respond_to(:register)
54
- end
55
-
56
- it 'ceates global constants' do
57
- source_hash = { ABC: '123' }
58
- EnvParser.register(:ABC, from: source_hash, as: :integer)
59
- expect(ABC).to eq(123)
60
- end
61
-
62
- it 'creates module constants' do
63
- source_hash = { DEF: '456' }
64
- EnvParser.register(:DEF, from: source_hash, as: :integer, within: Sample)
65
- expect(Sample::DEF).to eq(456)
66
- end
67
-
68
- it 'creates named module constants' do
69
- source_hash = { GHI: '789' }
70
- EnvParser.register(:GHI, from: source_hash, as: :integer, named: :JKL, within: Sample)
71
- expect { Sample::GHI }.to raise_error(NameError)
72
- expect(Sample::JKL).to eq(789)
73
- end
74
-
75
- it 'will accept a hash keyed by variable names' do
76
- source_hash = { FIRST: 'first', SECOND: '99', THIRD: 'third' }
77
- EnvParser.register(
78
- FIRST: { from: source_hash, as: :string, if_unset: 'no first' },
79
- SECOND: { from: source_hash, as: :integer, if_unset: 'no second' },
80
- THIRD: { from: source_hash, as: :string, if_unset: 'no third' },
81
- FOURTH: { from: source_hash, as: :boolean, if_unset: 'no fourth' }
82
- )
83
-
84
- expect(FIRST).to eq('first')
85
- expect(SECOND).to eq(99)
86
- expect(THIRD).to eq('third')
87
- expect(FOURTH).to eq('no fourth')
88
- end
89
- end
90
-
91
- describe 'EnvParser.add_env_bindings' do
92
- before(:context) { EnvParser.add_env_bindings }
93
-
94
- it 'exists' do
95
- expect(EnvParser).to respond_to(:add_env_bindings)
96
- end
97
-
98
- describe 'ENV.parse' do
99
- it 'now exists' do
100
- expect(ENV).to respond_to(:parse)
101
- end
102
-
103
- it 'interprets input values as ENV keys' do
104
- ENV['ABC'] = '123'
105
- expect(ENV.parse('ABC', as: :integer)).to eq(123)
106
- expect(ENV.parse(:ABC, as: :integer)).to eq(123)
107
- end
108
- end
109
-
110
- describe 'ENV.register' do
111
- it 'now exists' do
112
- expect(ENV).to respond_to(:register)
113
- end
114
-
115
- it 'ceates global constants' do
116
- ENV['ABCD'] = '1234'
117
- ENV.register(:ABCD, as: :integer)
118
- expect(ABCD).to eq(1234)
119
- end
120
-
121
- it 'creates module constants' do
122
- ENV['WXYZ'] = '5678'
123
- ENV.register(:WXYZ, as: :integer, within: Sample)
124
- expect(Sample::WXYZ).to eq(5678)
125
- end
126
-
127
- it 'creates module constants' do
128
- ENV['ORIGINAL_NAME'] = '9999'
129
- ENV.register(:ORIGINAL_NAME, as: :integer, named: :DIFFERENT_NAME, within: Sample)
130
- expect { Sample::ORIGINAL_NAME }.to raise_error(NameError)
131
- expect(Sample::DIFFERENT_NAME).to eq(9999)
132
- end
133
-
134
- it 'will accept a hash keyed by variable names' do
135
- ENV['FIFTH'] = 'fifth'
136
- ENV['SIXTH'] = '99'
137
- ENV['SEVENTH'] = 'seventh'
138
-
139
- ENV.register(
140
- FIFTH: { as: :string, if_unset: 'no fifth' },
141
- SIXTH: { as: :integer, if_unset: 'no sixth' },
142
- SEVENTH: { as: :string, if_unset: 'no seventh' },
143
- EIGHTH: { as: :boolean, if_unset: 'no eighth' }
144
- )
145
-
146
- expect(FIFTH).to eq('fifth')
147
- expect(SIXTH).to eq(99)
148
- expect(SEVENTH).to eq('seventh')
149
- expect(EIGHTH).to eq('no eighth')
150
- end
151
- end
152
- end
153
-
154
- describe 'EnvParser.autoregister' do
155
- it 'exists' do
156
- expect(EnvParser).to respond_to(:autoregister)
157
- end
158
-
159
- it 'can autoregister constants' do
160
- filename = Tempfile.open('EnvParser.autoregister.') do |file|
161
- file.write <<~YAML.chomp
162
- SOME_INT:
163
- as: :integer
164
- if_unset: 25
165
-
166
- SOME_STRING:
167
- as: :string
168
- if_unset: "unexpected"
169
-
170
- CLASS_CONSTANT:
171
- as: :string
172
- within: String
173
-
174
- NAMED_CLASS_CONSTANT:
175
- as: :string
176
- named: :OTHER_CLASS_CONSTANT
177
- within: String
178
- YAML
179
-
180
- file.path
181
- end
182
-
183
- ENV['SOME_INT'] = '99'
184
- ENV['SOME_STRING'] = 'twelve'
185
- ENV['CLASS_CONSTANT'] = 'tricky'
186
- ENV['NAMED_CLASS_CONSTANT'] = 'quizzical'
187
- EnvParser.autoregister filename
188
-
189
- expect(SOME_INT).to eq(99)
190
- expect(SOME_STRING).to eq('twelve')
191
- expect(String::CLASS_CONSTANT).to eq('tricky')
192
- expect { String::NAMED_CLASS_CONSTANT }.to raise_error(NameError)
193
- expect(String::OTHER_CLASS_CONSTANT).to eq('quizzical')
194
- end
195
-
196
- it 'properly handles file-not-found' do
197
- expect { EnvParser.autoregister 'nonexistent filename' }.to raise_error(EnvParser::AutoregisterFileNotFound)
198
- end
199
-
200
- it 'properly handles unparseable YAML' do
201
- filename = Tempfile.open('EnvParser.autoregister.') do |file|
202
- file.write <<~MALFORMED_YAML.chomp
203
- SOME_INT:
204
- as:
205
- hello
206
- MALFORMED_YAML
207
-
208
- file.path
209
- end
210
-
211
- expect { EnvParser.autoregister filename }.to raise_error(EnvParser::UnparseableAutoregisterSpec)
212
- end
213
- end
214
- end
data/spec/spec_helper.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'bundler/setup'
2
- require 'env_parser'
3
-
4
- RSpec.configure do |config|
5
- # Enable flags like --only-failures and --next-failure
6
- config.example_status_persistence_file_path = '.rspec_status'
7
-
8
- # Disable RSpec exposing methods globally on `Module` and `main`
9
- config.disable_monkey_patching!
10
-
11
- config.expect_with :rspec do |c|
12
- c.syntax = :expect
13
- end
14
- end