env_parser 1.3.0 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +1 -1
  3. data/.rubocop.yml +25 -30
  4. data/.ruby-version +1 -1
  5. data/Gemfile.lock +51 -43
  6. data/README.md +1 -1
  7. data/docs/EnvParser/AutoregisterFileNotFound.html +9 -10
  8. data/docs/EnvParser/Error.html +8 -9
  9. data/docs/EnvParser/TypeAlreadyDefinedError.html +8 -9
  10. data/docs/EnvParser/Types/BaseTypes.html +12 -11
  11. data/docs/EnvParser/Types/ChronologyTypes.html +10 -9
  12. data/docs/EnvParser/Types/InternetTypes.html +10 -9
  13. data/docs/EnvParser/Types.html +9 -10
  14. data/docs/EnvParser/UnknownTypeError.html +8 -9
  15. data/docs/EnvParser/UnparseableAutoregisterSpec.html +9 -10
  16. data/docs/EnvParser/ValueNotAllowedError.html +10 -11
  17. data/docs/EnvParser/ValueNotConvertibleError.html +8 -10
  18. data/docs/EnvParser.html +123 -186
  19. data/docs/_index.html +8 -10
  20. data/docs/class_list.html +2 -2
  21. data/docs/css/style.css +3 -2
  22. data/docs/file.README.html +254 -284
  23. data/docs/file_list.html +2 -2
  24. data/docs/frames.html +2 -2
  25. data/docs/index.html +254 -284
  26. data/docs/js/app.js +14 -3
  27. data/docs/method_list.html +3 -11
  28. data/docs/top-level-namespace.html +7 -85
  29. data/env_parser.gemspec +14 -14
  30. data/lib/env_parser/errors.rb +18 -18
  31. data/lib/env_parser/types/base_types.rb +69 -69
  32. data/lib/env_parser/types/chronology_types.rb +54 -54
  33. data/lib/env_parser/types/internet_types.rb +51 -51
  34. data/lib/env_parser/types.rb +2 -2
  35. data/lib/env_parser/version.rb +1 -1
  36. data/lib/env_parser.rb +206 -217
  37. data/spec/env_parser/types/base_types_spec.rb +98 -0
  38. data/spec/env_parser/types/chronology_types_spec.rb +49 -0
  39. data/spec/env_parser/types/internet_types_spec.rb +45 -0
  40. data/spec/env_parser_spec.rb +192 -0
  41. data/spec/spec_helper.rb +14 -0
  42. metadata +54 -50
  43. data/.travis.yml +0 -5
@@ -1,56 +1,56 @@
1
1
  require 'env_parser'
2
2
 
3
- ## The parent module for all EnvParser type definition modules.
4
- ## Exists only for documentation's sake.
5
- ##
3
+ # The parent module for all EnvParser type definition modules.
4
+ # Exists only for documentation's sake.
5
+ #
6
6
  module EnvParser::Types
