env_parser 1.6.2 → 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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -2
  3. data/Gemfile.lock +73 -30
  4. data/README.md +2 -2
  5. data/docs/EnvParser/AutoregisterFileNotFound.html +12 -9
  6. data/docs/EnvParser/Error.html +10 -8
  7. data/docs/EnvParser/TypeAlreadyDefinedError.html +11 -8
  8. data/docs/EnvParser/Types/BaseTypes.html +11 -11
  9. data/docs/EnvParser/Types/ChronologyTypes.html +10 -9
  10. data/docs/EnvParser/Types/InternetTypes.html +10 -9
  11. data/docs/EnvParser/Types.html +12 -10
  12. data/docs/EnvParser/UnknownTypeError.html +12 -9
  13. data/docs/EnvParser/UnparseableAutoregisterSpec.html +12 -9
  14. data/docs/EnvParser/ValueNotAllowedError.html +12 -9
  15. data/docs/EnvParser/ValueNotConvertibleError.html +11 -8
  16. data/docs/EnvParser.html +67 -113
  17. data/docs/_index.html +9 -7
  18. data/docs/class_list.html +5 -5
  19. data/docs/css/common.css +1 -1
  20. data/docs/css/full_list.css +201 -53
  21. data/docs/css/style.css +988 -402
  22. data/docs/file.README.html +242 -327
  23. data/docs/file_list.html +5 -5
  24. data/docs/frames.html +1 -1
  25. data/docs/index.html +242 -327
  26. data/docs/js/app.js +800 -343
  27. data/docs/js/full_list.js +332 -240
  28. data/docs/method_list.html +5 -5
  29. data/docs/top-level-namespace.html +8 -6
  30. data/env_parser.gemspec +3 -3
  31. data/lib/env_parser/types/internet_types.rb +2 -2
  32. data/lib/env_parser/version.rb +1 -1
  33. data/lib/env_parser.rb +1 -3
  34. metadata +4 -9
  35. data/spec/env_parser/types/base_types_spec.rb +0 -98
  36. data/spec/env_parser/types/chronology_types_spec.rb +0 -49
  37. data/spec/env_parser/types/internet_types_spec.rb +0 -95
  38. data/spec/env_parser_spec.rb +0 -214
  39. data/spec/spec_helper.rb +0 -14
data/lib/env_parser.rb CHANGED
@@ -339,9 +339,7 @@ class EnvParser
339
339
  def register_all(list)
340
340
  raise(ArgumentError, "invalid 'list' parameter type: #{list.class}") unless list.is_a? Hash
341
341
 
342
- list.to_a.each_with_object({}) do |tuple, output|
343
- output[tuple.first] = register(tuple.first, tuple.second)
344
- end
342
+ list.to_h { |name, options| [name, register(name, options)] }
345
343
  end
346
344
  end
347
345
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: env_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nestor Custodio
@@ -63,14 +63,14 @@ dependencies:
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '2'
66
+ version: '4'
67
67
  type: :development
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '2'
73
+ version: '4'
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: rspec
76
76
  requirement: !ruby/object:Gem::Requirement
@@ -188,11 +188,6 @@ files:
188
188
  - lib/env_parser/types/chronology_types.rb
189
189
  - lib/env_parser/types/internet_types.rb
190
190
  - lib/env_parser/version.rb
191
- - spec/env_parser/types/base_types_spec.rb
192
- - spec/env_parser/types/chronology_types_spec.rb
193
- - spec/env_parser/types/internet_types_spec.rb
194
- - spec/env_parser_spec.rb
195
- - spec/spec_helper.rb
196
191
  homepage: https://github.com/nestor-custodio/env_parser
197
192
  licenses:
198
193
  - MIT
@@ -203,7 +198,7 @@ require_paths:
203
198
  - lib
204
199
  required_ruby_version: !ruby/object:Gem::Requirement
205
200
  requirements:
206
- - - "~>"
201
+ - - ">="
207
202
  - !ruby/object:Gem::Version
208
203
  version: '3'
209
204
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -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