env_bang 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -1
- data/lib/env_bang.rb +3 -0
- data/lib/env_bang/classes.rb +21 -3
- data/lib/env_bang/version.rb +1 -1
- data/test/env_bang_test.rb +44 -2
- 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: 40326b30460e728e3e5da019de6cfc93ae84b32c
|
4
|
+
data.tar.gz: 3be97c644bcad37d63d69ec8314cef353596f1a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c43cd17a437cc0b8e6b2ecdc666cd19a9d5f989ba9dad8c51792ca50a9f6ade297df55761f50de2d47581d7b0b94f50afe21921934d5ceca4df759ff54027ad
|
7
|
+
data.tar.gz: 5ce51c4a23064f9402672d56ef018ba2e10a056d972ff07830651ef6b2f976457390147fdbc11520ff55bf627811164bae37d92a285318499d401b1b68dcc275
|
data/.travis.yml
CHANGED
data/lib/env_bang.rb
CHANGED
data/lib/env_bang/classes.rb
CHANGED
@@ -23,10 +23,13 @@ class ENV_BANG
|
|
23
23
|
def Hash(value, options)
|
24
24
|
key_options = options.merge(class: options.fetch(:keys, Symbol))
|
25
25
|
value_options = options.merge(class: options.fetch(:of, default_class))
|
26
|
+
sep = options.fetch(:sep, ',')
|
27
|
+
val_sep = options.fetch(:val_sep, ':')
|
28
|
+
|
26
29
|
{}.tap do |h|
|
27
|
-
value.split(
|
28
|
-
key, value = pair.split(
|
29
|
-
h[cast(key.strip, key_options)] = cast(value.strip, value_options)
|
30
|
+
value.split(sep).each do |pair|
|
31
|
+
key, value = pair.split(val_sep, 2)
|
32
|
+
h[cast(key.to_s.strip, key_options)] = cast(value.to_s.strip, value_options)
|
30
33
|
end
|
31
34
|
end
|
32
35
|
end
|
@@ -66,6 +69,21 @@ class ENV_BANG
|
|
66
69
|
def URI(value, options)
|
67
70
|
Kernel.URI(value)
|
68
71
|
end
|
72
|
+
|
73
|
+
def Date(value, options)
|
74
|
+
require 'date'
|
75
|
+
Date.parse(value)
|
76
|
+
end
|
77
|
+
|
78
|
+
def DateTime(value, options)
|
79
|
+
require 'date'
|
80
|
+
DateTime.parse(value)
|
81
|
+
end
|
82
|
+
|
83
|
+
def Time(value, options)
|
84
|
+
require 'time'
|
85
|
+
Time.parse(value)
|
86
|
+
end
|
69
87
|
end
|
70
88
|
end
|
71
89
|
end
|
data/lib/env_bang/version.rb
CHANGED
data/test/env_bang_test.rb
CHANGED
@@ -21,6 +21,17 @@ describe ENV_BANG do
|
|
21
21
|
}.must_raise KeyError
|
22
22
|
end
|
23
23
|
|
24
|
+
it "Raises exception immediately if value is invalid for the required type" do
|
25
|
+
proc {
|
26
|
+
ENV['NOT_A_DATE'] = '2017-02-30'
|
27
|
+
ENV!.use 'NOT_A_DATE', class: Date
|
28
|
+
}.must_raise ArgumentError
|
29
|
+
|
30
|
+
proc {
|
31
|
+
ENV!.use 'NOT_A_DATE_DEFAULT', class: Date, default: '2017-02-31'
|
32
|
+
}.must_raise ArgumentError
|
33
|
+
end
|
34
|
+
|
24
35
|
it "Uses provided default value if ENV var not already present" do
|
25
36
|
ENV.delete('WASNT_PRESENT')
|
26
37
|
|
@@ -100,10 +111,10 @@ describe ENV_BANG do
|
|
100
111
|
end
|
101
112
|
|
102
113
|
it "Casts Hashes" do
|
103
|
-
ENV['HASH'] = 'one: two, three: four'
|
114
|
+
ENV['HASH'] = 'one: two, three: http://four.com'
|
104
115
|
ENV!.use 'HASH', class: Hash
|
105
116
|
|
106
|
-
ENV!['HASH'].must_equal({one: 'two', three: 'four'})
|
117
|
+
ENV!['HASH'].must_equal({one: 'two', three: 'http://four.com'})
|
107
118
|
end
|
108
119
|
|
109
120
|
it 'Casts Hashes of Integers' do
|
@@ -120,6 +131,13 @@ describe ENV_BANG do
|
|
120
131
|
ENV!['STRKEY_HASH'].must_equal({'one' => 'two', 'three' => 'four'})
|
121
132
|
end
|
122
133
|
|
134
|
+
it 'Casts Hashes with alternate separators' do
|
135
|
+
ENV['ALT_HASH'] = 'one:two = three; four,five=six'
|
136
|
+
ENV!.use 'ALT_HASH', class: Hash, sep: ';', val_sep: '='
|
137
|
+
|
138
|
+
ENV!['ALT_HASH'].must_equal({:'one:two' => 'three', :'four,five' => 'six'})
|
139
|
+
end
|
140
|
+
|
123
141
|
it "Casts true" do
|
124
142
|
ENV['TRUE'] = truthy_values.sample
|
125
143
|
ENV!.use 'TRUE', class: :boolean
|
@@ -148,6 +166,30 @@ describe ENV_BANG do
|
|
148
166
|
ENV!['FALSE'].class.must_equal String
|
149
167
|
end
|
150
168
|
|
169
|
+
it "casts Dates" do
|
170
|
+
ENV['A_DATE'] = '2005-05-05'
|
171
|
+
ENV!.use 'A_DATE', class: Date
|
172
|
+
|
173
|
+
ENV!['A_DATE'].class.must_equal Date
|
174
|
+
ENV!['A_DATE'].must_equal Date.new(2005, 5, 5)
|
175
|
+
end
|
176
|
+
|
177
|
+
it "casts DateTimes" do
|
178
|
+
ENV['A_DATETIME'] = '2005-05-05 5:05pm'
|
179
|
+
ENV!.use 'A_DATETIME', class: DateTime
|
180
|
+
|
181
|
+
ENV!['A_DATETIME'].class.must_equal DateTime
|
182
|
+
ENV!['A_DATETIME'].must_equal DateTime.new(2005, 5, 5, 17, 5)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "casts Times" do
|
186
|
+
ENV['A_TIME'] = '2005-05-05 5:05pm'
|
187
|
+
ENV!.use 'A_TIME', class: Time
|
188
|
+
|
189
|
+
ENV!['A_TIME'].class.must_equal Time
|
190
|
+
ENV!['A_TIME'].must_equal Time.new(2005, 5, 5, 17, 5)
|
191
|
+
end
|
192
|
+
|
151
193
|
it "allows default class to be overridden" do
|
152
194
|
ENV!.default_class.must_equal :StringUnlessFalsey
|
153
195
|
ENV!.config { default_class String }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: env_bang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Camenisch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|