7
- ## Defines types for internet-related values, adding the following:
8
- ##
9
- ## <table>
10
- ## <tbody>
11
- ## <tr>
12
- ## <th><code>:as</code> value</th>
13
- ## <th>type returned</th>
14
- ## <th>default</th>
15
- ## <th>notes</th>
16
- ## </tr>
17
- ## </tbody>
18
- ## <tbody>
19
- ## <tr>
20
- ## <td>:ipv4_address</td>
21
- ## <td>String</td>
22
- ## <td><code>nil</code></td>
23
- ## <td>
24
- ## An IPv4 address in 4-octet dot-decimal notation,
25
- ## <br />
26
- ## with no CIDR or subnet suffix (e.g. <code>'192.168.0.1'</code>).
27
- ## </td>
28
- ## </tr>
29
- ## <tr>
30
- ## <td>:ipv6_address</td>
31
- ## <td>String</td>
32
- ## <td><code>nil</code></td>
33
- ## <td>An IPv6 address, in RFC5952 format.</td>
34
- ## </tr>
35
- ## <tr>
36
- ## <td>:network_port / :port</td>
37
- ## <td>Integer</td>
38
- ## <td><code>nil</code></td>
39
- ## <td></td>
40
- ## </tr>
41
- ## <tr>
42
- ## <td>:email_address</td>
43
- ## <td>String</td>
44
- ## <td><code>nil</code></td>
45
- ## <td>
46
- ## A "simple" email address, containing only a username and a domain.
47
- ## <br />
48
- ## Note this does not guarantee RFC5322-conformity.
49
- ## </td>
50
- ## </tr>
51
- ## </tbody>
52
- ## </table>
53
- ##
7
+ # Defines types for internet-related values, adding the following:
8
+ #
9
+ # <table>
10
+ # <tbody>
11
+ # <tr>
12
+ # <th><code>:as</code> value</th>
13
+ # <th>type returned</th>
14
+ # <th>default</th>
15
+ # <th>notes</th>
16
+ # </tr>
17
+ # </tbody>
18
+ # <tbody>
19
+ # <tr>
20
+ # <td>:ipv4_address</td>
21
+ # <td>String</td>
22
+ # <td><code>nil</code></td>
23
+ # <td>
24
+ # An IPv4 address in 4-octet dot-decimal notation,
25
+ # <br />
26
+ # with no CIDR or subnet suffix (e.g. <code>'192.168.0.1'</code>).
27
+ # </td>
28
+ # </tr>
29
+ # <tr>
30
+ # <td>:ipv6_address</td>
31
+ # <td>String</td>
32
+ # <td><code>nil</code></td>
33
+ # <td>An IPv6 address, in RFC5952 format.</td>
34
+ # </tr>
35
+ # <tr>
36
+ # <td>:network_port / :port</td>
37
+ # <td>Integer</td>
38
+ # <td><code>nil</code></td>
39
+ # <td></td>
40
+ # </tr>
41
+ # <tr>
42
+ # <td>:email_address</td>
43
+ # <td>String</td>
44
+ # <td><code>nil</code></td>
45
+ # <td>
46
+ # A "simple" email address, containing only a username and a domain.
47
+ # <br />
48
+ # Note this does not guarantee RFC5322-conformity.
49
+ # </td>
50
+ # </tr>
51
+ # </tbody>
52
+ # </table>
53
+ #
54
54
  module InternetTypes
55
55
  EnvParser.define_type(:ipv4_address, if_unset: nil) do |value|
56
56
  begin
@@ -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 ## rubocop:disable Metrics/LineLength
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 Layout/LineLength
94
94
  raise(EnvParser::ValueNotConvertibleError, 'not an email') unless value.match?(simple_email)
95
95
 
96
96
  value
@@ -1,3 +1,3 @@
1
- ## Load all files listed in "/lib/env_parser/types".
2
- ##
1
+ # Load all files listed in "/lib/env_parser/types".
2
+ #
3
3
  Dir.glob(File.join(__dir__, 'types', '*.rb')).each { |filename| require_relative filename }
@@ -1,3 +1,3 @@
1
1
  class EnvParser
2
- VERSION = '1.3.0'.freeze
2
+ VERSION = '1.3.2'.freeze
3
3
  end
data/lib/env_parser.rb CHANGED
@@ -3,44 +3,44 @@ require 'env_parser/version'
3
3
  require 'active_support/all'
4
4
  require 'psych'
5
5
 
6
- ## The EnvParser class simplifies parsing of environment variables as different data types.
7
- ##
6
+ # The EnvParser class simplifies parsing of environment variables as different data types.
7
+ #
8
8
  class EnvParser
9
- ## The default filename to use for {.autoregister} requests.
10
- ##
9
+ # The default filename to use for {.autoregister} requests.
10
+ #
11
11
  AUTOREGISTER_FILE = '.env_parser.yml'.freeze
12
12
 
13
13
  class << self
