env_parser 0.3.0 → 0.4.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 +23 -7
- data/docs/EnvParser/ValueNotAllowed.html +1 -1
- data/docs/EnvParser.html +245 -2
- data/docs/_index.html +1 -1
- data/docs/file.README.html +33 -14
- data/docs/index.html +33 -14
- data/docs/method_list.html +8 -0
- data/docs/top-level-namespace.html +1 -1
- data/lib/env_parser/version.rb +1 -1
- data/lib/env_parser.rb +52 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc268898780679cefa38eabfd71a3b40277289b8
|
4
|
+
data.tar.gz: f2f248a37d15f2bcc68d1a52f24f27a82d331fca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4ef8caacf69a8da90b1084cee02a85f74b8bb5ca6b073599d2d034e9ff8f6f2907b29ba1c542e845c96827010335ea19c16ce68b946f72c28d9ec7cd6a624de
|
7
|
+
data.tar.gz: 0f0812c3038e21463dc8f3fbf7ecc26aea7a9035a8cb594edcce8b861f498afbc8ee440d91a861cadc4d649dcdaa8eb1a10067fa35d65d4e94afa49234c8a75e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -49,17 +49,32 @@ EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: 250 ## => 250
|
|
49
49
|
|
50
50
|
## Note that "if_unset" values are used as-is, with no type conversion.
|
51
51
|
##
|
52
|
-
EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: '
|
52
|
+
EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: 'Whoops!' ## => 'Whoops!'
|
53
53
|
|
54
|
-
##
|
55
|
-
##
|
54
|
+
## Sometimes setting the type alone is a bit too open-ended.
|
55
|
+
## The "from_set" option lets you restrict the set of allowed values.
|
56
56
|
##
|
57
57
|
EnvParser.parse :API_TO_USE, as: :symbol, from_set: %i[internal external]
|
58
58
|
EnvParser.parse :SOME_CUSTOM_NETWORK_PORT, as: :integer, from_set: (1..65535), if_unset: 80
|
59
59
|
|
60
60
|
## And if the value is not allowed...
|
61
61
|
##
|
62
|
-
EnvParser.parse :
|
62
|
+
EnvParser.parse :NEGATIVE_NUMBER, as: :integer, from_set: (1..5) ## => raises EnvParser::ValueNotAllowed
|
63
|
+
|
64
|
+
## You can also SET CONSTANTS DIRECTLY FROM YOUR ENV VARIABLES.
|
65
|
+
|
66
|
+
## Global constants...
|
67
|
+
##
|
68
|
+
ENV['API_KEY'] = 'unbreakable p4$$w0rd'
|
69
|
+
EnvParser.register :API_KEY, as: :string
|
70
|
+
API_KEY ## => 'unbreakable p4$$w0rd' (registered within the Kernel module, so it's available everywhere)
|
71
|
+
|
72
|
+
## ... and class/module constants!
|
73
|
+
##
|
74
|
+
ENV['ULTIMATE_LINK'] = 'https://youtu.be/L_jWHffIx5E'
|
75
|
+
EnvParser.register :ULTIMATE_LINK, as: :string, within: URI
|
76
|
+
URI::ULTIMATE_LINK ## => That sweet, sweet link we just set.
|
77
|
+
ULTIMATE_LINK ## => raises NameError (the un-namespaced constant is only in scope within the URI module)
|
63
78
|
```
|
64
79
|
|
65
80
|
---
|
@@ -87,9 +102,10 @@ Note JSON is parsed using *quirks-mode* (meaning 'true', '25', and 'null' are al
|
|
87
102
|
## Feature Roadmap / Future Development
|
88
103
|
|
89
104
|
Additional features/options coming in the future:
|
90
|
-
- An `EnvParser.
|
91
|
-
-
|
92
|
-
- A
|
105
|
+
- An `EnvParser.register_all` method to shortcut multiple `.register` calls.
|
106
|
+
- A means to **optionally** bind `#parse`, `#regiter`, and `#register_all` methods onto `ENV`. Because `ENV.parse ...` reads better than `EnvParser.parse ...`.
|
107
|
+
- A `validator` option that lets you pass in a validator lambda/block for things more complex than what a simple `from_set` can enforce.
|
108
|
+
- A means to register validation blocks as new "as" types. This will allow for custom "as" types like `:url`, `:email`, etc.
|
93
109
|
- ... ?
|
94
110
|
|
95
111
|
|
@@ -126,7 +126,7 @@ option.</p>
|
|
126
126
|
</div>
|
127
127
|
|
128
128
|
<div id="footer">
|
129
|
-
Generated on
|
129
|
+
Generated on Thu Nov 30 22:44:16 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.4.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
|
|
@@ -169,6 +169,31 @@ different data types.</p>
|
|
169
169
|
<p>Interprets the given value as the specified type.</p>
|
170
170
|
</div></span>
|
171
171
|
|
172
|
+
</li>
|
173
|
+
|
174
|
+
|
175
|
+
<li class="public ">
|
176
|
+
<span class="summary_signature">
|
177
|
+
|
178
|
+
<a href="#register-class_method" title="register (class method)">.<strong>register</strong>(name, options = {}) ⇒ Object </a>
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
</span>
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
<span class="summary_desc"><div class='inline'>
|
193
|
+
<p>Parses the referenced value and creates a matching constant in the
|
194
|
+
requested context.</p>
|
195
|
+
</div></span>
|
196
|
+
|
172
197
|
</li>
|
173
198
|
|
174
199
|
|
@@ -396,6 +421,224 @@ value will raise an ArgumentError exception.</p>
|
|
396
421
|
</td>
|
397
422
|
</tr>
|
398
423
|
</table>
|
424
|
+
</div>
|
425
|
+
|
426
|
+
<div class="method_details ">
|
427
|
+
<h3 class="signature " id="register-class_method">
|
428
|
+
|
429
|
+
.<strong>register</strong>(name, options = {}) ⇒ <tt>Object</tt>
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
</h3><div class="docstring">
|
436
|
+
<div class="discussion">
|
437
|
+
|
438
|
+
<p>Parses the referenced value and creates a matching constant in the
|
439
|
+
requested context.</p>
|
440
|
+
|
441
|
+
|
442
|
+
</div>
|
443
|
+
</div>
|
444
|
+
<div class="tags">
|
445
|
+
<p class="tag_title">Parameters:</p>
|
446
|
+
<ul class="param">
|
447
|
+
|
448
|
+
<li>
|
449
|
+
|
450
|
+
<span class='name'>name</span>
|
451
|
+
|
452
|
+
|
453
|
+
<span class='type'></span>
|
454
|
+
|
455
|
+
|
456
|
+
|
457
|
+
—
|
458
|
+
<div class='inline'>
|
459
|
+
<p>The name of the value to parse/interpret from the “from” Hash. If the
|
460
|
+
“from” value is ENV, you may give a Symbol and the corresponding String key
|
461
|
+
will be used instead.</p>
|
462
|
+
</div>
|
463
|
+
|
464
|
+
</li>
|
465
|
+
|
466
|
+
<li>
|
467
|
+
|
468
|
+
<span class='name'>options</span>
|
469
|
+
|
470
|
+
|
471
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
472
|
+
|
473
|
+
|
474
|
+
<em class="default">(defaults to: <tt>{}</tt>)</em>
|
475
|
+
|
476
|
+
|
477
|
+
—
|
478
|
+
<div class='inline'>
|
479
|
+
<p>a customizable set of options</p>
|
480
|
+
</div>
|
481
|
+
|
482
|
+
</li>
|
483
|
+
|
484
|
+
</ul>
|
485
|
+
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
<p class="tag_title">Options Hash (<tt>options</tt>):</p>
|
492
|
+
<ul class="option">
|
493
|
+
|
494
|
+
<li>
|
495
|
+
<span class="name">from</span>
|
496
|
+
<span class="type">(<tt>Hash</tt>)</span>
|
497
|
+
<span class="default">
|
498
|
+
|
499
|
+
</span>
|
500
|
+
|
501
|
+
— <div class='inline'>
|
502
|
+
<p>The source Hash from which to pull the value referenced by the “name” key.
|
503
|
+
Defaults to ENV.</p>
|
504
|
+
</div>
|
505
|
+
|
506
|
+
</li>
|
507
|
+
|
508
|
+
<li>
|
509
|
+
<span class="name">within</span>
|
510
|
+
<span class="type">(<tt>Module</tt>, <tt>Class</tt>)</span>
|
511
|
+
<span class="default">
|
512
|
+
|
513
|
+
</span>
|
514
|
+
|
515
|
+
— <div class='inline'>
|
516
|
+
<p>The module or class in which the constant should be created. Defaults to
|
517
|
+
Kernel (making it a global constant).</p>
|
518
|
+
</div>
|
519
|
+
|
520
|
+
</li>
|
521
|
+
|
522
|
+
<li>
|
523
|
+
<span class="name">as</span>
|
524
|
+
<span class="type">(<tt>Symbol</tt>)</span>
|
525
|
+
<span class="default">
|
526
|
+
|
527
|
+
— default:
|
528
|
+
<tt>See `.parse`</tt>
|
529
|
+
|
530
|
+
</span>
|
531
|
+
|
532
|
+
</li>
|
533
|
+
|
534
|
+
<li>
|
535
|
+
<span class="name">if_unset</span>
|
536
|
+
<span class="type">(<tt>Object</tt>)</span>
|
537
|
+
<span class="default">
|
538
|
+
|
539
|
+
— default:
|
540
|
+
<tt>See `.parse`</tt>
|
541
|
+
|
542
|
+
</span>
|
543
|
+
|
544
|
+
</li>
|
545
|
+
|
546
|
+
<li>
|
547
|
+
<span class="name">from_set</span>
|
548
|
+
<span class="type">(<tt>Array</tt>, <tt>Range</tt>)</span>
|
549
|
+
<span class="default">
|
550
|
+
|
551
|
+
— default:
|
552
|
+
<tt>See `.parse`</tt>
|
553
|
+
|
554
|
+
</span>
|
555
|
+
|
556
|
+
</li>
|
557
|
+
|
558
|
+
</ul>
|
559
|
+
|
560
|
+
|
561
|
+
<p class="tag_title">Raises:</p>
|
562
|
+
<ul class="raise">
|
563
|
+
|
564
|
+
<li>
|
565
|
+
|
566
|
+
|
567
|
+
<span class='type'>(<tt>ArgumentError</tt>)</span>
|
568
|
+
|
569
|
+
|
570
|
+
|
571
|
+
</li>
|
572
|
+
|
573
|
+
</ul>
|
574
|
+
|
575
|
+
</div><table class="source_code">
|
576
|
+
<tr>
|
577
|
+
<td>
|
578
|
+
<pre class="lines">
|
579
|
+
|
580
|
+
|
581
|
+
101
|
582
|
+
102
|
583
|
+
103
|
584
|
+
104
|
585
|
+
105
|
586
|
+
106
|
587
|
+
107
|
588
|
+
108
|
589
|
+
109
|
590
|
+
110
|
591
|
+
111
|
592
|
+
112
|
593
|
+
113
|
594
|
+
114
|
595
|
+
115
|
596
|
+
116
|
597
|
+
117
|
598
|
+
118
|
599
|
+
119
|
600
|
+
120
|
601
|
+
121
|
602
|
+
122
|
603
|
+
123
|
604
|
+
124
|
605
|
+
125
|
606
|
+
126
|
607
|
+
127</pre>
|
608
|
+
</td>
|
609
|
+
<td>
|
610
|
+
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line 101</span>
|
611
|
+
|
612
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_register'>register</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>
|
613
|
+
<span class='id identifier rubyid_from'>from</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:from</span><span class='comma'>,</span> <span class='const'>ENV</span><span class='rparen'>)</span>
|
614
|
+
<span class='id identifier rubyid_within'>within</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:within</span><span class='comma'>,</span> <span class='const'>Kernel</span><span class='rparen'>)</span>
|
615
|
+
|
616
|
+
<span class='comment'>## ENV *seems* like a Hash and it does *some* Hash-y things, but it is NOT a Hash and that can
|
617
|
+
</span> <span class='comment'>## bite you in some cases. Making sure we're working with a straight-up Hash saves a lot of
|
618
|
+
</span> <span class='comment'>## sanity checks later on. This is also a good place to make sure we're working with a String
|
619
|
+
</span> <span class='comment'>## key.
|
620
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_from'>from</span> <span class='op'>==</span> <span class='const'>ENV</span>
|
621
|
+
<span class='id identifier rubyid_from'>from</span> <span class='op'>=</span> <span class='id identifier rubyid_from'>from</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span>
|
622
|
+
<span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
623
|
+
<span class='kw'>end</span>
|
624
|
+
|
625
|
+
<span class='kw'>unless</span> <span class='id identifier rubyid_from'>from</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
|
626
|
+
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>invalid `from` parameter: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_from'>from</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
627
|
+
<span class='kw'>end</span>
|
628
|
+
|
629
|
+
<span class='kw'>unless</span> <span class='id identifier rubyid_within'>within</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Module</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_within'>within</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Class</span><span class='rparen'>)</span>
|
630
|
+
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>invalid `within` parameter: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_within'>within</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
631
|
+
<span class='kw'>end</span>
|
632
|
+
|
633
|
+
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_from'>from</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
|
634
|
+
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
|
635
|
+
<span class='id identifier rubyid_within'>within</span><span class='period'>.</span><span class='id identifier rubyid_const_set'>const_set</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span><span class='rparen'>)</span>
|
636
|
+
|
637
|
+
<span class='id identifier rubyid_value'>value</span>
|
638
|
+
<span class='kw'>end</span></pre>
|
639
|
+
</td>
|
640
|
+
</tr>
|
641
|
+
</table>
|
399
642
|
</div>
|
400
643
|
|
401
644
|
</div>
|
@@ -403,7 +646,7 @@ value will raise an ArgumentError exception.</p>
|
|
403
646
|
</div>
|
404
647
|
|
405
648
|
<div id="footer">
|
406
|
-
Generated on
|
649
|
+
Generated on Thu Nov 30 22:44:16 2017 by
|
407
650
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
408
651
|
0.9.11 (ruby-2.4.2).
|
409
652
|
</div>
|
data/docs/_index.html
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
</div>
|
113
113
|
|
114
114
|
<div id="footer">
|
115
|
-
Generated on
|
115
|
+
Generated on Thu Nov 30 22:44:16 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
@@ -125,11 +125,11 @@ EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: 250 ## =>
|
|
125
125
|
<h2 id="label-Note+that+-22if_unset-22+values+are+used+as-is-2C+with+no+type+conversion.">Note that “if_unset” values are used as-is, with no type conversion.</h2>
|
126
126
|
|
127
127
|
<p>## EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset:
|
128
|
-
'
|
128
|
+
'Whoops!' ## => 'Whoops!'</p>
|
129
129
|
|
130
|
-
<h2 id="label-
|
130
|
+
<h2 id="label-Sometimes+setting+the+type+alone+is+a+bit+too+open-ended.">Sometimes setting the type alone is a bit too open-ended.</h2>
|
131
131
|
|
132
|
-
<h2 id="label-
|
132
|
+
<h2 id="label-The+-22from_set-22+option+lets+you+restrict+the+set+of+allowed+values.">The “from_set” option lets you restrict the set of allowed values.</h2>
|
133
133
|
|
134
134
|
<p>## EnvParser.parse :API_TO_USE, as: :symbol, from_set: %i[internal
|
135
135
|
external] EnvParser.parse :SOME_CUSTOM_NETWORK_PORT, as: :integer,
|
@@ -137,8 +137,26 @@ from_set: (1..65535), if_unset: 80</p>
|
|
137
137
|
|
138
138
|
<h2 id="label-And+if+the+value+is+not+allowed...">And if the value is not allowed…</h2>
|
139
139
|
|
140
|
-
<p>## EnvParser.parse :
|
141
|
-
=> raises EnvParser::ValueNotAllowed
|
140
|
+
<p>## EnvParser.parse :NEGATIVE_NUMBER, as: :integer, from_set: (1..5) ##
|
141
|
+
=> raises EnvParser::ValueNotAllowed</p>
|
142
|
+
|
143
|
+
<h2 id="label-You+can+also+SET+CONSTANTS+DIRECTLY+FROM+YOUR+ENV+VARIABLES.">You can also SET CONSTANTS DIRECTLY FROM YOUR ENV VARIABLES.</h2>
|
144
|
+
|
145
|
+
<h2 id="label-Global+constants...">Global constants…</h2>
|
146
|
+
|
147
|
+
<p>## <a href="'API_KEY'">ENV</a> = 'unbreakable p4$$w0rd'
|
148
|
+
EnvParser.register :API_KEY, as: :string API_KEY ## => 'unbreakable
|
149
|
+
p4$$w0rd' (registered within the Kernel module, so it's available
|
150
|
+
everywhere)</p>
|
151
|
+
|
152
|
+
<h2 id="label-...+and+class-2Fmodule+constants-21">… and class/module constants!</h2>
|
153
|
+
|
154
|
+
<p>## <a href="'ULTIMATE_LINK'">ENV</a> = '<a
|
155
|
+
href="https://youtu.be/L_jWHffIx5E">youtu.be/L_jWHffIx5E</a>'
|
156
|
+
EnvParser.register :ULTIMATE_LINK, as: :string, within: URI
|
157
|
+
URI::ULTIMATE_LINK ## => That sweet, sweet link we just set.
|
158
|
+
ULTIMATE_LINK ## => raises NameError (the un-namespaced constant is only
|
159
|
+
in scope within the URI module) “`</p>
|
142
160
|
<hr>
|
143
161
|
|
144
162
|
<p>The named <code>:as</code> value is required. Allowed values are:</p>
|
@@ -160,14 +178,15 @@ the repo docs</a> for the full EnvParser documentation.</p>
|
|
160
178
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
161
179
|
|
162
180
|
<p>Additional features/options coming in the future: - An
|
163
|
-
<code>EnvParser.
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
181
|
+
<code>EnvParser.register_all</code> method to shortcut multiple
|
182
|
+
<code>.register</code> calls. - A means to <strong>optionally</strong> bind
|
183
|
+
<code>#parse</code>, <code>#regiter</code>, and <code>#register_all</code>
|
184
|
+
methods onto <code>ENV</code>. Because <code>ENV.parse ...</code> reads
|
185
|
+
better than <code>EnvParser.parse ...</code>. - A <code>validator</code>
|
186
|
+
option that lets you pass in a validator lambda/block for things more
|
187
|
+
complex than what a simple <code>from_set</code> can enforce. - A means to
|
188
|
+
register validation blocks as new “as” types. This will allow for custom
|
189
|
+
“as” types like <code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
171
190
|
|
172
191
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
173
192
|
|
@@ -198,7 +217,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
198
217
|
</div></div>
|
199
218
|
|
200
219
|
<div id="footer">
|
201
|
-
Generated on
|
220
|
+
Generated on Thu Nov 30 22:44:16 2017 by
|
202
221
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
203
222
|
0.9.11 (ruby-2.4.2).
|
204
223
|
</div>
|
data/docs/index.html
CHANGED
@@ -125,11 +125,11 @@ EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset: 250 ## =>
|
|
125
125
|
<h2 id="label-Note+that+-22if_unset-22+values+are+used+as-is-2C+with+no+type+conversion.">Note that “if_unset” values are used as-is, with no type conversion.</h2>
|
126
126
|
|
127
127
|
<p>## EnvParser.parse :MISSING_ENV_VARIABLE, as: :integer, if_unset:
|
128
|
-
'
|
128
|
+
'Whoops!' ## => 'Whoops!'</p>
|
129
129
|
|
130
|
-
<h2 id="label-
|
130
|
+
<h2 id="label-Sometimes+setting+the+type+alone+is+a+bit+too+open-ended.">Sometimes setting the type alone is a bit too open-ended.</h2>
|
131
131
|
|
132
|
-
<h2 id="label-
|
132
|
+
<h2 id="label-The+-22from_set-22+option+lets+you+restrict+the+set+of+allowed+values.">The “from_set” option lets you restrict the set of allowed values.</h2>
|
133
133
|
|
134
134
|
<p>## EnvParser.parse :API_TO_USE, as: :symbol, from_set: %i[internal
|
135
135
|
external] EnvParser.parse :SOME_CUSTOM_NETWORK_PORT, as: :integer,
|
@@ -137,8 +137,26 @@ from_set: (1..65535), if_unset: 80</p>
|
|
137
137
|
|
138
138
|
<h2 id="label-And+if+the+value+is+not+allowed...">And if the value is not allowed…</h2>
|
139
139
|
|
140
|
-
<p>## EnvParser.parse :
|
141
|
-
=> raises EnvParser::ValueNotAllowed
|
140
|
+
<p>## EnvParser.parse :NEGATIVE_NUMBER, as: :integer, from_set: (1..5) ##
|
141
|
+
=> raises EnvParser::ValueNotAllowed</p>
|
142
|
+
|
143
|
+
<h2 id="label-You+can+also+SET+CONSTANTS+DIRECTLY+FROM+YOUR+ENV+VARIABLES.">You can also SET CONSTANTS DIRECTLY FROM YOUR ENV VARIABLES.</h2>
|
144
|
+
|
145
|
+
<h2 id="label-Global+constants...">Global constants…</h2>
|
146
|
+
|
147
|
+
<p>## <a href="'API_KEY'">ENV</a> = 'unbreakable p4$$w0rd'
|
148
|
+
EnvParser.register :API_KEY, as: :string API_KEY ## => 'unbreakable
|
149
|
+
p4$$w0rd' (registered within the Kernel module, so it's available
|
150
|
+
everywhere)</p>
|
151
|
+
|
152
|
+
<h2 id="label-...+and+class-2Fmodule+constants-21">… and class/module constants!</h2>
|
153
|
+
|
154
|
+
<p>## <a href="'ULTIMATE_LINK'">ENV</a> = '<a
|
155
|
+
href="https://youtu.be/L_jWHffIx5E">youtu.be/L_jWHffIx5E</a>'
|
156
|
+
EnvParser.register :ULTIMATE_LINK, as: :string, within: URI
|
157
|
+
URI::ULTIMATE_LINK ## => That sweet, sweet link we just set.
|
158
|
+
ULTIMATE_LINK ## => raises NameError (the un-namespaced constant is only
|
159
|
+
in scope within the URI module) “`</p>
|
142
160
|
<hr>
|
143
161
|
|
144
162
|
<p>The named <code>:as</code> value is required. Allowed values are:</p>
|
@@ -160,14 +178,15 @@ the repo docs</a> for the full EnvParser documentation.</p>
|
|
160
178
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
161
179
|
|
162
180
|
<p>Additional features/options coming in the future: - An
|
163
|
-
<code>EnvParser.
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
181
|
+
<code>EnvParser.register_all</code> method to shortcut multiple
|
182
|
+
<code>.register</code> calls. - A means to <strong>optionally</strong> bind
|
183
|
+
<code>#parse</code>, <code>#regiter</code>, and <code>#register_all</code>
|
184
|
+
methods onto <code>ENV</code>. Because <code>ENV.parse ...</code> reads
|
185
|
+
better than <code>EnvParser.parse ...</code>. - A <code>validator</code>
|
186
|
+
option that lets you pass in a validator lambda/block for things more
|
187
|
+
complex than what a simple <code>from_set</code> can enforce. - A means to
|
188
|
+
register validation blocks as new “as” types. This will allow for custom
|
189
|
+
“as” types like <code>:url</code>, <code>:email</code>, etc. - … ?</p>
|
171
190
|
|
172
191
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
173
192
|
|
@@ -198,7 +217,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
198
217
|
</div></div>
|
199
218
|
|
200
219
|
<div id="footer">
|
201
|
-
Generated on
|
220
|
+
Generated on Thu Nov 30 22:44:16 2017 by
|
202
221
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
203
222
|
0.9.11 (ruby-2.4.2).
|
204
223
|
</div>
|
data/docs/method_list.html
CHANGED
@@ -52,6 +52,14 @@
|
|
52
52
|
</li>
|
53
53
|
|
54
54
|
|
55
|
+
<li class="even ">
|
56
|
+
<div class="item">
|
57
|
+
<span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span>
|
58
|
+
<small>EnvParser</small>
|
59
|
+
</div>
|
60
|
+
</li>
|
61
|
+
|
62
|
+
|
55
63
|
|
56
64
|
</ul>
|
57
65
|
</div>
|
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Thu Nov 30 22:44:16 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
@@ -74,6 +74,58 @@ class EnvParser
|
|
74
74
|
value
|
75
75
|
end
|
76
76
|
|
77
|
+
## Parses the referenced value and creates a matching constant in the requested context.
|
78
|
+
##
|
79
|
+
## @param name
|
80
|
+
## The name of the value to parse/interpret from the "from" Hash. If the "from" value is ENV,
|
81
|
+
## you may give a Symbol and the corresponding String key will be used instead.
|
82
|
+
##
|
83
|
+
## @option options from [Hash]
|
84
|
+
## The source Hash from which to pull the value referenced by the "name" key. Defaults to ENV.
|
85
|
+
##
|
86
|
+
## @option options within [Module, Class]
|
87
|
+
## The module or class in which the constant should be created. Defaults to Kernel (making it
|
88
|
+
## a global constant).
|
89
|
+
##
|
90
|
+
## @option options as [Symbol]
|
91
|
+
## (See `.parse`)
|
92
|
+
##
|
93
|
+
## @option options if_unset
|
94
|
+
## (See `.parse`)
|
95
|
+
##
|
96
|
+
## @option options from_set [Array, Range]
|
97
|
+
## (See `.parse`)
|
98
|
+
##
|
99
|
+
## @raise [ArgumentError]
|
100
|
+
##
|
101
|
+
def register(name, options = {})
|
102
|
+
from = options.fetch(:from, ENV)
|
103
|
+
within = options.fetch(:within, Kernel)
|
104
|
+
|
105
|
+
## ENV *seems* like a Hash and it does *some* Hash-y things, but it is NOT a Hash and that can
|
106
|
+
## bite you in some cases. Making sure we're working with a straight-up Hash saves a lot of
|
107
|
+
## sanity checks later on. This is also a good place to make sure we're working with a String
|
108
|
+
## key.
|
109
|
+
if from == ENV
|
110
|
+
from = from.to_h
|
111
|
+
name = name.to_s
|
112
|
+
end
|
113
|
+
|
114
|
+
unless from.is_a?(Hash)
|
115
|
+
raise ArgumentError, "invalid `from` parameter: #{from.class}"
|
116
|
+
end
|
117
|
+
|
118
|
+
unless within.is_a?(Module) || within.is_a?(Class)
|
119
|
+
raise ArgumentError, "invalid `within` parameter: #{within.inspect}"
|
120
|
+
end
|
121
|
+
|
122
|
+
value = from[name]
|
123
|
+
value = parse(value, options)
|
124
|
+
within.const_set(name.upcase.to_sym, value.dup.freeze)
|
125
|
+
|
126
|
+
value
|
127
|
+
end
|
128
|
+
|
77
129
|
private
|
78
130
|
|
79
131
|
def parse_string(value)
|
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: 0.
|
4
|
+
version: 0.4.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: 2017-
|
11
|
+
date: 2017-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|