env_parser 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|