env_parser 1.2.0 → 1.3.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/.rubocop.yml +48 -57
- data/Gemfile.lock +19 -1
- data/README.md +214 -125
- data/docs/EnvParser.html +214 -32
- data/docs/EnvParser/AutoregisterFileNotFound.html +144 -0
- data/docs/EnvParser/Error.html +2 -2
- data/docs/EnvParser/TypeAlreadyDefinedError.html +1 -1
- data/docs/EnvParser/Types.html +1 -1
- data/docs/EnvParser/Types/BaseTypes.html +1 -1
- data/docs/EnvParser/Types/ChronologyTypes.html +1 -1
- data/docs/EnvParser/Types/InternetTypes.html +1 -1
- data/docs/EnvParser/UnknownTypeError.html +1 -1
- data/docs/EnvParser/UnparseableAutoregisterSpec.html +144 -0
- data/docs/EnvParser/ValueNotAllowedError.html +1 -1
- data/docs/EnvParser/ValueNotConvertibleError.html +1 -1
- data/docs/_index.html +26 -1
- data/docs/class_list.html +1 -1
- data/docs/file.README.html +296 -169
- data/docs/index.html +296 -169
- data/docs/method_list.html +11 -3
- data/docs/top-level-namespace.html +1 -1
- data/env_parser.gemspec +2 -0
- data/lib/env_parser.rb +47 -3
- data/lib/env_parser/autoregister.rb +3 -0
- data/lib/env_parser/errors.rb +12 -0
- data/lib/env_parser/types/chronology_types.rb +1 -1
- data/lib/env_parser/types/internet_types.rb +2 -2
- data/lib/env_parser/version.rb +1 -1
- metadata +33 -2
data/docs/method_list.html
CHANGED
@@ -54,13 +54,21 @@
|
|
54
54
|
|
55
55
|
<li class="even ">
|
56
56
|
<div class="item">
|
57
|
-
<span class='object_link'><a href="EnvParser.html#
|
57
|
+
<span class='object_link'><a href="EnvParser.html#autoregister-class_method" title="EnvParser.autoregister (method)">autoregister</a></span>
|
58
58
|
<small>EnvParser</small>
|
59
59
|
</div>
|
60
60
|
</li>
|
61
61
|
|
62
62
|
|
63
63
|
<li class="odd ">
|
64
|
+
<div class="item">
|
65
|
+
<span class='object_link'><a href="EnvParser.html#define_type-class_method" title="EnvParser.define_type (method)">define_type</a></span>
|
66
|
+
<small>EnvParser</small>
|
67
|
+
</div>
|
68
|
+
</li>
|
69
|
+
|
70
|
+
|
71
|
+
<li class="even ">
|
64
72
|
<div class="item">
|
65
73
|
<span class='object_link'><a href="top-level-namespace.html#filename-instance_method" title="#filename (method)">#filename</a></span>
|
66
74
|
<small>Top Level Namespace</small>
|
@@ -68,7 +76,7 @@
|
|
68
76
|
</li>
|
69
77
|
|
70
78
|
|
71
|
-
<li class="
|
79
|
+
<li class="odd ">
|
72
80
|
<div class="item">
|
73
81
|
<span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span>
|
74
82
|
<small>EnvParser</small>
|
@@ -76,7 +84,7 @@
|
|
76
84
|
</li>
|
77
85
|
|
78
86
|
|
79
|
-
<li class="
|
87
|
+
<li class="even ">
|
80
88
|
<div class="item">
|
81
89
|
<span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span>
|
82
90
|
<small>EnvParser</small>
|
@@ -178,7 +178,7 @@
|
|
178
178
|
</div>
|
179
179
|
|
180
180
|
<div id="footer">
|
181
|
-
Generated on
|
181
|
+
Generated on Sun Nov 3 21:30:37 2019 by
|
182
182
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
183
183
|
0.9.20 (ruby-2.4.2).
|
184
184
|
</div>
|
data/env_parser.gemspec
CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
25
25
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
26
|
spec.add_development_dependency 'rspec_junit_formatter'
|
27
|
+
spec.add_development_dependency 'rubocop'
|
28
|
+
spec.add_development_dependency 'yard'
|
27
29
|
|
28
30
|
spec.add_dependency 'activesupport', '>= 5.0.0'
|
29
31
|
spec.add_dependency 'chronic'
|
data/lib/env_parser.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
require 'env_parser/errors'
|
2
2
|
require 'env_parser/version'
|
3
3
|
require 'active_support/all'
|
4
|
+
require 'psych'
|
4
5
|
|
5
6
|
## The EnvParser class simplifies parsing of environment variables as different data types.
|
6
7
|
##
|
7
8
|
class EnvParser
|
9
|
+
## The default filename to use for {.autoregister} requests.
|
10
|
+
##
|
11
|
+
AUTOREGISTER_FILE = '.env_parser.yml'.freeze
|
12
|
+
|
8
13
|
class << self
|
9
14
|
## Defines a new type for use as the "as" option on a subsequent {.parse} or {.register} call.
|
10
15
|
##
|
@@ -189,9 +194,7 @@ class EnvParser
|
|
189
194
|
name = name.to_s
|
190
195
|
end
|
191
196
|
|
192
|
-
unless from.is_a? Hash
|
193
|
-
raise ArgumentError, "invalid `from` parameter: #{from.class}"
|
194
|
-
end
|
197
|
+
raise ArgumentError, "invalid `from` parameter: #{from.class}" unless from.is_a? Hash
|
195
198
|
|
196
199
|
unless within.is_a?(Module) || within.is_a?(Class)
|
197
200
|
raise ArgumentError, "invalid `within` parameter: #{within.inspect}"
|
@@ -227,6 +230,47 @@ class EnvParser
|
|
227
230
|
ENV
|
228
231
|
end
|
229
232
|
|
233
|
+
## Reads an "autoregister" file and registers the ENV constants defined therein.
|
234
|
+
##
|
235
|
+
## The "autoregister" file is read, parsed as YAML, sanitized for use as a parameter to
|
236
|
+
## {.register_all}, and then passed along for processing. The return value from that
|
237
|
+
## {.register_all} call is passed through.
|
238
|
+
##
|
239
|
+
## @param filename [String]
|
240
|
+
## A path for the autoregister file to parse and process. Defaults to
|
241
|
+
## {EnvParser::AUTOREGISTER_FILE} if unset.
|
242
|
+
##
|
243
|
+
## @return [Hash]
|
244
|
+
## The return value from the {.register_all} call that handles the actual registration.
|
245
|
+
##
|
246
|
+
## @raise [EnvParser::AutoregisterFileNotFound, EnvParser::UnparseableAutoregisterSpec]
|
247
|
+
##
|
248
|
+
def autoregister(filename = nil)
|
249
|
+
filename ||= AUTOREGISTER_FILE
|
250
|
+
autoregister_spec = Psych.load_file(filename)
|
251
|
+
|
252
|
+
autoregister_spec.deep_symbolize_keys!
|
253
|
+
autoregister_spec.transform_values! do |spec|
|
254
|
+
sanitized = spec.slice(:as, :within, :if_unset, :from_set)
|
255
|
+
sanitized[:as] = sanitized[:as].to_sym if sanitized.key? :as
|
256
|
+
sanitized[:within] = sanitized[:within].constantize if sanitized.key? :within
|
257
|
+
|
258
|
+
sanitized
|
259
|
+
end
|
260
|
+
|
261
|
+
register_all autoregister_spec
|
262
|
+
|
263
|
+
## Psych raises an Errno::ENOENT on file-not-found.
|
264
|
+
##
|
265
|
+
rescue Errno::ENOENT
|
266
|
+
raise EnvParser::AutoregisterFileNotFound, %(file not found: "#{filename}")
|
267
|
+
|
268
|
+
## Psych raises a Psych::SyntaxError on unparseable YAML.
|
269
|
+
##
|
270
|
+
rescue Psych::SyntaxError => e
|
271
|
+
raise EnvParser::UnparseableAutoregisterSpec, "malformed YAML in spec file: #{e.message}"
|
272
|
+
end
|
273
|
+
|
230
274
|
private
|
231
275
|
|
232
276
|
## Class instance variable for storing known type data.
|
data/lib/env_parser/errors.rb
CHANGED
@@ -25,4 +25,16 @@ class EnvParser
|
|
25
25
|
##
|
26
26
|
class ValueNotAllowedError < Error
|
27
27
|
end
|
28
|
+
|
29
|
+
## Error class used to indicate a missing auto-registration spec file (used by the "autoregister"
|
30
|
+
## feature).
|
31
|
+
##
|
32
|
+
class AutoregisterFileNotFound < Error
|
33
|
+
end
|
34
|
+
|
35
|
+
## Error class used to indicate an unparseable auto-registration spec (used by the "autoregister"
|
36
|
+
## feature).
|
37
|
+
##
|
38
|
+
class UnparseableAutoregisterSpec < Error
|
39
|
+
end
|
28
40
|
end
|
@@ -88,7 +88,7 @@ module EnvParser::Types
|
|
88
88
|
## With `raise_exceptions` set, ChronicDuration will fail on the "P" and "T" in ISO8601
|
89
89
|
## periods, so we have to check for and remove them.
|
90
90
|
##
|
91
|
-
iso_period = %r{^\s*P(?:[0-9.]Y)?(?:[0-9.]M)?(?:[0-9.]W)?(?:[0-9.]D)?(?:T(?:[0-9.]H)?(?:[0-9.]M)?(?:[0-9.]S)?)?\s*$}
|
91
|
+
iso_period = %r{^\s*P(?:[0-9.]Y)?(?:[0-9.]M)?(?:[0-9.]W)?(?:[0-9.]D)?(?:T(?:[0-9.]H)?(?:[0-9.]M)?(?:[0-9.]S)?)?\s*$} ## rubocop:disable Metrics/LineLength
|
92
92
|
value = value.delete 'PT' if value =~ iso_period
|
93
93
|
|
94
94
|
value = ChronicDuration.parse value, keep_zero: true
|
@@ -79,7 +79,7 @@ module EnvParser::Types
|
|
79
79
|
EnvParser.define_type(:network_port, aliases: :port, if_unset: nil) do |value|
|
80
80
|
begin
|
81
81
|
Integer(value)
|
82
|
-
rescue
|
82
|
+
rescue ArgumentError
|
83
83
|
raise(EnvParser::ValueNotConvertibleError, 'non-numeric value')
|
84
84
|
end
|
85
85
|
|
@@ -90,7 +90,7 @@ module EnvParser::Types
|
|
90
90
|
end
|
91
91
|
|
92
92
|
EnvParser.define_type(:email_address, if_unset: nil) do |value|
|
93
|
-
simple_email = %r[^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$]i
|
93
|
+
simple_email = %r[^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$]i ## rubocop:disable Metrics/LineLength
|
94
94
|
raise(EnvParser::ValueNotConvertibleError, 'not an email') unless value.match?(simple_email)
|
95
95
|
|
96
96
|
value
|
data/lib/env_parser/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: env_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nestor Custodio
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: activesupport
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +158,7 @@ files:
|
|
130
158
|
- bin/console
|
131
159
|
- bin/setup
|
132
160
|
- docs/EnvParser.html
|
161
|
+
- docs/EnvParser/AutoregisterFileNotFound.html
|
133
162
|
- docs/EnvParser/Error.html
|
134
163
|
- docs/EnvParser/TypeAlreadyDefined.html
|
135
164
|
- docs/EnvParser/TypeAlreadyDefinedError.html
|
@@ -138,6 +167,7 @@ files:
|
|
138
167
|
- docs/EnvParser/Types/ChronologyTypes.html
|
139
168
|
- docs/EnvParser/Types/InternetTypes.html
|
140
169
|
- docs/EnvParser/UnknownTypeError.html
|
170
|
+
- docs/EnvParser/UnparseableAutoregisterSpec.html
|
141
171
|
- docs/EnvParser/ValueNotAllowed.html
|
142
172
|
- docs/EnvParser/ValueNotAllowedError.html
|
143
173
|
- docs/EnvParser/ValueNotConvertibleError.html
|
@@ -162,6 +192,7 @@ files:
|
|
162
192
|
- docs/top-level-namespace.html
|
163
193
|
- env_parser.gemspec
|
164
194
|
- lib/env_parser.rb
|
195
|
+
- lib/env_parser/autoregister.rb
|
165
196
|
- lib/env_parser/errors.rb
|
166
197
|
- lib/env_parser/types.rb
|
167
198
|
- lib/env_parser/types/base_types.rb
|