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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b42325fe65dd1f25327d31375eef610c15ff1c31
4
- data.tar.gz: bfbfb4e949f607e562cdd0128ea5058bb0729edb
3
+ metadata.gz: 40326b30460e728e3e5da019de6cfc93ae84b32c
4
+ data.tar.gz: 3be97c644bcad37d63d69ec8314cef353596f1a2
5
5
  SHA512:
6
- metadata.gz: b1c29a0e1109565143174fb540f536a628c4e24151ba562ac83e659b85e0aaa10c59a3c17a51f2bb7edb160d8b905249513f2f30c5c3447e442a1c723e6792c7
7
- data.tar.gz: b2f70f65708e68570e6a0eb9b7af2b06110b364b863c7d41325325a8ab3b3d187ba45df75252e40eb7b4ca4b7a11fe095e4f12592fa4402bc01e9c230855190d
6
+ metadata.gz: 2c43cd17a437cc0b8e6b2ecdc666cd19a9d5f989ba9dad8c51792ca50a9f6ade297df55761f50de2d47581d7b0b94f50afe21921934d5ceca4df759ff54027ad
7
+ data.tar.gz: 5ce51c4a23064f9402672d56ef018ba2e10a056d972ff07830651ef6b2f976457390147fdbc11520ff55bf627811164bae37d92a285318499d401b1b68dcc275
@@ -1,4 +1,14 @@
1
1
  language: ruby
2
+ dist: trusty
3
+
2
4
  rvm:
3
5
  - 2.0.0
4
- - 2.3.0
6
+ - 2.3.3
7
+ - 2.4.0
8
+ - ruby-head
9
+ - rbx-3.69
10
+
11
+ matrix:
12
+ fast_finish: true
13
+ allow_failures:
14
+ - rvm: rbx-3.69
@@ -18,6 +18,9 @@ class ENV_BANG
18
18
  end
19
19
 
20
20
  vars[var] = options
21
+
22
+ # Make sure reading/coercing the value works. If it's going to raise an error, raise it now.
23
+ self[var]
21
24
  end
22
25
 
23
26
  def raise_formatted_error(var, description)
@@ -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(',').each do |pair|
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
@@ -1,3 +1,3 @@
1
1
  class ENV_BANG
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -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.0
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-06 00:00:00.000000000 Z
11
+ date: 2017-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake