env_parser 0.6.0 → 0.7.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 +13 -6
- data/docs/EnvParser/ValueNotAllowed.html +1 -1
- data/docs/EnvParser.html +175 -82
- data/docs/_index.html +1 -1
- data/docs/file.README.html +29 -20
- data/docs/index.html +29 -20
- data/docs/top-level-namespace.html +1 -1
- data/lib/env_parser/version.rb +1 -1
- data/lib/env_parser.rb +58 -10
- 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: e4e18299d9f60e90144794c743405a7719404e8a
|
4
|
+
data.tar.gz: 57ea9d3762d0e6294600afc8df35968bd290dbd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc3918f1dd9be06601fe68826fd891f76081fa424a1607453f2956f09590e469b53029c8c4ad2b541f5619343ef44e132ac784e96e7c028da51bdc73b19ae886
|
7
|
+
data.tar.gz: 34b54cc90f38bfe93994a42e90fd351573476bc503174de330258ffb7c8639c0bc147baaac079e5eff1eaffa5f02b01a6aed75adb41340c4fec90b40976e17c8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
# EnvParser
|
1
|
+
# EnvParser [![Gem Version](https://badge.fury.io/rb/env_parser.svg)](https://badge.fury.io/rb/env_parser)
|
2
2
|
|
3
|
-
If your code uses environment variables, you know that `ENV` will always surface these as strings. Interpreting these strings as the value you *actually* want to see/use takes some
|
3
|
+
If your code uses environment variables, you know that `ENV` will always surface these as strings. Interpreting these strings as the value you *actually* want to see/use takes some work, however: for numbers you need to cast with `#to_i`/`#to_f`, for booleans you need to check for a specific value (`ENV['SOME_VAR'] == 'true'`), etc. Maybe you want to set non-trivial defaults (something other than `0` or `''`)? Maybe you only want to allow values from a limited set? ...
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
Things can get out of control pretty fast, especially as the number of environment variables in play grows. EnvParser aims to help keep things simple.
|
5
|
+
Things can get out of control pretty fast, especially as the number of environment variables in play grows. Tools like [dotenv](https://github.com/bkeepers/dotenv) help to make sure you're loading the correct set of *variables*, but EnvParser makes *the values themselves* usable with a minimum of effort.
|
8
6
|
|
9
7
|
|
10
8
|
## Installation
|
@@ -122,6 +120,15 @@ EnvParser.parse :SOME_CUSTOM_NETWORK_PORT, as: :integer, from_set: (1..65535), i
|
|
122
120
|
## And if the value is not allowed...
|
123
121
|
##
|
124
122
|
EnvParser.parse :NEGATIVE_NUMBER, as: :integer, from_set: (1..5) ## => raises EnvParser::ValueNotAllowed
|
123
|
+
|
124
|
+
|
125
|
+
## The "validated_by" option allows for more complex validation.
|
126
|
+
##
|
127
|
+
EnvParser.parse :MUST_BE_LOWERCASE, as: :string, validated_by: ->(value) { value == value.downcase }
|
128
|
+
|
129
|
+
## ... but a block will also do the trick!
|
130
|
+
EnvParser.parse(:MUST_BE_LOWERCASE, as: :string) { |value| value == value.downcase }
|
131
|
+
EnvParser.parse(:CONNECTION_RETRIES, as: :integer, &:nonzero?)
|
125
132
|
```
|
126
133
|
|
127
134
|
|
@@ -182,7 +189,7 @@ ENV.register :SHORT_PI, as: :float ## Your constant is set, my man!
|
|
182
189
|
## Feature Roadmap / Future Development
|
183
190
|
|
184
191
|
Additional features/options coming in the future:
|
185
|
-
|
192
|
+
|
186
193
|
- A means to register validation blocks as new "as" types. This will allow for custom "as" types like `:url`, `:email`, etc.
|
187
194
|
- ... ?
|
188
195
|
|
@@ -126,7 +126,7 @@ option.</p>
|
|
126
126
|
</div>
|
127
127
|
|
128
128
|
<div id="footer">
|
129
|
-
Generated on
|
129
|
+
Generated on Mon Dec 11 23:37:25 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.7.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
|
|
@@ -176,7 +176,7 @@ methods.</p>
|
|
176
176
|
<li class="public ">
|
177
177
|
<span class="summary_signature">
|
178
178
|
|
179
|
-
<a href="#parse-class_method" title="parse (class method)">.<strong>parse</strong>(value, options = {})
|
179
|
+
<a href="#parse-class_method" title="parse (class method)">.<strong>parse</strong>(value, options = {}) {|value| ... } ⇒ Object </a>
|
180
180
|
|
181
181
|
|
182
182
|
|
@@ -200,7 +200,7 @@ methods.</p>
|
|
200
200
|
<li class="public ">
|
201
201
|
<span class="summary_signature">
|
202
202
|
|
203
|
-
<a href="#register-class_method" title="register (class method)">.<strong>register</strong>(name, options = {})
|
203
|
+
<a href="#register-class_method" title="register (class method)">.<strong>register</strong>(name, options = {}) {|value| ... } ⇒ Object </a>
|
204
204
|
|
205
205
|
|
206
206
|
|
@@ -281,27 +281,27 @@ is equivalent to <a href="'XYZ'">EnvParser.parse(ENV</a>, …)</p>
|
|
281
281
|
<pre class="lines">
|
282
282
|
|
283
283
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
284
|
+
190
|
285
|
+
191
|
286
|
+
192
|
287
|
+
193
|
288
|
+
194
|
289
|
+
195
|
290
|
+
196
|
291
|
+
197
|
292
|
+
198
|
293
|
+
199
|
294
|
+
200
|
295
|
+
201
|
296
|
+
202</pre>
|
297
297
|
</td>
|
298
298
|
<td>
|
299
|
-
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line
|
299
|
+
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line 190</span>
|
300
300
|
|
301
301
|
<span class='kw'>def</span> <span class='id identifier rubyid_add_env_bindings'>add_env_bindings</span>
|
302
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>
|
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='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_validation_block'>validation_block</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='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_validation_block'>validation_block</span><span class='rparen'>)</span>
|
305
305
|
<span class='kw'>end</span>
|
306
306
|
|
307
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>
|
@@ -319,7 +319,7 @@ is equivalent to <a href="'XYZ'">EnvParser.parse(ENV</a>, …)</p>
|
|
319
319
|
<div class="method_details ">
|
320
320
|
<h3 class="signature " id="parse-class_method">
|
321
321
|
|
322
|
-
.<strong>parse</strong>(value, options = {})
|
322
|
+
.<strong>parse</strong>(value, options = {}) {|value| ... } ⇒ <tt>Object</tt>
|
323
323
|
|
324
324
|
|
325
325
|
|
@@ -455,6 +455,30 @@ returned, even if it is not part of the “from_set” list/range.</p>
|
|
455
455
|
only available for scalar values (i.e. not arrays, hashes, or other
|
456
456
|
enumerables). An attempt to use the “from_set” option with a non-scalar
|
457
457
|
value will raise an ArgumentError exception.</p>
|
458
|
+
</div>
|
459
|
+
|
460
|
+
</li>
|
461
|
+
|
462
|
+
<li>
|
463
|
+
<span class="name">validated_by</span>
|
464
|
+
<span class="type">(<tt>Proc</tt>)</span>
|
465
|
+
<span class="default">
|
466
|
+
|
467
|
+
</span>
|
468
|
+
|
469
|
+
— <div class='inline'>
|
470
|
+
<p>If given, the “validated_by” proc is called with the parsed value (after
|
471
|
+
type conversion) as its sole argument. This allows for user-defined
|
472
|
+
validation of the parsed value beyond what can be enforced by use of the
|
473
|
+
“from_set” option alone. If the proc's return value is
|
474
|
+
<code>#blank?</code>, an EnvParser::ValueNotAllowed exception is raised. To
|
475
|
+
accomodate your syntax of choice, this validation proc may be given as a
|
476
|
+
yield block instead.</p>
|
477
|
+
|
478
|
+
<p>Note that this option is intended to provide an inspection mechanism only –
|
479
|
+
no mutation of the parsed value should occur within the given proc. To that
|
480
|
+
end, the argument passed is a <em>frozen</em> duplicate of the parsed
|
481
|
+
value.</p>
|
458
482
|
</div>
|
459
483
|
|
460
484
|
</li>
|
@@ -462,6 +486,28 @@ value will raise an ArgumentError exception.</p>
|
|
462
486
|
</ul>
|
463
487
|
|
464
488
|
|
489
|
+
<p class="tag_title">Yields:</p>
|
490
|
+
<ul class="yield">
|
491
|
+
|
492
|
+
<li>
|
493
|
+
|
494
|
+
|
495
|
+
<span class='type'>(<tt>value</tt>)</span>
|
496
|
+
|
497
|
+
|
498
|
+
|
499
|
+
—
|
500
|
+
<div class='inline'>
|
501
|
+
<p>A block (if given) is treated exactly as the “validated_by” Proc would.
|
502
|
+
Although there is no compelling reason to provide both a “validated_by”
|
503
|
+
proc <em>and</em> a validation block, there is no technical limitation
|
504
|
+
preventing this. <strong>If both are given, both validation checks must
|
505
|
+
pass.</strong></p>
|
506
|
+
</div>
|
507
|
+
|
508
|
+
</li>
|
509
|
+
|
510
|
+
</ul>
|
465
511
|
<p class="tag_title">Raises:</p>
|
466
512
|
<ul class="raise">
|
467
513
|
|
@@ -482,32 +528,34 @@ value will raise an ArgumentError exception.</p>
|
|
482
528
|
<pre class="lines">
|
483
529
|
|
484
530
|
|
485
|
-
55
|
486
|
-
56
|
487
|
-
57
|
488
|
-
58
|
489
|
-
59
|
490
|
-
60
|
491
|
-
61
|
492
|
-
62
|
493
|
-
63
|
494
|
-
64
|
495
|
-
65
|
496
|
-
66
|
497
|
-
67
|
498
|
-
68
|
499
|
-
69
|
500
|
-
70
|
501
|
-
71
|
502
531
|
72
|
503
532
|
73
|
504
533
|
74
|
505
|
-
75
|
534
|
+
75
|
535
|
+
76
|
536
|
+
77
|
537
|
+
78
|
538
|
+
79
|
539
|
+
80
|
540
|
+
81
|
541
|
+
82
|
542
|
+
83
|
543
|
+
84
|
544
|
+
85
|
545
|
+
86
|
546
|
+
87
|
547
|
+
88
|
548
|
+
89
|
549
|
+
90
|
550
|
+
91
|
551
|
+
92
|
552
|
+
93
|
553
|
+
94</pre>
|
506
554
|
</td>
|
507
555
|
<td>
|
508
|
-
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line
|
556
|
+
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line 72</span>
|
509
557
|
|
510
|
-
<span class='kw'>def</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='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
558
|
+
<span class='kw'>def</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='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_validation_block'>validation_block</span><span class='rparen'>)</span>
|
511
559
|
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Symbol</span>
|
512
560
|
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
513
561
|
|
@@ -526,6 +574,8 @@ value will raise an ArgumentError exception.</p>
|
|
526
574
|
<span class='kw'>end</span>
|
527
575
|
|
528
576
|
<span class='id identifier rubyid_check_for_set_inclusion'>check_for_set_inclusion</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='label'>set:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:from_set</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:from_set</span><span class='rparen'>)</span>
|
577
|
+
<span class='id identifier rubyid_check_user_defined_validations'>check_user_defined_validations</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='label'>proc:</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:validated_by</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>block:</span> <span class='id identifier rubyid_validation_block'>validation_block</span><span class='rparen'>)</span>
|
578
|
+
|
529
579
|
<span class='id identifier rubyid_value'>value</span>
|
530
580
|
<span class='kw'>end</span></pre>
|
531
581
|
</td>
|
@@ -536,7 +586,7 @@ value will raise an ArgumentError exception.</p>
|
|
536
586
|
<div class="method_details ">
|
537
587
|
<h3 class="signature " id="register-class_method">
|
538
588
|
|
539
|
-
.<strong>register</strong>(name, options = {})
|
589
|
+
.<strong>register</strong>(name, options = {}) {|value| ... } ⇒ <tt>Object</tt>
|
540
590
|
|
541
591
|
|
542
592
|
|
@@ -650,11 +700,12 @@ Kernel (making it a global constant).</p>
|
|
650
700
|
<span class="type">(<tt>Symbol</tt>)</span>
|
651
701
|
<span class="default">
|
652
702
|
|
653
|
-
— default:
|
654
|
-
<tt>See `.parse`</tt>
|
655
|
-
|
656
703
|
</span>
|
657
704
|
|
705
|
+
— <div class='inline'>
|
706
|
+
<p>See <code>.parse</code>.</p>
|
707
|
+
</div>
|
708
|
+
|
658
709
|
</li>
|
659
710
|
|
660
711
|
<li>
|
@@ -662,11 +713,12 @@ Kernel (making it a global constant).</p>
|
|
662
713
|
<span class="type">(<tt>Object</tt>)</span>
|
663
714
|
<span class="default">
|
664
715
|
|
665
|
-
— default:
|
666
|
-
<tt>See `.parse`</tt>
|
667
|
-
|
668
716
|
</span>
|
669
717
|
|
718
|
+
— <div class='inline'>
|
719
|
+
<p>See <code>.parse</code>.</p>
|
720
|
+
</div>
|
721
|
+
|
670
722
|
</li>
|
671
723
|
|
672
724
|
<li>
|
@@ -674,16 +726,51 @@ Kernel (making it a global constant).</p>
|
|
674
726
|
<span class="type">(<tt>Array</tt>, <tt>Range</tt>)</span>
|
675
727
|
<span class="default">
|
676
728
|
|
677
|
-
|
678
|
-
|
729
|
+
</span>
|
730
|
+
|
731
|
+
— <div class='inline'>
|
732
|
+
<p>See <code>.parse</code>.</p>
|
733
|
+
</div>
|
734
|
+
|
735
|
+
</li>
|
736
|
+
|
737
|
+
<li>
|
738
|
+
<span class="name">validated_by</span>
|
739
|
+
<span class="type">(<tt>Proc</tt>)</span>
|
740
|
+
<span class="default">
|
679
741
|
|
680
742
|
</span>
|
681
743
|
|
744
|
+
— <div class='inline'>
|
745
|
+
<p>See <code>.parse</code>.</p>
|
746
|
+
</div>
|
747
|
+
|
682
748
|
</li>
|
683
749
|
|
684
750
|
</ul>
|
685
751
|
|
686
752
|
|
753
|
+
<p class="tag_title">Yields:</p>
|
754
|
+
<ul class="yield">
|
755
|
+
|
756
|
+
<li>
|
757
|
+
|
758
|
+
|
759
|
+
<span class='type'>(<tt>value</tt>)</span>
|
760
|
+
|
761
|
+
|
762
|
+
|
763
|
+
—
|
764
|
+
<div class='inline'>
|
765
|
+
<p>A block (if given) is treated exactly as in <code>.parse</code>. Note,
|
766
|
+
however, that a single yield block cannot be used to register multiple
|
767
|
+
constants simultaneously – each value needing validation must give its own
|
768
|
+
“validated_by” proc.</p>
|
769
|
+
</div>
|
770
|
+
|
771
|
+
</li>
|
772
|
+
|
773
|
+
</ul>
|
687
774
|
<p class="tag_title">Raises:</p>
|
688
775
|
<ul class="raise">
|
689
776
|
|
@@ -704,45 +791,51 @@ Kernel (making it a global constant).</p>
|
|
704
791
|
<pre class="lines">
|
705
792
|
|
706
793
|
|
707
|
-
119
|
708
|
-
120
|
709
|
-
121
|
710
|
-
122
|
711
|
-
123
|
712
|
-
124
|
713
|
-
125
|
714
|
-
126
|
715
|
-
127
|
716
|
-
128
|
717
|
-
129
|
718
|
-
130
|
719
|
-
131
|
720
|
-
132
|
721
|
-
133
|
722
|
-
134
|
723
|
-
135
|
724
|
-
136
|
725
|
-
137
|
726
|
-
138
|
727
|
-
139
|
728
|
-
140
|
729
|
-
141
|
730
|
-
142
|
731
|
-
143
|
732
|
-
144
|
733
|
-
145
|
734
794
|
146
|
735
795
|
147
|
736
796
|
148
|
737
|
-
149
|
797
|
+
149
|
798
|
+
150
|
799
|
+
151
|
800
|
+
152
|
801
|
+
153
|
802
|
+
154
|
803
|
+
155
|
804
|
+
156
|
805
|
+
157
|
806
|
+
158
|
807
|
+
159
|
808
|
+
160
|
809
|
+
161
|
810
|
+
162
|
811
|
+
163
|
812
|
+
164
|
813
|
+
165
|
814
|
+
166
|
815
|
+
167
|
816
|
+
168
|
817
|
+
169
|
818
|
+
170
|
819
|
+
171
|
820
|
+
172
|
821
|
+
173
|
822
|
+
174
|
823
|
+
175
|
824
|
+
176
|
825
|
+
177
|
826
|
+
178
|
827
|
+
179</pre>
|
738
828
|
</td>
|
739
829
|
<td>
|
740
|
-
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line
|
830
|
+
<pre class="code"><span class="info file"># File 'lib/env_parser.rb', line 146</span>
|
741
831
|
|
742
|
-
<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>
|
832
|
+
<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='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_validation_block'>validation_block</span><span class='rparen'>)</span>
|
743
833
|
<span class='comment'>## We want to allow for registering multiple variables simultaneously via a single `.register`
|
744
834
|
</span> <span class='comment'>## method call.
|
745
|
-
</span> <span class='kw'>
|
835
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Hash</span>
|
836
|
+
<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'>cannot register multiple values with one yield block</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
|
837
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_register_all'>register_all</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
838
|
+
<span class='kw'>end</span>
|
746
839
|
|
747
840
|
<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>
|
748
841
|
<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>
|
@@ -765,7 +858,7 @@ Kernel (making it a global constant).</p>
|
|
765
858
|
<span class='kw'>end</span>
|
766
859
|
|
767
860
|
<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>
|
768
|
-
<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>
|
861
|
+
<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='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_validation_block'>validation_block</span><span class='rparen'>)</span>
|
769
862
|
<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>
|
770
863
|
|
771
864
|
<span class='id identifier rubyid_value'>value</span>
|
@@ -780,7 +873,7 @@ Kernel (making it a global constant).</p>
|
|
780
873
|
</div>
|
781
874
|
|
782
875
|
<div id="footer">
|
783
|
-
Generated on
|
876
|
+
Generated on Mon Dec 11 23:37:25 2017 by
|
784
877
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
785
878
|
0.9.11 (ruby-2.4.2).
|
786
879
|
</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 Mon Dec 11 23:37:25 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
@@ -58,23 +58,22 @@
|
|
58
58
|
</div>
|
59
59
|
|
60
60
|
<div id="content"><div id='filecontents'>
|
61
|
-
<h1 id="label-EnvParser">EnvParser
|
61
|
+
<h1 id="label-EnvParser+rdoc-image-3Ahttps-3A-2F-2Fbadge.fury.io-2Frb-2Fenv_parser.svg">EnvParser <a href="https://badge.fury.io/rb/env_parser"><img src="https://badge.fury.io/rb/env_parser.svg"></a></h1>
|
62
62
|
|
63
63
|
<p>If your code uses environment variables, you know that <code>ENV</code>
|
64
64
|
will always surface these as strings. Interpreting these strings as the
|
65
|
-
value you <em>actually</em> want to see/use takes some
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<code
|
70
|
-
|
71
|
-
Maybe you want to set non-trivial defaults (something other than
|
72
|
-
<code>0</code> or <code>''</code>)? Maybe you only want to allow
|
73
|
-
values from a limited set.</p>
|
65
|
+
value you <em>actually</em> want to see/use takes some work, however: for
|
66
|
+
numbers you need to cast with <code>#to_i</code>/<code>#to_f</code>, for
|
67
|
+
booleans you need to check for a specific value (<code>ENV['SOME_VAR'] ==
|
68
|
+
'true'</code>), etc. Maybe you want to set non-trivial defaults
|
69
|
+
(something other than <code>0</code> or <code>''</code>)? Maybe you
|
70
|
+
only want to allow values from a limited set? …</p>
|
74
71
|
|
75
72
|
<p>Things can get out of control pretty fast, especially as the number of
|
76
|
-
environment variables in play grows.
|
77
|
-
|
73
|
+
environment variables in play grows. Tools like <a
|
74
|
+
href="https://github.com/bkeepers/dotenv">dotenv</a> help to make sure
|
75
|
+
you're loading the correct set of <em>variables</em>, but EnvParser
|
76
|
+
makes <em>the values themselves</em> usable with a minimum of effort.</p>
|
78
77
|
|
79
78
|
<h2 id="label-Installation">Installation</h2>
|
80
79
|
|
@@ -181,7 +180,16 @@ simple.</p>
|
|
181
180
|
<span class='comment'>## And if the value is not allowed...
|
182
181
|
</span><span class='comment'>##
|
183
182
|
</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
|
-
</span
|
183
|
+
</span>
|
184
|
+
|
185
|
+
<span class='comment'>## The "validated_by" option allows for more complex validation.
|
186
|
+
</span><span class='comment'>##
|
187
|
+
</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'>:MUST_BE_LOWERCASE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='comma'>,</span> <span class='label'>validated_by:</span> <span class='tlambda'>-></span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='rbrace'>}</span>
|
188
|
+
|
189
|
+
<span class='comment'>## ... but a block will also do the trick!
|
190
|
+
</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='lparen'>(</span><span class='symbol'>:MUST_BE_LOWERCASE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='rbrace'>}</span>
|
191
|
+
<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='lparen'>(</span><span class='symbol'>:CONNECTION_RETRIES</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='op'>&</span><span class='symbol'>:nonzero?</span><span class='rparen'>)</span>
|
192
|
+
</code></pre>
|
185
193
|
|
186
194
|
<h4 id="label-Setting+Constants+From+ENV+Values">Setting Constants From ENV Values</h4>
|
187
195
|
|
@@ -235,12 +243,13 @@ docs</a> for the full EnvParser documentation.</p>
|
|
235
243
|
|
236
244
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
237
245
|
|
238
|
-
<p>Additional features/options coming in the future
|
239
|
-
<
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
<
|
246
|
+
<p>Additional features/options coming in the future:</p>
|
247
|
+
<ul><li>
|
248
|
+
<p>A means to register validation blocks as new “as” types. This will allow
|
249
|
+
for custom “as” types like <code>:url</code>, <code>:email</code>, etc.</p>
|
250
|
+
</li><li>
|
251
|
+
<p>… ?</p>
|
252
|
+
</li></ul>
|
244
253
|
|
245
254
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
246
255
|
|
@@ -271,7 +280,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
271
280
|
</div></div>
|
272
281
|
|
273
282
|
<div id="footer">
|
274
|
-
Generated on
|
283
|
+
Generated on Mon Dec 11 23:37:25 2017 by
|
275
284
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
276
285
|
0.9.11 (ruby-2.4.2).
|
277
286
|
</div>
|
data/docs/index.html
CHANGED
@@ -58,23 +58,22 @@
|
|
58
58
|
</div>
|
59
59
|
|
60
60
|
<div id="content"><div id='filecontents'>
|
61
|
-
<h1 id="label-EnvParser">EnvParser
|
61
|
+
<h1 id="label-EnvParser+rdoc-image-3Ahttps-3A-2F-2Fbadge.fury.io-2Frb-2Fenv_parser.svg">EnvParser <a href="https://badge.fury.io/rb/env_parser"><img src="https://badge.fury.io/rb/env_parser.svg"></a></h1>
|
62
62
|
|
63
63
|
<p>If your code uses environment variables, you know that <code>ENV</code>
|
64
64
|
will always surface these as strings. Interpreting these strings as the
|
65
|
-
value you <em>actually</em> want to see/use takes some
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<code
|
70
|
-
|
71
|
-
Maybe you want to set non-trivial defaults (something other than
|
72
|
-
<code>0</code> or <code>''</code>)? Maybe you only want to allow
|
73
|
-
values from a limited set.</p>
|
65
|
+
value you <em>actually</em> want to see/use takes some work, however: for
|
66
|
+
numbers you need to cast with <code>#to_i</code>/<code>#to_f</code>, for
|
67
|
+
booleans you need to check for a specific value (<code>ENV['SOME_VAR'] ==
|
68
|
+
'true'</code>), etc. Maybe you want to set non-trivial defaults
|
69
|
+
(something other than <code>0</code> or <code>''</code>)? Maybe you
|
70
|
+
only want to allow values from a limited set? …</p>
|
74
71
|
|
75
72
|
<p>Things can get out of control pretty fast, especially as the number of
|
76
|
-
environment variables in play grows.
|
77
|
-
|
73
|
+
environment variables in play grows. Tools like <a
|
74
|
+
href="https://github.com/bkeepers/dotenv">dotenv</a> help to make sure
|
75
|
+
you're loading the correct set of <em>variables</em>, but EnvParser
|
76
|
+
makes <em>the values themselves</em> usable with a minimum of effort.</p>
|
78
77
|
|
79
78
|
<h2 id="label-Installation">Installation</h2>
|
80
79
|
|
@@ -181,7 +180,16 @@ simple.</p>
|
|
181
180
|
<span class='comment'>## And if the value is not allowed...
|
182
181
|
</span><span class='comment'>##
|
183
182
|
</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
|
-
</span
|
183
|
+
</span>
|
184
|
+
|
185
|
+
<span class='comment'>## The "validated_by" option allows for more complex validation.
|
186
|
+
</span><span class='comment'>##
|
187
|
+
</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'>:MUST_BE_LOWERCASE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='comma'>,</span> <span class='label'>validated_by:</span> <span class='tlambda'>-></span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='rbrace'>}</span>
|
188
|
+
|
189
|
+
<span class='comment'>## ... but a block will also do the trick!
|
190
|
+
</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='lparen'>(</span><span class='symbol'>:MUST_BE_LOWERCASE</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:string</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='rbrace'>}</span>
|
191
|
+
<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='lparen'>(</span><span class='symbol'>:CONNECTION_RETRIES</span><span class='comma'>,</span> <span class='label'>as:</span> <span class='symbol'>:integer</span><span class='comma'>,</span> <span class='op'>&</span><span class='symbol'>:nonzero?</span><span class='rparen'>)</span>
|
192
|
+
</code></pre>
|
185
193
|
|
186
194
|
<h4 id="label-Setting+Constants+From+ENV+Values">Setting Constants From ENV Values</h4>
|
187
195
|
|
@@ -235,12 +243,13 @@ docs</a> for the full EnvParser documentation.</p>
|
|
235
243
|
|
236
244
|
<h2 id="label-Feature+Roadmap+-2F+Future+Development">Feature Roadmap / Future Development</h2>
|
237
245
|
|
238
|
-
<p>Additional features/options coming in the future
|
239
|
-
<
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
<
|
246
|
+
<p>Additional features/options coming in the future:</p>
|
247
|
+
<ul><li>
|
248
|
+
<p>A means to register validation blocks as new “as” types. This will allow
|
249
|
+
for custom “as” types like <code>:url</code>, <code>:email</code>, etc.</p>
|
250
|
+
</li><li>
|
251
|
+
<p>… ?</p>
|
252
|
+
</li></ul>
|
244
253
|
|
245
254
|
<h2 id="label-Contribution+-2F+Development">Contribution / Development</h2>
|
246
255
|
|
@@ -271,7 +280,7 @@ href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
271
280
|
</div></div>
|
272
281
|
|
273
282
|
<div id="footer">
|
274
|
-
Generated on
|
283
|
+
Generated on Mon Dec 11 23:37:25 2017 by
|
275
284
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
276
285
|
0.9.11 (ruby-2.4.2).
|
277
286
|
</div>
|
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Mon Dec 11 23:37:25 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
@@ -50,9 +50,26 @@ class EnvParser
|
|
50
50
|
## for scalar values (i.e. not arrays, hashes, or other enumerables). An attempt to use the
|
51
51
|
## "from_set" option with a non-scalar value will raise an ArgumentError exception.
|
52
52
|
##
|
53
|
+
## @option options validated_by [Proc]
|
54
|
+
## If given, the "validated_by" proc is called with the parsed value (after type conversion)
|
55
|
+
## as its sole argument. This allows for user-defined validation of the parsed value beyond
|
56
|
+
## what can be enforced by use of the "from_set" option alone. If the proc's return value is
|
57
|
+
## `#blank?`, an EnvParser::ValueNotAllowed exception is raised. To accomodate your syntax of
|
58
|
+
## choice, this validation proc may be given as a yield block instead.
|
59
|
+
##
|
60
|
+
## Note that this option is intended to provide an inspection mechanism only -- no mutation
|
61
|
+
## of the parsed value should occur within the given proc. To that end, the argument passed is
|
62
|
+
## a *frozen* duplicate of the parsed value.
|
63
|
+
##
|
64
|
+
## @yield [value]
|
65
|
+
## A block (if given) is treated exactly as the "validated_by" Proc would. Although there is
|
66
|
+
## no compelling reason to provide both a "validated_by" proc *and* a validation block, there
|
67
|
+
## is no technical limitation preventing this. **If both are given, both validation checks
|
68
|
+
## must pass.**
|
69
|
+
##
|
53
70
|
## @raise [ArgumentError, EnvParser::ValueNotAllowed]
|
54
71
|
##
|
55
|
-
def parse(value, options = {})
|
72
|
+
def parse(value, options = {}, &validation_block)
|
56
73
|
value = ENV[value.to_s] if value.is_a? Symbol
|
57
74
|
value = value.to_s
|
58
75
|
|
@@ -71,6 +88,8 @@ class EnvParser
|
|
71
88
|
end
|
72
89
|
|
73
90
|
check_for_set_inclusion(value, set: options[:from_set]) if options.key?(:from_set)
|
91
|
+
check_user_defined_validations(value, proc: options[:validated_by], block: validation_block)
|
92
|
+
|
74
93
|
value
|
75
94
|
end
|
76
95
|
|
@@ -106,20 +125,31 @@ class EnvParser
|
|
106
125
|
## a global constant).
|
107
126
|
##
|
108
127
|
## @option options as [Symbol]
|
109
|
-
##
|
128
|
+
## See `.parse`.
|
110
129
|
##
|
111
130
|
## @option options if_unset
|
112
|
-
##
|
131
|
+
## See `.parse`.
|
113
132
|
##
|
114
133
|
## @option options from_set [Array, Range]
|
115
|
-
##
|
134
|
+
## See `.parse`.
|
135
|
+
##
|
136
|
+
## @option options validated_by [Proc]
|
137
|
+
## See `.parse`.
|
138
|
+
##
|
139
|
+
## @yield [value]
|
140
|
+
## A block (if given) is treated exactly as in `.parse`. Note, however, that a single yield
|
141
|
+
## block cannot be used to register multiple constants simultaneously -- each value needing
|
142
|
+
## validation must give its own "validated_by" proc.
|
116
143
|
##
|
117
144
|
## @raise [ArgumentError]
|
118
145
|
##
|
119
|
-
def register(name, options = {})
|
146
|
+
def register(name, options = {}, &validation_block)
|
120
147
|
## We want to allow for registering multiple variables simultaneously via a single `.register`
|
121
148
|
## method call.
|
122
|
-
|
149
|
+
if name.is_a? Hash
|
150
|
+
raise ArgumentError, 'cannot register multiple values with one yield block' if block_given?
|
151
|
+
return register_all(name)
|
152
|
+
end
|
123
153
|
|
124
154
|
from = options.fetch(:from, ENV)
|
125
155
|
within = options.fetch(:within, Kernel)
|
@@ -142,7 +172,7 @@ class EnvParser
|
|
142
172
|
end
|
143
173
|
|
144
174
|
value = from[name]
|
145
|
-
value = parse(value, options)
|
175
|
+
value = parse(value, options, &validation_block)
|
146
176
|
within.const_set(name.upcase.to_sym, value.dup.freeze)
|
147
177
|
|
148
178
|
value
|
@@ -159,8 +189,8 @@ class EnvParser
|
|
159
189
|
##
|
160
190
|
def add_env_bindings
|
161
191
|
ENV.instance_eval do
|
162
|
-
def parse(name, options = {})
|
163
|
-
EnvParser.parse(self[name.to_s], options)
|
192
|
+
def parse(name, options = {}, &validation_block)
|
193
|
+
EnvParser.parse(self[name.to_s], options, &validation_block)
|
164
194
|
end
|
165
195
|
|
166
196
|
def register(*args)
|
@@ -226,7 +256,6 @@ class EnvParser
|
|
226
256
|
## Verifies that the given "value" is included in the "set".
|
227
257
|
##
|
228
258
|
## @param value
|
229
|
-
##
|
230
259
|
## @param set [Array, Range]
|
231
260
|
##
|
232
261
|
## @return [nil]
|
@@ -248,6 +277,25 @@ class EnvParser
|
|
248
277
|
nil
|
249
278
|
end
|
250
279
|
|
280
|
+
## Verifies that the given "value" passes both the "proc" and "block" validations.
|
281
|
+
##
|
282
|
+
## @param value
|
283
|
+
## @param proc [Proc, nil]
|
284
|
+
## @param block [Proc, nil]
|
285
|
+
##
|
286
|
+
## @return [nil]
|
287
|
+
## This generates no usable value.
|
288
|
+
##
|
289
|
+
## @raise [EnvParser::ValueNotAllowed]
|
290
|
+
##
|
291
|
+
def check_user_defined_validations(value, proc: nil, block: nil)
|
292
|
+
immutable_value = value.dup.freeze
|
293
|
+
error = 'parsed value failed user validation'
|
294
|
+
raise ValueNotAllowed, error unless [proc, block].compact.all? { |i| i.call(immutable_value) }
|
295
|
+
|
296
|
+
nil
|
297
|
+
end
|
298
|
+
|
251
299
|
## Receives a list of "register" calls to make, as a Hash keyed with variable names and the
|
252
300
|
## values being each "register" call's option set.
|
253
301
|
##
|
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.7.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-12-
|
11
|
+
date: 2017-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|