14
- ## Defines a new type for use as the "as" option on a subsequent {.parse} or {.register} call.
15
- ##
16
- ## @param name [Symbol]
17
- ## The name to assign to the type.
18
- ##
19
- ## @option options [Array<Symbol>] aliases
20
- ## An array of additional names you'd like to see refer to this same type.
21
- ##
22
- ## @option options if_unset (nil)
23
- ## Specifies a "sensible default" to return for this type if the value being parsed (via
24
- ## {.parse} or {.register}) is either unset (`nil`) or blank (`''`). Note this may be
25
- ## overridden by the user via the {.parse}/{.register} "if_unset" option.
26
- ##
27
- ## @yield [value]
28
- ## A block to act as the parser for the this type. If no block is given, an ArgumentError is
29
- ## raised.
30
- ##
31
- ## When the type defined is used via a {.parse}/{.register} call, this block is invoked with
32
- ## the value to be parsed. Said value is guaranteed to be a non-empty String (the "if_unset"
33
- ## check will have already run), but no other assurances as to content are given. The block
34
- ## should return the final output of parsing the given String value as the type being defined.
35
- ##
36
- ## If the value given cannot be sensibly parsed into the type defined, the block should raise
37
- ## an {EnvParser::ValueNotConvertibleError}.
38
- ##
39
- ## @return [nil]
40
- ## This generates no usable value.
41
- ##
42
- ## @raise [ArgumentError, EnvParser::TypeAlreadyDefinedError]
43
- ##
14
+ # Defines a new type for use as the "as" option on a subsequent {.parse} or {.register} call.
15
+ #
16
+ # @param name [Symbol]
17
+ # The name to assign to the type.
18
+ #
19
+ # @option options [Array<Symbol>] aliases
20
+ # An array of additional names you'd like to see refer to this same type.
21
+ #
22
+ # @option options if_unset (nil)
23
+ # Specifies a "sensible default" to return for this type if the value being parsed (via
24
+ # {.parse} or {.register}) is either unset (`nil`) or blank (`''`). Note this may be
25
+ # overridden by the user via the {.parse}/{.register} "if_unset" option.
26
+ #
27
+ # @yield [value]
28
+ # A block to act as the parser for the this type. If no block is given, an ArgumentError is
29
+ # raised.
30
+ #
31
+ # When the type defined is used via a {.parse}/{.register} call, this block is invoked with
32
+ # the value to be parsed. Said value is guaranteed to be a non-empty String (the "if_unset"
33
+ # check will have already run), but no other assurances as to content are given. The block
34
+ # should return the final output of parsing the given String value as the type being defined.
35
+ #
36
+ # If the value given cannot be sensibly parsed into the type defined, the block should raise
37
+ # an {EnvParser::ValueNotConvertibleError}.
38
+ #
39
+ # @return [nil]
40
+ # This generates no usable value.
41
+ #
42
+ # @raise [ArgumentError, EnvParser::TypeAlreadyDefinedError]
43
+ #
44
44
  def define_type(name, options = {}, &parser)
45
45
  raise(ArgumentError, 'no parsing block given') unless block_given?
46
46
 
@@ -57,58 +57,58 @@ class EnvParser
57
57
  nil
58
58
  end
59
59
 
