env_parser 0.5.0 → 0.6.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/Gemfile.lock +1 -1
- data/README.md +24 -10
- data/docs/EnvParser/ValueNotAllowed.html +1 -1
- data/docs/EnvParser.html +115 -5
- data/docs/_index.html +1 -1
- data/docs/file.README.html +31 -21
- data/docs/index.html +31 -21
- data/docs/method_list.html +9 -1
- data/docs/top-level-namespace.html +1 -1
- data/lib/env_parser/version.rb +1 -1
- data/lib/env_parser.rb +30 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1074b534666060176bf44c5b5d96c91ebf87f13e
|
4
|
+
data.tar.gz: a4bbaf7ec568cf6fb1a3c8adb75b0ba36e0abfcc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0778ff18e226b11676ac3ef7b2c0d4ec939ce6ca5a272e5d2ddbfc29827ff29bb1fe96d5028190fa4deec42858a1235de02ca783fa04902c4eca140e62d0ff12'
|
7
|
+
data.tar.gz: 4e11313dca4ee78652b0dbe34af9d47b8bf7a61aa5ed7ebc7d119d8ada62a5b2d4d977caf194e6f88f0d4591e2fc902eaed9bd6ea665faa12fcfc07347cb69ee
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -24,9 +24,9 @@ Or install it yourself as:
|
|
24
24
|
$ gem install env_parser
|
25
25
|
|
26
26
|
|
27
|
-
##
|
27
|
+
## Using EnvParser
|
28
28
|
|
29
|
-
#### Basic
|
29
|
+
#### Basic Usage
|
30
30
|
|
31
31
|
```ruby
|
32
32
|
## Returns ENV['TIMEOUT_MS'] as an Integer.
|
@@ -93,7 +93,7 @@ The named `:as` parameter is required. Allowed values are:
|
|
93
93
|
Note JSON is parsed using *quirks-mode* (meaning 'true', '25', and 'null' are all considered valid, parseable JSON).
|
94
94
|
|
95
95
|
|
96
|
-
#### Setting
|
96
|
+
#### Setting Non-Trivial Defaults
|
97
97
|
|
98
98
|
```ruby
|
99
99
|
## If the ENV variable you want is unset (nil) or blank (''),
|
@@ -110,7 +110,7 @@ EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: 'Whoops!' ## => '
|
|
110
110
|
```
|
111
111
|
|
112
112
|
|
113
|
-
####
|
113
|
+
#### Validating Parsed ENV Values
|
114
114
|
|
115
115
|
```ruby
|
116
116
|
## Sometimes setting the type alone is a bit too open-ended.
|
@@ -124,7 +124,8 @@ EnvParser.parse :SOME_CUSTOM_NETWORK_PORT, as: :integer, from_set: (1..65535), i
|
|
124
124
|
EnvParser.parse :NEGATIVE_NUMBER, as: :integer, from_set: (1..5) ## => raises EnvParser::ValueNotAllowed
|
125
125
|
```
|
126
126
|
|
127
|
-
|
127
|
+
|
128
|
+
#### Setting Constants From ENV Values
|
128
129
|
|
129
130
|
```ruby
|
130
131
|
## Global constants...
|
@@ -139,17 +140,14 @@ ENV['ULTIMATE_LINK'] ## => 'https://youtu.be/L_jWHffIx5E' (Set elsewhere, like a
|
|
139
140
|
EnvParser.register :ULTIMATE_LINK, as: :string, within: URI
|
140
141
|
URI::ULTIMATE_LINK ## => 'https://youtu.be/L_jWHffIx5E' (You know you want to check it out!)
|
141
142
|
ULTIMATE_LINK ## => raises NameError (the un-namespaced constant is only in scope within the URI module)
|
142
|
-
```
|
143
143
|
|
144
|
-
#### Quickly registering multiple ENV-derived constants:
|
145
144
|
|
146
|
-
```ruby
|
147
145
|
## You can also set multiple constants in one call, which is considerably cleaner to read:
|
148
146
|
##
|
149
147
|
EnvParser.register :A, as: :string
|
150
148
|
EnvParser.register :B, as: :integer, if_unset: 25
|
151
149
|
EnvParser.register :C, as: :boolean, if_unset: true
|
152
|
-
|
150
|
+
|
153
151
|
## ... is equivalent to ...
|
154
152
|
##
|
155
153
|
EnvParser.register(
|
@@ -159,6 +157,23 @@ EnvParser.register(
|
|
159
157
|
)
|
160
158
|
```
|
161
159
|
|
160
|
+
|
161
|
+
#### Binding EnvParser Proxies Onto ENV
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
## To allow for even cleaner usage, you can bind proxy "parse" and "register" methods onto ENV.
|
165
|
+
## This is done cleanly and without polluting the method space for any other objects.
|
166
|
+
##
|
167
|
+
EnvParser.add_env_bindings ## Sets up the proxy methods.
|
168
|
+
|
169
|
+
## Now you can call "parse" and "register" on ENV itself. Note that ENV's proxy "parse" method will
|
170
|
+
## attempt to interpret any value given as an ENV key (converting to a String, if necessary).
|
171
|
+
##
|
172
|
+
ENV['SHORT_PI'] ## => '3.1415926'
|
173
|
+
ENV.parse :SHORT_PI, as: :float ## => 3.1415926
|
174
|
+
ENV.register :SHORT_PI, as: :float ## Your constant is set, my man!
|
175
|
+
```
|
176
|
+
|
162
177
|
---
|
163
178
|
|
164
179
|
[Consult the repo docs](http://nestor-custodio.github.io/env_parser) for the full EnvParser documentation.
|
@@ -167,7 +182,6 @@ EnvParser.register(
|
|
167
182
|
## Feature Roadmap / Future Development
|
168
183
|
|
169
184
|
Additional features/options coming in the future:
|
170
|
-
- A means to **optionally** bind `#parse`, `#regiter`, and `#register_all` methods onto `ENV`. Because `ENV.parse ...` reads better than `EnvParser.parse ...`.
|
171
185
|
- A `validator` option that lets you pass in a validator lambda/block for things more complex than what a simple `from_set` can enforce.
|
172
186
|
- A means to register validation blocks as new "as" types. This will allow for custom "as" types like `:url`, `:email`, etc.
|
173
187
|
- ... ?
|
@@ -126,7 +126,7 @@ option.</p>
|
|
126
126
|
</div>
|
127
127
|
|
128
128
|
<div id="footer">
|
129
|
-
Generated on Sun Dec 3
|
129
|
+
Generated on Sun Dec 3 16:33:44 2017 by
|
130
130
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
131
131
|
0.9.11 (ruby-2.4.2).
|
132
132
|
</div>
|
data/docs/EnvParser.html
CHANGED
@@ -130,7 +130,7 @@ different data types.</p>
|
|
130
130
|
<dt id="VERSION-constant" class="">VERSION =
|
131
131
|
|
132
132
|
</dt>
|
133
|
-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>0.
|
133
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>0.6.0</span><span class='tstring_end'>'</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
|
134
134
|
|
135
135
|
</dl>
|
136
136
|
|
@@ -151,6 +151,31 @@ different data types.</p>
|
|
151
151
|
<li class="public ">
|
152
152
|
<span class="summary_signature">
|
153
153
|
|
154
|
+
<a href="#add_env_bindings-class_method" title="add_env_bindings (class method)">.<strong>add_env_bindings</strong> ⇒ ENV </a>
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
</span>
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
<span class="summary_desc"><div class='inline'>
|
169
|
+
<p>Creates ENV bindings for EnvParser.parse and EnvParser.register proxy
|
170
|
+
methods.</p>
|
171
|
+
</div></span>
|
172
|
+
|
173
|
+
</li>
|
174
|
+
|
175
|
+
|
176
|
+
<li class="public ">
|
177
|
+
<span class="summary_signature">
|
178
|
+
|
154
179
|
<a href="#parse-class_method" title="parse (class method)">.<strong>parse</strong>(value, options = {}) ⇒ Object </a>
|
155
180
|
|
156
181
|
|
@@ -207,7 +232,92 @@ requested context.</p>
|
|
207
232
|
|
208
233
|
|
209
234
|
<div class="method_details first">
|
210
|
-
<h3 class="signature first" id="
|
235
|
+
<h3 class="signature first" id="add_env_bindings-class_method">
|
236
|
+
|
237
|
+
.<strong>add_env_bindings</strong> ⇒ <tt>ENV</tt>
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
</h3><div class="docstring">
|
244
|
+
<div class="discussion">
|
245
|
+
|
246
|
+
<p>Creates ENV bindings for EnvParser.parse and EnvParser.register proxy
|
247
|
+
methods.</p>
|
248
|
+
|
249
|
+
<p>The sole difference between these proxy methods and their EnvParser
|
250
|
+
counterparts is that ENV.parse will interpret any value given as an ENV key
|
251
|
+
(as a String), not the given value itself. i.e. ENV.parse('XYZ', …)
|
252
|
+
is equivalent to <a href="'XYZ'">EnvParser.parse(ENV</a>, …)</p>
|
253
|
+
|
254
|
+
|
255
|
+
</div>
|
256
|
+
</div>
|
257
|
+
<div class="tags">
|
258
|
+
|
259
|
+
<p class="tag_title">Returns:</p>
|
260
|
+
<ul class="return">
|
261
|
+
|
262
|
+
<li>
|
263
|
+
|
264
|
+
|
265
|
+
<span class='type'>(<tt>ENV</tt>)</span>
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
—
|
270
|
+
<div class='inline'>
|
271
|
+
<p>This generates no usable value, so we may as well return ENV for chaining?</p>
|
272
|
+
</div>
|
273
|
+
|
274
|
+
</li>
|
275
|
+
|
276
|
+
</ul>
|
277
|
+
|
278
|
+
</div><table class="source_code">
|
279
|
+
<tr>
|
280
|
+
<td>
|
281
|
+
<pre class="lines">
|
282
|
+
|
283
|
+
|
284
|
+
160
|
285
|
+
161
|
286
|
+
162
|
287
|
+
163
|
288
|
+
164
|
289
|
+
165
|
290
|
+
166
|
291
|
+
167
|
292
|
+
168
|
293
|
+
169
|
294
|
+
170
|
295
|
+
171
|
296
|
+
172</pre>
|
297
|
+
</td>
|
298
|
+
<td>
|
299
|
+
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line 160</span>
|
300
|
+
|
301
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_add_env_bindings'>add_env_bindings</span>
|
302
|
+
<span class='const'>ENV</span><span class='period'>.</span><span class='id identifier rubyid_instance_eval'>instance_eval</span> <span class='kw'>do</span>
|
303
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
304
|
+
<span class='const'><span class='object_link'><a href="" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="#parse-class_method" title="EnvParser.parse (method)">parse</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
|
305
|
+
<span class='kw'>end</span>
|
306
|
+
|
307
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_register'>register</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
308
|
+
<span class='const'><span class='object_link'><a href="" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="#register-class_method" title="EnvParser.register (method)">register</a></span></span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
309
|
+
<span class='kw'>end</span>
|
310
|
+
<span class='kw'>end</span>
|
311
|
+
|
312
|
+
<span class='const'>ENV</span>
|
313
|
+
<span class='kw'>end</span></pre>
|
314
|
+
</td>
|
315
|
+
</tr>
|
316
|
+
</table>
|
317
|
+
</div>
|
318
|
+
|
319
|
+
<div class="method_details ">
|
320
|
+
<h3 class="signature " id="parse-class_method">
|
211
321
|
|
212
322
|
.<strong>parse</strong>(value, options = {}) ⇒ <tt>Object</tt>
|
213
323
|
|
@@ -450,8 +560,8 @@ the same keys as those in the “from” Hash and each value being the
|
|
450
560
|
## ... is equivalent to ...
|
451
561
|
|
452
562
|
EnvParser.register(
|
453
|
-
A: { from:
|
454
|
-
B: { from:
|
563
|
+
A: { from: one_hash, as: :integer }
|
564
|
+
B: { from: another_hash, as: :string, if_unset: 'none' }
|
455
565
|
)
|
456
566
|
</code></pre>
|
457
567
|
|
@@ -670,7 +780,7 @@ Kernel (making it a global constant).</p>
|
|
670
780
|
</div>
|
671
781
|
|
672
782
|
<div id="footer">
|
673
|
-
Generated on Sun Dec 3
|
783
|
+
Generated on Sun Dec 3 16:33:44 2017 by
|
674
784
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
675
785
|
0.9.11 (ruby-2.4.2).
|
676
786
|
</div>
|
data/docs/_index.html
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
</div>
|
113
113
|
|
114
114
|
<div id="footer">
|
115
|
-
Generated on Sun Dec 3
|
115
|
+
Generated on Sun Dec 3 16:33:43 2017 by
|
116
116
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
117
117
|
0.9.11 (ruby-2.4.2).
|
118
118
|
</div>
|
data/docs/file.README.html
CHANGED
@@ -91,9 +91,9 @@ simple.</p>
|
|
91
91
|
|
92
92
|
<pre class="code ruby"><code class="ruby">$ gem install env_parser</code></pre>
|
93
93
|
|
94
|
-
<h2 id="label-
|
94
|
+
<h2 id="label-Using+EnvParser">Using EnvParser</h2>
|
95
95
|
|
96
|
-
<h4 id="label-Basic+
|
96
|
+
<h4 id="label-Basic+Usage">Basic Usage</h4>
|
97
97
|
|
98
98
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Returns ENV['TIMEOUT_MS'] as an Integer.
|
99
99
|
</span><span class='comment'>## Yields 0 if ENV['TIMEOUT_MS'] is unset or nil.
|
@@ -155,7 +155,7 @@ simple.</p>
|
|
155
155
|
<p>Note JSON is parsed using <em>quirks-mode</em> (meaning 'true',
|
156
156
|
'25', and 'null' are all considered valid, parseable JSON).</p>
|
157
157
|
|
158
|
-
<h4 id="label-Setting+
|
158
|
+
<h4 id="label-Setting+Non-Trivial+Defaults">Setting Non-Trivial Defaults</h4>
|
159
159
|
|
160
160
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## If the ENV variable you want is unset (nil) or blank (''),
|
161
161
|
</span><span class='comment'>## the return value is a sensible default for the given "as" type
|
@@ -170,7 +170,7 @@ simple.</p>
|
|
170
170
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span></span> <span class='symbol'>:MISSING_ENV_VARIABLE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Whoops!</span><span class='tstring_end'>'</span></span> <span class='comment'>## => 'Whoops!'
|
171
171
|
</span></code></pre>
|
172
172
|
|
173
|
-
<h4 id="label-
|
173
|
+
<h4 id="label-Validating+Parsed+ENV+Values">Validating Parsed ENV Values</h4>
|
174
174
|
|
175
175
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Sometimes setting the type alone is a bit too open-ended.
|
176
176
|
</span><span class='comment'>## The "from_set" option lets you restrict the set of allowed values.
|
@@ -183,7 +183,7 @@ simple.</p>
|
|
183
183
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span></span> <span class='symbol'>:NEGATIVE_NUMBER</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>from_set:</span> <span class='lparen'>(</span><span class='int'>1</span><span class='op'>..</span><span class='int'>5</span><span class='rparen'>)</span> <span class='comment'>## => raises EnvParser::ValueNotAllowed
|
184
184
|
</span></code></pre>
|
185
185
|
|
186
|
-
<h4 id="label-
|
186
|
+
<h4 id="label-Setting+Constants+From+ENV+Values">Setting Constants From ENV Values</h4>
|
187
187
|
|
188
188
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Global constants...
|
189
189
|
</span><span class='comment'>##
|
@@ -197,17 +197,15 @@ simple.</p>
|
|
197
197
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:ULTIMATE_LINK</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='comma'>,</span> <span class='label'>within:</span> <span class='const'>URI</span>
|
198
198
|
<span class='const'>URI</span><span class='op'>::</span><span class='const'>ULTIMATE_LINK</span> <span class='comment'>## => 'https://youtu.be/L_jWHffIx5E' (You know you want to check it out!)
|
199
199
|
</span><span class='const'>ULTIMATE_LINK</span> <span class='comment'>## => raises NameError (the un-namespaced constant is only in scope within the URI module)
|
200
|
-
</span
|
201
|
-
|
202
|
-
<h4 id="label-Quickly+registering+multiple+ENV-derived+constants-3A">Quickly registering multiple ENV-derived constants:</h4>
|
200
|
+
</span>
|
203
201
|
|
204
|
-
<
|
202
|
+
<span class='comment'>## You can also set multiple constants in one call, which is considerably cleaner to read:
|
205
203
|
</span><span class='comment'>##
|
206
204
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span>
|
207
205
|
<span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:B</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='int'>25</span>
|
208
206
|
<span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:C</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:boolean</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='kw'>true</span>
|
209
|
-
|
210
|
-
|
207
|
+
|
208
|
+
<span class='comment'>## ... is equivalent to ...
|
211
209
|
</span><span class='comment'>##
|
212
210
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span><span class='lparen'>(</span>
|
213
211
|
<span class='label'>A:</span> <span class='lbrace'>{</span> <span class='label'>as:</span> <span class='symbol'>:string</span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
@@ -215,6 +213,21 @@ simple.</p>
|
|
215
213
|
<span class='label'>C:</span> <span class='lbrace'>{</span> <span class='label'>as:</span> <span class='symbol'>:boolean</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='kw'>true</span> <span class='rbrace'>}</span>
|
216
214
|
<span class='rparen'>)</span>
|
217
215
|
</code></pre>
|
216
|
+
|
217
|
+
<h4 id="label-Binding+EnvParser+Proxies+Onto+ENV">Binding EnvParser Proxies Onto ENV</h4>
|
218
|
+
|
219
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'>## To allow for even cleaner usage, you can bind proxy "parse" and "register" methods onto ENV.
|
220
|
+
</span><span class='comment'>## This is done cleanly and without polluting the method space for any other objects.
|
221
|
+
</span><span class='comment'>##
|
222
|
+
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_add_env_bindings'><span class='object_link'><a href="EnvParser.html#add_env_bindings-class_method" title="EnvParser.add_env_bindings (method)">add_env_bindings</a></span></span> <span class='comment'>## Sets up the proxy methods.
|
223
|
+
</span>
|
224
|
+
<span class='comment'>## Now you can call "parse" and "register" on ENV itself. Note that ENV's proxy "parse" method will
|
225
|
+
</span><span class='comment'>## attempt to interpret any value given as an ENV key (converting to a String, if necessary).
|
226
|
+
</span><span class='comment'>##
|
227
|
+
</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SHORT_PI</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='comment'>## => '3.1415926'
|
228
|
+
</span><span class='const'>ENV</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span> <span class='symbol'>:SHORT_PI</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:float</span> <span class='comment'>## => 3.1415926
|
229
|
+
</span><span class='const'>ENV</span><span class='period'>.</span><span class='id identifier rubyid_register'>register</span> <span class='symbol'>:SHORT_PI</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:float</span> <span class='comment'>## Your constant is set, my man!
|
230
|
+
</span></code></pre>
|
218
231
|
<hr>
|
219
232
|
|
220
233
|
<p><a href="http://nestor-custodio.github.io/env_parser">Consult the repo
|
@@ -222,15 +235,12 @@ docs</a> for the full EnvParser documentation.</p>
|
|
222
235
|
|
223
236
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
224
237
|
|
225
|
-
<p>Additional features/options coming in the future: - A
|
226
|
-
<
|
227
|
-
|
228
|
-
<code>
|
229
|
-
|
230
|
-
|
231
|
-
a simple <code>from_set</code> can enforce. - A means to register
|
232
|
-
validation blocks as new “as” types. This will allow for custom “as” types
|
233
|
-
like <code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
238
|
+
<p>Additional features/options coming in the future: - A
|
239
|
+
<code>validator</code> option that lets you pass in a validator
|
240
|
+
lambda/block for things more complex than what a simple
|
241
|
+
<code>from_set</code> can enforce. - A means to register validation blocks
|
242
|
+
as new “as” types. This will allow for custom “as” types like
|
243
|
+
<code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
234
244
|
|
235
245
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
236
246
|
|
@@ -261,7 +271,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
261
271
|
</div></div>
|
262
272
|
|
263
273
|
<div id="footer">
|
264
|
-
Generated on Sun Dec 3
|
274
|
+
Generated on Sun Dec 3 16:33:43 2017 by
|
265
275
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
266
276
|
0.9.11 (ruby-2.4.2).
|
267
277
|
</div>
|
data/docs/index.html
CHANGED
@@ -91,9 +91,9 @@ simple.</p>
|
|
91
91
|
|
92
92
|
<pre class="code ruby"><code class="ruby">$ gem install env_parser</code></pre>
|
93
93
|
|
94
|
-
<h2 id="label-
|
94
|
+
<h2 id="label-Using+EnvParser">Using EnvParser</h2>
|
95
95
|
|
96
|
-
<h4 id="label-Basic+
|
96
|
+
<h4 id="label-Basic+Usage">Basic Usage</h4>
|
97
97
|
|
98
98
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Returns ENV['TIMEOUT_MS'] as an Integer.
|
99
99
|
</span><span class='comment'>## Yields 0 if ENV['TIMEOUT_MS'] is unset or nil.
|
@@ -155,7 +155,7 @@ simple.</p>
|
|
155
155
|
<p>Note JSON is parsed using <em>quirks-mode</em> (meaning 'true',
|
156
156
|
'25', and 'null' are all considered valid, parseable JSON).</p>
|
157
157
|
|
158
|
-
<h4 id="label-Setting+
|
158
|
+
<h4 id="label-Setting+Non-Trivial+Defaults">Setting Non-Trivial Defaults</h4>
|
159
159
|
|
160
160
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## If the ENV variable you want is unset (nil) or blank (''),
|
161
161
|
</span><span class='comment'>## the return value is a sensible default for the given "as" type
|
@@ -170,7 +170,7 @@ simple.</p>
|
|
170
170
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span></span> <span class='symbol'>:MISSING_ENV_VARIABLE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Whoops!</span><span class='tstring_end'>'</span></span> <span class='comment'>## => 'Whoops!'
|
171
171
|
</span></code></pre>
|
172
172
|
|
173
|
-
<h4 id="label-
|
173
|
+
<h4 id="label-Validating+Parsed+ENV+Values">Validating Parsed ENV Values</h4>
|
174
174
|
|
175
175
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Sometimes setting the type alone is a bit too open-ended.
|
176
176
|
</span><span class='comment'>## The "from_set" option lets you restrict the set of allowed values.
|
@@ -183,7 +183,7 @@ simple.</p>
|
|
183
183
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_parse'><span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span></span> <span class='symbol'>:NEGATIVE_NUMBER</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>from_set:</span> <span class='lparen'>(</span><span class='int'>1</span><span class='op'>..</span><span class='int'>5</span><span class='rparen'>)</span> <span class='comment'>## => raises EnvParser::ValueNotAllowed
|
184
184
|
</span></code></pre>
|
185
185
|
|
186
|
-
<h4 id="label-
|
186
|
+
<h4 id="label-Setting+Constants+From+ENV+Values">Setting Constants From ENV Values</h4>
|
187
187
|
|
188
188
|
<pre class="code ruby"><code class="ruby"><span class='comment'>## Global constants...
|
189
189
|
</span><span class='comment'>##
|
@@ -197,17 +197,15 @@ simple.</p>
|
|
197
197
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:ULTIMATE_LINK</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='comma'>,</span> <span class='label'>within:</span> <span class='const'>URI</span>
|
198
198
|
<span class='const'>URI</span><span class='op'>::</span><span class='const'>ULTIMATE_LINK</span> <span class='comment'>## => 'https://youtu.be/L_jWHffIx5E' (You know you want to check it out!)
|
199
199
|
</span><span class='const'>ULTIMATE_LINK</span> <span class='comment'>## => raises NameError (the un-namespaced constant is only in scope within the URI module)
|
200
|
-
</span
|
201
|
-
|
202
|
-
<h4 id="label-Quickly+registering+multiple+ENV-derived+constants-3A">Quickly registering multiple ENV-derived constants:</h4>
|
200
|
+
</span>
|
203
201
|
|
204
|
-
<
|
202
|
+
<span class='comment'>## You can also set multiple constants in one call, which is considerably cleaner to read:
|
205
203
|
</span><span class='comment'>##
|
206
204
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span>
|
207
205
|
<span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:B</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='int'>25</span>
|
208
206
|
<span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span> <span class='symbol'>:C</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:boolean</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='kw'>true</span>
|
209
|
-
|
210
|
-
|
207
|
+
|
208
|
+
<span class='comment'>## ... is equivalent to ...
|
211
209
|
</span><span class='comment'>##
|
212
210
|
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_register'><span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span></span><span class='lparen'>(</span>
|
213
211
|
<span class='label'>A:</span> <span class='lbrace'>{</span> <span class='label'>as:</span> <span class='symbol'>:string</span> <span class='rbrace'>}</span><span class='comma'>,</span>
|
@@ -215,6 +213,21 @@ simple.</p>
|
|
215
213
|
<span class='label'>C:</span> <span class='lbrace'>{</span> <span class='label'>as:</span> <span class='symbol'>:boolean</span><span class='comma'>,</span> <span class='label'>if_unset:</span> <span class='kw'>true</span> <span class='rbrace'>}</span>
|
216
214
|
<span class='rparen'>)</span>
|
217
215
|
</code></pre>
|
216
|
+
|
217
|
+
<h4 id="label-Binding+EnvParser+Proxies+Onto+ENV">Binding EnvParser Proxies Onto ENV</h4>
|
218
|
+
|
219
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'>## To allow for even cleaner usage, you can bind proxy "parse" and "register" methods onto ENV.
|
220
|
+
</span><span class='comment'>## This is done cleanly and without polluting the method space for any other objects.
|
221
|
+
</span><span class='comment'>##
|
222
|
+
</span><span class='const'><span class='object_link'><a href="EnvParser.html" title="EnvParser (class)">EnvParser</a></span></span><span class='period'>.</span><span class='id identifier rubyid_add_env_bindings'><span class='object_link'><a href="EnvParser.html#add_env_bindings-class_method" title="EnvParser.add_env_bindings (method)">add_env_bindings</a></span></span> <span class='comment'>## Sets up the proxy methods.
|
223
|
+
</span>
|
224
|
+
<span class='comment'>## Now you can call "parse" and "register" on ENV itself. Note that ENV's proxy "parse" method will
|
225
|
+
</span><span class='comment'>## attempt to interpret any value given as an ENV key (converting to a String, if necessary).
|
226
|
+
</span><span class='comment'>##
|
227
|
+
</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SHORT_PI</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='comment'>## => '3.1415926'
|
228
|
+
</span><span class='const'>ENV</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span> <span class='symbol'>:SHORT_PI</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:float</span> <span class='comment'>## => 3.1415926
|
229
|
+
</span><span class='const'>ENV</span><span class='period'>.</span><span class='id identifier rubyid_register'>register</span> <span class='symbol'>:SHORT_PI</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:float</span> <span class='comment'>## Your constant is set, my man!
|
230
|
+
</span></code></pre>
|
218
231
|
<hr>
|
219
232
|
|
220
233
|
<p><a href="http://nestor-custodio.github.io/env_parser">Consult the repo
|
@@ -222,15 +235,12 @@ docs</a> for the full EnvParser documentation.</p>
|
|
222
235
|
|
223
236
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
224
237
|
|
225
|
-
<p>Additional features/options coming in the future: - A
|
226
|
-
<
|
227
|
-
|
228
|
-
<code>
|
229
|
-
|
230
|
-
|
231
|
-
a simple <code>from_set</code> can enforce. - A means to register
|
232
|
-
validation blocks as new “as” types. This will allow for custom “as” types
|
233
|
-
like <code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
238
|
+
<p>Additional features/options coming in the future: - A
|
239
|
+
<code>validator</code> option that lets you pass in a validator
|
240
|
+
lambda/block for things more complex than what a simple
|
241
|
+
<code>from_set</code> can enforce. - A means to register validation blocks
|
242
|
+
as new “as” types. This will allow for custom “as” types like
|
243
|
+
<code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
234
244
|
|
235
245
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
236
246
|
|
@@ -261,7 +271,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
261
271
|
</div></div>
|
262
272
|
|
263
273
|
<div id="footer">
|
264
|
-
Generated on Sun Dec 3
|
274
|
+
Generated on Sun Dec 3 16:33:43 2017 by
|
265
275
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
266
276
|
0.9.11 (ruby-2.4.2).
|
267
277
|
</div>
|
data/docs/method_list.html
CHANGED
@@ -46,13 +46,21 @@
|
|
46
46
|
|
47
47
|
<li class="odd ">
|
48
48
|
<div class="item">
|
49
|
-
<span class='object_link'><a href="EnvParser.html#
|
49
|
+
<span class='object_link'><a href="EnvParser.html#add_env_bindings-class_method" title="EnvParser.add_env_bindings (method)">add_env_bindings</a></span>
|
50
50
|
<small>EnvParser</small>
|
51
51
|
</div>
|
52
52
|
</li>
|
53
53
|
|
54
54
|
|
55
55
|
<li class="even ">
|
56
|
+
<div class="item">
|
57
|
+
<span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span>
|
58
|
+
<small>EnvParser</small>
|
59
|
+
</div>
|
60
|
+
</li>
|
61
|
+
|
62
|
+
|
63
|
+
<li class="odd ">
|
56
64
|
<div class="item">
|
57
65
|
<span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span>
|
58
66
|
<small>EnvParser</small>
|
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on Sun Dec 3
|
103
|
+
Generated on Sun Dec 3 16:33:43 2017 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
105
|
0.9.11 (ruby-2.4.2).
|
106
106
|
</div>
|
data/lib/env_parser/version.rb
CHANGED
data/lib/env_parser.rb
CHANGED
@@ -89,8 +89,8 @@ class EnvParser
|
|
89
89
|
## ## ... is equivalent to ...
|
90
90
|
##
|
91
91
|
## EnvParser.register(
|
92
|
-
## A: { from:
|
93
|
-
## B: { from:
|
92
|
+
## A: { from: one_hash, as: :integer }
|
93
|
+
## B: { from: another_hash, as: :string, if_unset: 'none' }
|
94
94
|
## )
|
95
95
|
## </pre>
|
96
96
|
##
|
@@ -148,6 +148,29 @@ class EnvParser
|
|
148
148
|
value
|
149
149
|
end
|
150
150
|
|
151
|
+
## Creates ENV bindings for EnvParser.parse and EnvParser.register proxy methods.
|
152
|
+
##
|
153
|
+
## The sole difference between these proxy methods and their EnvParser counterparts is that
|
154
|
+
## ENV.parse will interpret any value given as an ENV key (as a String), not the given value
|
155
|
+
## itself. i.e. ENV.parse('XYZ', ...) is equivalent to EnvParser.parse(ENV['XYZ'], ...)
|
156
|
+
##
|
157
|
+
## @return [ENV]
|
158
|
+
## This generates no usable value, so we may as well return ENV for chaining?
|
159
|
+
##
|
160
|
+
def add_env_bindings
|
161
|
+
ENV.instance_eval do
|
162
|
+
def parse(name, options = {})
|
163
|
+
EnvParser.parse(self[name.to_s], options)
|
164
|
+
end
|
165
|
+
|
166
|
+
def register(*args)
|
167
|
+
EnvParser.register(*args)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
ENV
|
172
|
+
end
|
173
|
+
|
151
174
|
private
|
152
175
|
|
153
176
|
def parse_string(value)
|
@@ -206,6 +229,9 @@ class EnvParser
|
|
206
229
|
##
|
207
230
|
## @param set [Array, Range]
|
208
231
|
##
|
232
|
+
## @return [nil]
|
233
|
+
## This generates no usable value.
|
234
|
+
##
|
209
235
|
## @raise [ArgumentError, EnvParser::ValueNotAllowed]
|
210
236
|
##
|
211
237
|
def check_for_set_inclusion(value, set: nil)
|
@@ -218,6 +244,8 @@ class EnvParser
|
|
218
244
|
end
|
219
245
|
|
220
246
|
raise ValueNotAllowed, 'parsed value not in allowed list/range' unless set.include?(value)
|
247
|
+
|
248
|
+
nil
|
221
249
|
end
|
222
250
|
|
223
251
|
## Receives a list of "register" calls to make, as a Hash keyed with variable names and the
|