60
- ## Interprets the given value as the specified type.
61
- ##
62
- ## @param value [String, Symbol]
63
- ## The value to parse/interpret. If a String is given, the value will be used as-is. If a
64
- ## Symbol is given, the ENV value for the matching string key will be used.
65
- ##
66
- ## @option options [Symbol] as
67
- ## The expected return type. A best-effort attempt is made to convert the source String to the
68
- ## requested type.
69
- ##
70
- ## If no "as" option is given, an ArgumentError is raised. If the "as" option given is unknown
71
- ## (the given type has not been previously defined via {.define_type}), an
72
- ## {EnvParser::UnknownTypeError} is raised.
73
- ##
74
- ## @option options if_unset
75
- ## Specifies the default value to return if the given "value" is either unset (`nil`) or blank
76
- ## (`''`). Any "if_unset" value given will be returned as-is, with no type conversion or other
77
- ## change having been made. If unspecified, the "default" value for `nil`/`''` input will
78
- ## depend on the "as" type.
79
- ##
80
- ## @option options [Array, Range] from_set
81
- ## Gives a limited set of allowed values (after type conversion). If, after parsing, the final
82
- ## value is not included in the "from_set" list/range, an {EnvParser::ValueNotAllowedError} is
83
- ## raised.
84
- ##
85
- ## Note that if the "if_unset" option is given and the value to parse is `nil`/`''`, the
86
- ## "if_unset" value will be returned, even if it is not part of the "from_set" list/range.
87
- ##
88
- ## Also note that, due to the nature of the lookup, the "from_set" option is only available
89
- ## for scalar values (i.e. not arrays, hashes, or other enumerables). An attempt to use the
90
- ## "from_set" option with a non-scalar value will raise an ArgumentError.
91
- ##
92
- ## @option options [Proc] validated_by
93
- ## If given, the "validated_by" Proc is called with the parsed value (after type conversion)
94
- ## as its sole argument. This allows for user-defined validation of the parsed value beyond
95
- ## what can be enforced by use of the "from_set" option alone. If the Proc's return value is
96
- ## `#blank?`, an {EnvParser::ValueNotAllowedError} is raised. To accomodate your syntax of
97
- ## choice, this validation Proc may be given as a block instead.
98
- ##
99
- ## Note that this option is intended to provide an inspection mechanism only -- no mutation
100
- ## of the parsed value should occur within the given Proc. To that end, the argument passed is
101
- ## a *frozen* duplicate of the parsed value.
102
- ##
103
- ## @yield [value]
104
- ## A block (if given) is treated exactly as the "validated_by" Proc would.
105
- ##
106
- ## Although there is no compelling reason to provide both a "validated_by" Proc *and* a
107
- ## validation block, there is no technical limitation preventing this. **If both are given,
108
- ## both validation checks must pass.**
109
- ##
110
- ## @raise [ArgumentError, EnvParser::UnknownTypeError, EnvParser::ValueNotAllowedError]
111
- ##
60
+ # Interprets the given value as the specified type.
61
+ #
62
+ # @param value [String, Symbol]
63
+ # The value to parse/interpret. If a String is given, the value will be used as-is. If a
64
+ # Symbol is given, the ENV value for the matching string key will be used.
65
+ #
66
+ # @option options [Symbol] as
67
+ # The expected return type. A best-effort attempt is made to convert the source String to the
68
+ # requested type.
69
+ #
70
+ # If no "as" option is given, an ArgumentError is raised. If the "as" option given is unknown
71
+ # (the given type has not been previously defined via {.define_type}), an
72
+ # {EnvParser::UnknownTypeError} is raised.
73
+ #
74
+ # @option options if_unset
75
+ # Specifies the default value to return if the given "value" is either unset (`nil`) or blank
76
+ # (`''`). Any "if_unset" value given will be returned as-is, with no type conversion or other
77
+ # change having been made. If unspecified, the "default" value for `nil`/`''` input will
78
+ # depend on the "as" type.
79
+ #
80
+ # @option options [Array, Range] from_set
81
+ # Gives a limited set of allowed values (after type conversion). If, after parsing, the final
82
+ # value is not included in the "from_set" list/range, an {EnvParser::ValueNotAllowedError} is
83
+ # raised.
84
+ #
85
+ # Note that if the "if_unset" option is given and the value to parse is `nil`/`''`, the
86
+ # "if_unset" value will be returned, even if it is not part of the "from_set" list/range.
87
+ #
88
+ # Also note that, due to the nature of the lookup, the "from_set" option is only available
89
+ # for scalar values (i.e. not arrays, hashes, or other enumerables). An attempt to use the
90
+ # "from_set" option with a non-scalar value will raise an ArgumentError.
91
+ #
92
+ # @option options [Proc] validated_by
93
+ # If given, the "validated_by" Proc is called with the parsed value (after type conversion)
94
+ # as its sole argument. This allows for user-defined validation of the parsed value beyond
95
+ # what can be enforced by use of the "from_set" option alone. If the Proc's return value is
96
+ # `#blank?`, an {EnvParser::ValueNotAllowedError} is raised. To accomodate your syntax of
97
+ # choice, this validation Proc may be given as a block instead.
98
+ #
99
+ # Note that this option is intended to provide an inspection mechanism only -- no mutation
100
+ # of the parsed value should occur within the given Proc. To that end, the argument passed is
101
+ # a *frozen* duplicate of the parsed value.
102
+ #
103
+ # @yield [value]
104
+ # A block (if given) is treated exactly as the "validated_by" Proc would.
105
+ #
106
+ # Although there is no compelling reason to provide both a "validated_by" Proc *and* a
107
+ # validation block, there is no technical limitation preventing this. **If both are given,
108
+ # both validation checks must pass.**
109
+ #
110
+ # @raise [ArgumentError, EnvParser::UnknownTypeError, EnvParser::ValueNotAllowedError]
111
+ #
112
112
  def parse(value, options = {}, &validation_block)
113
113
  value = ENV[value.to_s] if value.is_a? Symbol
114
114
  value = value.to_s
@@ -126,57 +126,57 @@ class EnvParser
126
126
  value
127
127
  end
128
128
 
129
- ## Parses the referenced value and creates a matching constant in the requested context.
130
- ##
131
- ## Multiple calls to {.register} may be shortcutted by passing in a Hash whose keys are the
132
- ## variable names and whose values are the options set for each variable's {.register} call.
133
- ##
134
- ## <pre>
135
- ## ## Example shortcut usage:
136
- ##
137
- ## EnvParser.register :A, from: one_hash, as: :integer
138
- ## EnvParser.register :B, from: another_hash, as: :string, if_unset: 'none'
139
- ##
140
- ## ## ... is equivalent to ...
141
- ##
142
- ## EnvParser.register(
143
- ## A: { from: one_hash, as: :integer }
144
- ## B: { from: another_hash, as: :string, if_unset: 'none' }
145
- ## )
146
- ## </pre>
147
- ##
148
- ## @param name
149
- ## The name of the value to parse/interpret from the "from" Hash. If the "from" value is
150
- ## `ENV`, you may give a Symbol and the corresponding String key will be used instead.
151
- ##
152
- ## @option options [Hash] from (ENV)
153
- ## The source Hash from which to pull the value referenced by the "name" key.
154
- ##
155
- ## @option options [Module, Class] within (Kernel)
156
- ## The module or class in which the constant should be created. Creates global constants by
157
- ## default.
158
- ##
159
- ## @option options [Symbol] as
160
- ## See {.parse}.
161
- ##
162
- ## @option options if_unset
163
- ## See {.parse}.
164
- ##
165
- ## @option options [Array, Range] from_set
166
- ## See {.parse}.
167
- ##
168
- ## @option options [Proc] validated_by
169
- ## See {.parse}.
170
- ##
171
- ## @yield [value]
172
- ## A block (if given) is treated exactly as in {.parse}. Note, however, that a single block
173
- ## cannot be used to register multiple constants simultaneously -- each value needing
174
- ## validation must give its own "validated_by" Proc.
175
- ##
176
- ## @raise [ArgumentError]
177
- ##
129
+ # Parses the referenced value and creates a matching constant in the requested context.
130
+ #
131
+ # Multiple calls to {.register} may be shortcutted by passing in a Hash whose keys are the
132
+ # variable names and whose values are the options set for each variable's {.register} call.
133
+ #
134
+ # <pre>
135
+ # ## Example shortcut usage:
136
+ #
137
+ # EnvParser.register :A, from: one_hash, as: :integer
138
+ # EnvParser.register :B, from: another_hash, as: :string, if_unset: 'none'
139
+ #
140
+ # ## ... is equivalent to ...
141
+ #
142
+ # EnvParser.register(
143
+ # A: { from: one_hash, as: :integer }
144
+ # B: { from: another_hash, as: :string, if_unset: 'none' }
145
+ # )
146
+ # </pre>
147
+ #
148
+ # @param name
149
+ # The name of the value to parse/interpret from the "from" Hash. If the "from" value is
150
+ # `ENV`, you may give a Symbol and the corresponding String key will be used instead.
151
+ #
152
+ # @option options [Hash] from (ENV)
153
+ # The source Hash from which to pull the value referenced by the "name" key.
154
+ #
155
+ # @option options [Module, Class] within (Kernel)
156
+ # The module or class in which the constant should be created. Creates global constants by
157
+ # default.
158
+ #
159
+ # @option options [Symbol] as
160
+ # See {.parse}.
161
+ #
162
+ # @option options if_unset
163
+ # See {.parse}.
164
+ #
165
+ # @option options [Array, Range] from_set
166
+ # See {.parse}.
167
+ #
168
+ # @option options [Proc] validated_by
169
+ # See {.parse}.
170
+ #
171
+ # @yield [value]
172
+ # A block (if given) is treated exactly as in {.parse}. Note, however, that a single block
173
+ # cannot be used to register multiple constants simultaneously -- each value needing
174
+ # validation must give its own "validated_by" Proc.
175
+ #
176
+ # @raise [ArgumentError]
177
+ #
178
178
  def register(name, options = {}, &validation_block)
179
- ## Allow for registering multiple variables simultaneously via a single call.
179
+ # Allow for registering multiple variables simultaneously via a single call.
180
180
  if name.is_a? Hash
181
181
  raise(ArgumentError, 'cannot register multiple values with one block') if block_given?
182
182
  return register_all(name)
@@ -185,20 +185,17 @@ class EnvParser
185
185
  from = options.fetch(:from, ENV)
186
186
  within = options.fetch(:within, Kernel)
187
187
 
188
- ## ENV *seems* like a Hash and it does *some* Hash-y things, but it is NOT a Hash and that can
189
- ## bite you in some cases. Making sure we're working with a straight-up Hash saves a lot of
190
- ## sanity checks later on. This is also a good place to make sure we're working with a String
191
- ## key.
188
+ # ENV *seems* like a Hash and it does *some* Hash-y things, but it is NOT a Hash and that can
189
+ # bite you in some cases. Making sure we're working with a straight-up Hash saves a lot of
190
+ # sanity checks later on. This is also a good place to make sure we're working with a String
191
+ # key.
192
192
  if from == ENV
193
193
  from = from.to_h
194
194
  name = name.to_s
195
195
  end
196
196
 
197
197
  raise ArgumentError, "invalid `from` parameter: #{from.class}" unless from.is_a? Hash
198
-
199
- unless within.is_a?(Module) || within.is_a?(Class)
200
- raise ArgumentError, "invalid `within` parameter: #{within.inspect}"
201
- end
198
+ raise ArgumentError, "invalid `within` parameter: #{within.inspect}" unless within.is_a?(Module) || within.is_a?(Class)
202
199
 
203
200
  value = from[name]
204
201
  value = parse(value, options, &validation_block)
@@ -207,15 +204,15 @@ class EnvParser
207
204
  value
208
205
  end
209
206
 
210
- ## Creates ENV bindings for {.parse} and {.register} proxy methods.
211
- ##
212
- ## The sole difference between these proxy methods and their EnvParser counterparts is that
213
- ## ENV.parse will interpret any value given as an ENV key (as a String), not the given value
214
- ## itself. i.e. ENV.parse('XYZ', ...) is equivalent to EnvParser.parse(ENV['XYZ'], ...)
215
- ##
216
- ## @return [ENV]
217
- ## This generates no usable value.
218
- ##
207
+ # Creates ENV bindings for {.parse} and {.register} proxy methods.
208
+ #
209
+ # The sole difference between these proxy methods and their EnvParser counterparts is that
210
+ # ENV.parse will interpret any value given as an ENV key (as a String), not the given value
211
+ # itself. i.e. ENV.parse('XYZ', ...) is equivalent to EnvParser.parse(ENV['XYZ'], ...)
212
+ #
213
+ # @return [ENV]
214
+ # This generates no usable value.
215
+ #
219
216
  def add_env_bindings
220
217
  ENV.instance_eval do
221
218
  def parse(name, options = {}, &validation_block)
@@ -230,21 +227,21 @@ class EnvParser
230
227
  ENV
231
228
  end
232
229
 
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
- ##
230
+ # Reads an "autoregister" file and registers the ENV constants defined therein.
231
+ #
232
+ # The "autoregister" file is read, parsed as YAML, sanitized for use as a parameter to
233
+ # {.register_all}, and then passed along for processing. The return value from that
234
+ # {.register_all} call is passed through.
235
+ #
236
+ # @param filename [String]
237
+ # A path for the autoregister file to parse and process. Defaults to
238
+ # {EnvParser::AUTOREGISTER_FILE} if unset.
239
+ #
240
+ # @return [Hash]
241
+ # The return value from the {.register_all} call that handles the actual registration.
242
+ #
243
+ # @raise [EnvParser::AutoregisterFileNotFound, EnvParser::UnparseableAutoregisterSpec]
244
+ #
248
245
  def autoregister(filename = nil)
249
246
  filename ||= AUTOREGISTER_FILE
250
247
  autoregister_spec = Psych.load_file(filename)
@@ -260,77 +257,69 @@ class EnvParser
260
257
 
261
258
  register_all autoregister_spec
262
259
 
263
- ## Psych raises an Errno::ENOENT on file-not-found.
264
- ##
260
+ # Psych raises an Errno::ENOENT on file-not-found.
261
+ #
265
262
  rescue Errno::ENOENT
266
263
  raise EnvParser::AutoregisterFileNotFound, %(file not found: "#{filename}")
267
264
 
268
- ## Psych raises a Psych::SyntaxError on unparseable YAML.
269
- ##
265
+ # Psych raises a Psych::SyntaxError on unparseable YAML.
266
+ #
270
267
  rescue Psych::SyntaxError => e
271
268
  raise EnvParser::UnparseableAutoregisterSpec, "malformed YAML in spec file: #{e.message}"
272
269
  end
273
270
 
274
271
  private
275
272
 
276
- ## Class instance variable for storing known type data.
277
- ##
273
+ # Class instance variable for storing known type data.
274
+ #
278
275
  def known_types
279
276
  @known_types ||= {}
280
277
  end
281
278
 
282
- ## Verifies that the given "value" is included in the "set".
283
- ##
284
- ## @param value
285
- ## @param set [Array, Range]
286
- ##
287
- ## @return [nil]
288
- ## This generates no usable value.
289
- ##
290
- ## @raise [ArgumentError, EnvParser::ValueNotAllowedError]
291
- ##
279
+ # Verifies that the given "value" is included in the "set".
280
+ #
281
+ # @param value
282
+ # @param set [Array, Range]
283
+ #
284
+ # @return [nil]
285
+ # This generates no usable value.
286
+ #
287
+ # @raise [ArgumentError, EnvParser::ValueNotAllowedError]
288
+ #
292
289
  def check_for_set_inclusion(value, set: nil)
293
- if value.respond_to?(:each)
294
- raise ArgumentError, "`from_set` option is not compatible with #{value.class} values"
295
- end
296
-
297
- unless set.is_a?(Array) || set.is_a?(Range)
298
- raise ArgumentError, "invalid `from_set` parameter type: #{set.class}"
299
- end
290
+ raise ArgumentError, "`from_set` option is not compatible with #{value.class} values" if value.respond_to?(:each)
291
+ raise ArgumentError, "invalid `from_set` parameter type: #{set.class}" unless set.is_a?(Array) || set.is_a?(Range)
300
292
 
301
293
  raise(ValueNotAllowedError, 'parsed value not in allowed set') unless set.include?(value)
302
-
303
- nil
304
294
  end
305
295
 
306
- ## Verifies that the given "value" passes both the "proc" and "block" validations.
307
- ##
308
- ## @param value
309
- ## @param proc [Proc, nil]
310
- ## @param block [Proc, nil]
311
- ##
312
- ## @return [nil]
313
- ## This generates no usable value.
314
- ##
315
- ## @raise [EnvParser::ValueNotAllowedError]
316
- ##
296
+ # Verifies that the given "value" passes both the "proc" and "block" validations.
297
+ #
298
+ # @param value
299
+ # @param proc [Proc, nil]
300
+ # @param block [Proc, nil]
301
+ #
302
+ # @return [nil]
303
+ # This generates no usable value.
304
+ #
305
+ # @raise [EnvParser::ValueNotAllowedError]
306
+ #
317
307
  def check_user_defined_validations(value, proc: nil, block: nil)
318
308
  immutable_value = value.dup.freeze
319
309
  all_tests_passed = [proc, block].compact.all? { |i| i.call(immutable_value) }
320
- raise(ValueNotAllowedError, 'parsed value failed user validation') unless all_tests_passed
321
310
 
322
- nil
311
+ raise(ValueNotAllowedError, 'parsed value failed user validation') unless all_tests_passed
323
312
  end
324
313
 
325
- ## Receives a list of {.register} calls to make, as a Hash keyed with variable names and the
326
- ## values being each {.register} call's option set.
327
- ##
328
- ## @param list [Hash]
329
- ##
330
- ## @return [Hash]
331
- ##
332
- ## @raise [ArgumentError]
333
- ##
314
+ # Receives a list of {.register} calls to make, as a Hash keyed with variable names and the
315
+ # values being each {.register} call's option set.
316
+ #
317
+ # @param list [Hash]
318
+ #
319
+ # @return [Hash]
320
+ #
321
+ # @raise [ArgumentError]
322
+ #
334
323
  def register_all(list)
335
324
  raise(ArgumentError, "invalid 'list' parameter type: #{list.class}") unless list.is_a? Hash
336
325
 
@@ -341,6 +330,6 @@ class EnvParser
341
330
  end
342
331
  end
343
332
 
344
- ## Load predefined types.
345
- ##
333
+ # Load predefined types.
334
+ #
346
335
  require 'env_parser/types'