yaml2env 0.1.2 → 0.2.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.
- data/.gitignore +6 -1
- data/.travis.yml +0 -1
- data/Gemfile +3 -1
- data/README.textile +144 -21
- data/Rakefile +1 -2
- data/TODO +13 -0
- data/lib/yaml2env/version.rb +1 -1
- data/lib/yaml2env.rb +246 -12
- data/spec/fixtures/example2.yml +19 -0
- data/spec/spec_helper.rb +49 -4
- data/spec/yaml2env_spec.rb +668 -55
- data/yaml2env.gemspec +8 -8
- metadata +97 -74
data/spec/yaml2env_spec.rb
CHANGED
@@ -73,7 +73,52 @@ describe Yaml2env do
|
|
73
73
|
|
74
74
|
it 'should be writable' do
|
75
75
|
Yaml2env.root = "/tmp"
|
76
|
-
Yaml2env.root.must_equal "/tmp"
|
76
|
+
Yaml2env.root.to_s.must_equal "/tmp"
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should be Pathname - respond to #join - if present' do
|
80
|
+
Yaml2env.root = nil
|
81
|
+
Yaml2env.root.must_be_kind_of NilClass
|
82
|
+
Yaml2env.root.wont_respond_to :join
|
83
|
+
|
84
|
+
Yaml2env.root = ""
|
85
|
+
Yaml2env.root.must_be_kind_of String
|
86
|
+
Yaml2env.root.wont_respond_to :join
|
87
|
+
|
88
|
+
Yaml2env.root = "/tmp"
|
89
|
+
Yaml2env.root.must_be_kind_of Pathname
|
90
|
+
Yaml2env.root.must_respond_to :join
|
91
|
+
Yaml2env.root.join('ponies').to_s.must_equal "/tmp/ponies"
|
92
|
+
end
|
93
|
+
|
94
|
+
# TODO: Need to alter other specs to get this work well - later.
|
95
|
+
# it 'should not accept non-existing path - makes no sense' do
|
96
|
+
# lambda { Yaml2env.root = "/tmp/i_dont_exist" }.must_raise Yaml2env::InvalidRootError
|
97
|
+
# end
|
98
|
+
|
99
|
+
it 'should expand path automatically' do
|
100
|
+
Yaml2env.root = "/tmp/path/../path/.."
|
101
|
+
Yaml2env.root.to_s.must_equal "/tmp"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe ".root?" do
|
106
|
+
it 'should be defined' do
|
107
|
+
Yaml2env.must_respond_to :root?
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should return true if root is present, otherwise false' do
|
111
|
+
Yaml2env.root = nil
|
112
|
+
Yaml2env.root?.must_equal false
|
113
|
+
|
114
|
+
Yaml2env.root = ""
|
115
|
+
Yaml2env.root?.must_equal false
|
116
|
+
|
117
|
+
Yaml2env.root = "/"
|
118
|
+
Yaml2env.root?.must_equal true
|
119
|
+
|
120
|
+
Yaml2env.root = "/path/to/project"
|
121
|
+
Yaml2env.root?.must_equal true
|
77
122
|
end
|
78
123
|
end
|
79
124
|
|
@@ -84,7 +129,177 @@ describe Yaml2env do
|
|
84
129
|
|
85
130
|
it 'should be writable' do
|
86
131
|
Yaml2env.root = "/tmp"
|
87
|
-
Yaml2env.root.must_equal "/tmp"
|
132
|
+
Yaml2env.root.to_s.must_equal "/tmp"
|
133
|
+
end
|
134
|
+
|
135
|
+
# FIXME: See TODO.
|
136
|
+
it "should respond true/false for matching environment via method missing (a.k.a. string inquiry)" do
|
137
|
+
skip
|
138
|
+
|
139
|
+
Yaml2env.env.must_respond_to :development?
|
140
|
+
Yaml2env.env.must_respond_to :staging?
|
141
|
+
Yaml2env.env.must_respond_to :production?
|
142
|
+
Yaml2env.env.must_respond_to :bogus?
|
143
|
+
|
144
|
+
Yaml2env.env = nil
|
145
|
+
Yaml2env.env.development?.must_equal false
|
146
|
+
|
147
|
+
Yaml2env.env = ""
|
148
|
+
Yaml2env.env.development?.must_equal false
|
149
|
+
|
150
|
+
Yaml2env.env = "development"
|
151
|
+
Yaml2env.env.development?.must_equal true
|
152
|
+
Yaml2env.env.bogus?.must_equal false
|
153
|
+
|
154
|
+
Yaml2env.env = "staging"
|
155
|
+
Yaml2env.env.development?.must_equal false
|
156
|
+
|
157
|
+
Yaml2env.env = "production"
|
158
|
+
Yaml2env.env.production?.must_equal true
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe ".env?" do
|
163
|
+
it 'should be defined' do
|
164
|
+
Yaml2env.must_respond_to :env?
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "with no arguments" do
|
168
|
+
it 'should return true if env is present, otherwise false' do
|
169
|
+
Yaml2env.env = nil
|
170
|
+
Yaml2env.env?.must_equal false
|
171
|
+
|
172
|
+
Yaml2env.env = ""
|
173
|
+
Yaml2env.env?.must_equal false
|
174
|
+
|
175
|
+
Yaml2env.env = "development"
|
176
|
+
Yaml2env.env?.must_equal true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe "with one argument" do
|
181
|
+
# Stupid spec, but for the record...
|
182
|
+
it 'nil/blank: should return true if env equals, otherwise false' do
|
183
|
+
Yaml2env.env = nil
|
184
|
+
Yaml2env.env?(nil).must_equal true
|
185
|
+
Yaml2env.env?("").must_equal true
|
186
|
+
|
187
|
+
Yaml2env.env = ""
|
188
|
+
Yaml2env.env?(nil).must_equal true
|
189
|
+
Yaml2env.env?("").must_equal true
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'string: should return true if env equals, otherwise false' do
|
193
|
+
Yaml2env.env = nil
|
194
|
+
Yaml2env.env?("development").must_equal false
|
195
|
+
|
196
|
+
Yaml2env.env = ""
|
197
|
+
Yaml2env.env?("development").must_equal false
|
198
|
+
|
199
|
+
Yaml2env.env = "development"
|
200
|
+
Yaml2env.env?("development").must_equal true
|
201
|
+
|
202
|
+
Yaml2env.env = "staging"
|
203
|
+
Yaml2env.env?("development").must_equal false
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'regexp: should return true if env matches, otherwise false' do
|
207
|
+
Yaml2env.env = nil
|
208
|
+
Yaml2env.env?(/development|staging/).must_equal false
|
209
|
+
|
210
|
+
Yaml2env.env = ""
|
211
|
+
Yaml2env.env?(/development|staging/).must_equal false
|
212
|
+
|
213
|
+
Yaml2env.env = "development"
|
214
|
+
Yaml2env.env?(/development|staging/).must_equal true
|
215
|
+
|
216
|
+
Yaml2env.env = "staging"
|
217
|
+
Yaml2env.env?(/development|staging/).must_equal true
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
describe "with one argument" do
|
222
|
+
# *<:)
|
223
|
+
it 'nils/blanks: should return true if env equals, otherwise false' do
|
224
|
+
Yaml2env.env = nil
|
225
|
+
lambda { Yaml2env.env?(nil, nil) }.must_raise Yaml2env::HumanError
|
226
|
+
lambda { Yaml2env.env?(nil, "") }.must_raise Yaml2env::HumanError
|
227
|
+
lambda { Yaml2env.env?("", "") }.must_raise Yaml2env::HumanError
|
228
|
+
|
229
|
+
Yaml2env.env = ""
|
230
|
+
lambda { Yaml2env.env?(nil, nil) }.must_raise Yaml2env::HumanError
|
231
|
+
lambda { Yaml2env.env?(nil, "") }.must_raise Yaml2env::HumanError
|
232
|
+
lambda { Yaml2env.env?("", "") }.must_raise Yaml2env::HumanError
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'strings: should return true if env equals, otherwise false' do
|
236
|
+
Yaml2env.env = nil
|
237
|
+
Yaml2env.env?("development", "staging").must_equal false
|
238
|
+
|
239
|
+
Yaml2env.env = ""
|
240
|
+
Yaml2env.env?("development", "staging").must_equal false
|
241
|
+
|
242
|
+
Yaml2env.env = "development"
|
243
|
+
Yaml2env.env?("development", "staging").must_equal true
|
244
|
+
|
245
|
+
Yaml2env.env = "staging"
|
246
|
+
Yaml2env.env?("development", "staging").must_equal true
|
247
|
+
|
248
|
+
Yaml2env.env = "production"
|
249
|
+
Yaml2env.env?("development", "staging").must_equal false
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'regexpes: should return true if env matches, otherwise false' do
|
253
|
+
Yaml2env.env = nil
|
254
|
+
Yaml2env.env?(/development|staging/).must_equal false
|
255
|
+
|
256
|
+
Yaml2env.env = ""
|
257
|
+
Yaml2env.env?(/development|staging/).must_equal false
|
258
|
+
|
259
|
+
Yaml2env.env = "development"
|
260
|
+
Yaml2env.env?(/development|staging/).must_equal true
|
261
|
+
|
262
|
+
Yaml2env.env = "staging"
|
263
|
+
Yaml2env.env?(/development|staging/).must_equal true
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe ".default_env" do
|
269
|
+
it 'should be defined' do
|
270
|
+
Yaml2env.must_respond_to :default_env
|
271
|
+
end
|
272
|
+
|
273
|
+
it 'should be default value for Yaml2env.env if no value is set' do
|
274
|
+
with_constants :ENV => {'RACK_ENV' => nil} do
|
275
|
+
Yaml2env.default_env = 'development'
|
276
|
+
Yaml2env.env = nil
|
277
|
+
Yaml2env.detect_env!
|
278
|
+
Yaml2env.env.must_equal 'development'
|
279
|
+
|
280
|
+
Yaml2env.default_env = 'development'
|
281
|
+
Yaml2env.env = 'staging'
|
282
|
+
Yaml2env.detect_env!
|
283
|
+
Yaml2env.env.must_equal 'staging'
|
284
|
+
|
285
|
+
Yaml2env.default_env = nil
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
describe ".default_env?" do
|
291
|
+
it 'should be defined' do
|
292
|
+
Yaml2env.must_respond_to :default_env?
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'should be true only if specified env equals default_env' do
|
296
|
+
Yaml2env.default_env = 'development'
|
297
|
+
|
298
|
+
Yaml2env.env = 'development'
|
299
|
+
Yaml2env.default_env?.must_equal true
|
300
|
+
|
301
|
+
Yaml2env.env = 'staging'
|
302
|
+
Yaml2env.default_env?.must_equal false
|
88
303
|
end
|
89
304
|
end
|
90
305
|
|
@@ -100,7 +315,7 @@ describe Yaml2env do
|
|
100
315
|
c.root = '/home/grimen/projects/hello_world'
|
101
316
|
c.env = 'production'
|
102
317
|
end
|
103
|
-
Yaml2env.root.must_equal '/home/grimen/projects/hello_world'
|
318
|
+
Yaml2env.root.to_s.must_equal '/home/grimen/projects/hello_world'
|
104
319
|
Yaml2env.env.must_equal 'production'
|
105
320
|
end
|
106
321
|
end
|
@@ -110,34 +325,34 @@ describe Yaml2env do
|
|
110
325
|
Yaml2env.must_respond_to :detect_root!
|
111
326
|
end
|
112
327
|
|
113
|
-
it "should detect environment for
|
328
|
+
it "should detect environment for Rack_apps - 1st" do
|
114
329
|
rack!(true)
|
115
330
|
rails!(true)
|
116
331
|
sinatra!(true)
|
117
332
|
|
118
333
|
Yaml2env.root = nil
|
119
334
|
Yaml2env.detect_root!
|
120
|
-
Yaml2env.root.must_equal '/home/grimen/development/
|
335
|
+
Yaml2env.root.to_s.must_equal '/home/grimen/development/rack_app'
|
121
336
|
end
|
122
337
|
|
123
|
-
it "should detect environment for
|
338
|
+
it "should detect environment for Rails_apps - 2nd" do
|
124
339
|
rack!(false)
|
125
340
|
rails!(true)
|
126
341
|
sinatra!(true)
|
127
342
|
|
128
343
|
Yaml2env.root = nil
|
129
344
|
Yaml2env.detect_root!
|
130
|
-
Yaml2env.root.must_equal '/home/grimen/development/
|
345
|
+
Yaml2env.root.to_s.must_equal '/home/grimen/development/rails_app'
|
131
346
|
end
|
132
347
|
|
133
|
-
it "should detect environment for
|
348
|
+
it "should detect environment for Sinatra_apps - 3rd" do
|
134
349
|
rack!(false)
|
135
350
|
rails!(false)
|
136
351
|
sinatra!(true)
|
137
352
|
|
138
353
|
Yaml2env.root = nil
|
139
354
|
Yaml2env.detect_root!
|
140
|
-
Yaml2env.root.must_equal '/home/grimen/development/
|
355
|
+
Yaml2env.root.to_s.must_equal '/home/grimen/development/sinatra_app'
|
141
356
|
end
|
142
357
|
|
143
358
|
it 'should complain if no environment could be detected' do
|
@@ -153,38 +368,42 @@ describe Yaml2env do
|
|
153
368
|
end
|
154
369
|
|
155
370
|
describe ".detect_env!" do
|
371
|
+
before do
|
372
|
+
Yaml2env.default_env = nil
|
373
|
+
end
|
374
|
+
|
156
375
|
it 'should be defined' do
|
157
376
|
Yaml2env.must_respond_to :detect_env!
|
158
377
|
end
|
159
378
|
|
160
|
-
it "should detect environment for
|
379
|
+
it "should detect environment for Rack_apps - 1st" do
|
161
380
|
rack!(true)
|
162
381
|
rails!(true)
|
163
382
|
sinatra!(true)
|
164
383
|
|
165
384
|
Yaml2env.env = nil
|
166
385
|
Yaml2env.detect_env!
|
167
|
-
Yaml2env.env.must_equal '
|
386
|
+
Yaml2env.env.must_equal 'rack_env'
|
168
387
|
end
|
169
388
|
|
170
|
-
it "should detect environment for
|
389
|
+
it "should detect environment for Rails_apps - 2nd" do
|
171
390
|
rack!(false)
|
172
391
|
rails!(true)
|
173
392
|
sinatra!(true)
|
174
393
|
|
175
394
|
Yaml2env.env = nil
|
176
395
|
Yaml2env.detect_env!
|
177
|
-
Yaml2env.env.must_equal '
|
396
|
+
Yaml2env.env.must_equal 'rails_env'
|
178
397
|
end
|
179
398
|
|
180
|
-
it "should detect environment for
|
399
|
+
it "should detect environment for Sinatra_apps - 3rd" do
|
181
400
|
rack!(false)
|
182
401
|
rails!(false)
|
183
402
|
sinatra!(true)
|
184
403
|
|
185
404
|
Yaml2env.env = nil
|
186
405
|
Yaml2env.detect_env!
|
187
|
-
Yaml2env.env.must_equal '
|
406
|
+
Yaml2env.env.must_equal 'sinatra_env'
|
188
407
|
end
|
189
408
|
|
190
409
|
it 'should complain if no environment could be detected' do
|
@@ -332,6 +551,146 @@ describe Yaml2env do
|
|
332
551
|
end
|
333
552
|
end
|
334
553
|
|
554
|
+
describe ".require!" do
|
555
|
+
before do
|
556
|
+
Yaml2env.env = 'production'
|
557
|
+
Yaml2env.root = File.dirname(__FILE__)
|
558
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
559
|
+
Yaml2env.stubs(:loaded).returns({})
|
560
|
+
end
|
561
|
+
|
562
|
+
it 'should be defined' do
|
563
|
+
Yaml2env.must_respond_to :require!
|
564
|
+
end
|
565
|
+
|
566
|
+
it 'should throw error if specified config file that do not exist' do
|
567
|
+
proc { Yaml2env.require! 'null.yml' }.must_raise Yaml2env::ConfigLoadingError
|
568
|
+
end
|
569
|
+
|
570
|
+
it 'should not throw error if specified config file do exist' do
|
571
|
+
proc { Yaml2env.require!('fixtures/example.yml') }.must_be_silent
|
572
|
+
end
|
573
|
+
|
574
|
+
it 'should throw error if a specified constant-key do not exist in the config file' do
|
575
|
+
proc {
|
576
|
+
Yaml2env.require! 'fixtures/example.yml', {:API_KEY => 'bla'}
|
577
|
+
}.must_raise Yaml2env::MissingConfigKeyError
|
578
|
+
end
|
579
|
+
|
580
|
+
it 'should not throw error if a specified constant-key do in fact exist in the config file' do
|
581
|
+
assert Yaml2env.require! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
582
|
+
end
|
583
|
+
|
584
|
+
it 'should set - with Yaml2env - required ENV-values' do
|
585
|
+
Yaml2env::LOADED_ENV.clear unless Yaml2env::LOADED_ENV.empty?
|
586
|
+
Yaml2env.require! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
587
|
+
Yaml2env::LOADED_ENV.must_equal({"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"})
|
588
|
+
end
|
589
|
+
|
590
|
+
it "should only load specified file if it has not been loaded already - like Ruby require vs. load" do
|
591
|
+
assert Yaml2env.require! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
592
|
+
lambda {
|
593
|
+
Yaml2env.require! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
594
|
+
}.must_raise Yaml2env::AlreadyLoadedError
|
595
|
+
assert Yaml2env.require! 'fixtures/example2.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
599
|
+
describe ".require" do
|
600
|
+
before do
|
601
|
+
Yaml2env.env = 'production'
|
602
|
+
Yaml2env.root = File.dirname(__FILE__)
|
603
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
604
|
+
Yaml2env.stubs(:loaded).returns({})
|
605
|
+
end
|
606
|
+
|
607
|
+
it 'should be defined' do
|
608
|
+
Yaml2env.must_respond_to :require
|
609
|
+
end
|
610
|
+
|
611
|
+
it 'should at maximum log warning if specified config file that do not exist' do
|
612
|
+
proc { Yaml2env.require('null.yml') }.must_be_silent
|
613
|
+
end
|
614
|
+
|
615
|
+
it 'should not log warning or raise error if specified config file do exist' do
|
616
|
+
proc { Yaml2env.require('fixtures/example.yml') }.must_be_silent
|
617
|
+
end
|
618
|
+
|
619
|
+
it 'should at maximum log warning if a specified constant-key do not exist in the config file' do
|
620
|
+
proc { Yaml2env.require 'fixtures/example.yml', {:API_KEY => 'bla'} }.must_be_silent
|
621
|
+
end
|
622
|
+
|
623
|
+
it 'should not log warning or raise error if a specified constant-key do in fact exist in the config file' do
|
624
|
+
proc {
|
625
|
+
assert Yaml2env.require 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
626
|
+
}.must_be_silent
|
627
|
+
end
|
628
|
+
|
629
|
+
it 'should set - with Yaml2env - requireed ENV-values' do
|
630
|
+
Yaml2env::LOADED_ENV.clear unless Yaml2env::LOADED_ENV.empty?
|
631
|
+
Yaml2env.require 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
632
|
+
Yaml2env::LOADED_ENV.must_equal({"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"})
|
633
|
+
end
|
634
|
+
|
635
|
+
it "should only load specified file if it has not been loaded already - like Ruby require vs. load" do
|
636
|
+
Yaml2env.require('fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}).must_equal true
|
637
|
+
Yaml2env.require('fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}).must_equal false
|
638
|
+
Yaml2env.require('fixtures/example2.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}).must_equal true
|
639
|
+
|
640
|
+
# FIXME: How test output using Logger - only works with "puts", and also need to silence spec output. :P
|
641
|
+
# args = ['fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}]
|
642
|
+
# lambda {
|
643
|
+
# Yaml2env.require *args
|
644
|
+
# }.must_output "[Yaml2env] Already loaded: -- arguments: [\"fixtures/example.yml\", {:API_KEY=>\"api_key\", :API_SECRET=>\"api_secret\"}])\n"
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
648
|
+
describe ".loaded" do
|
649
|
+
before do
|
650
|
+
Yaml2env.env = 'production'
|
651
|
+
Yaml2env.root = File.dirname(__FILE__)
|
652
|
+
Yaml2env.logger = nil
|
653
|
+
end
|
654
|
+
|
655
|
+
it 'should be defined' do
|
656
|
+
Yaml2env.must_respond_to :loaded
|
657
|
+
end
|
658
|
+
|
659
|
+
it 'should hold any loaded values - based on loaded filename as key' do
|
660
|
+
key_1 = File.join(File.dirname(__FILE__), 'fixtures/example.yml')
|
661
|
+
key_2 = File.join(File.dirname(__FILE__), 'fixtures/example2.yml')
|
662
|
+
|
663
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
664
|
+
Yaml2env.loaded.keys.must_include key_1
|
665
|
+
Yaml2env.loaded[key_1].must_equal({'api_key' => 'PRODUCTION_KEY', 'api_secret' => 'PRODUCTION_SECRET'})
|
666
|
+
|
667
|
+
Yaml2env.load 'fixtures/example2.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
|
668
|
+
Yaml2env.loaded.keys.must_include key_1
|
669
|
+
Yaml2env.loaded.keys.must_include key_2
|
670
|
+
Yaml2env.loaded[key_1].must_equal({'api_key' => 'PRODUCTION_KEY', 'api_secret' => 'PRODUCTION_SECRET'})
|
671
|
+
Yaml2env.loaded[key_2].must_equal({'api_key' => 'PRODUCTION_KEY_2', 'api_secret' => 'PRODUCTION_SECRET_2'})
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
describe ".loaded_files" do
|
676
|
+
it 'should be defined' do
|
677
|
+
Yaml2env.must_respond_to :loaded_files
|
678
|
+
end
|
679
|
+
|
680
|
+
it 'should return loaded files' do
|
681
|
+
file_1 = File.join(File.dirname(__FILE__), 'fixtures/example.yml')
|
682
|
+
file_2 = File.join(File.dirname(__FILE__), 'fixtures/example2.yml')
|
683
|
+
|
684
|
+
Yaml2env.loaded_files.must_be_kind_of Array
|
685
|
+
|
686
|
+
Yaml2env.load 'fixtures/example.yml'
|
687
|
+
Yaml2env.loaded_files.must_include file_1
|
688
|
+
|
689
|
+
Yaml2env.load 'fixtures/example2.yml'
|
690
|
+
Yaml2env.loaded_files.must_include file_1, file_2
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
335
694
|
describe ".loaded?" do
|
336
695
|
before do
|
337
696
|
Yaml2env::LOADED_ENV.clear unless Yaml2env::LOADED_ENV.empty?
|
@@ -369,54 +728,308 @@ describe Yaml2env do
|
|
369
728
|
end
|
370
729
|
end
|
371
730
|
|
372
|
-
|
731
|
+
describe ".log_env" do
|
732
|
+
before do
|
733
|
+
Yaml2env.default_env = nil
|
734
|
+
end
|
735
|
+
|
736
|
+
it 'should be defined' do
|
737
|
+
Yaml2env.must_respond_to :log_env
|
738
|
+
end
|
373
739
|
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
740
|
+
it 'should log env value' do
|
741
|
+
Yaml2env.env = nil
|
742
|
+
lambda {
|
743
|
+
Yaml2env.log_env
|
744
|
+
}.must_output %{:: Yaml2env.env = nil\n}
|
745
|
+
|
746
|
+
Yaml2env.env = 'development'
|
747
|
+
lambda {
|
748
|
+
Yaml2env.log_env
|
749
|
+
}.must_output %{:: Yaml2env.env = "development"\n}
|
750
|
+
end
|
751
|
+
|
752
|
+
it 'should show default env is used if this is the case' do
|
753
|
+
Yaml2env.default_env = 'development'
|
754
|
+
Yaml2env.env = 'development'
|
755
|
+
lambda {
|
756
|
+
Yaml2env.log_env
|
757
|
+
}.must_output %{:: Yaml2env.env = "development" (default)\n}
|
758
|
+
|
759
|
+
Yaml2env.default_env = 'development'
|
760
|
+
Yaml2env.env = 'staging'
|
761
|
+
lambda {
|
762
|
+
Yaml2env.log_env
|
763
|
+
}.must_output %{:: Yaml2env.env = "staging"\n}
|
764
|
+
end
|
765
|
+
end
|
766
|
+
|
767
|
+
describe ".log_root" do
|
768
|
+
it 'should be defined' do
|
769
|
+
Yaml2env.must_respond_to :log_root
|
770
|
+
end
|
771
|
+
|
772
|
+
it 'should log root value' do
|
773
|
+
Yaml2env.root = nil
|
774
|
+
lambda {
|
775
|
+
Yaml2env.log_root
|
776
|
+
}.must_output %{:: Yaml2env.root = nil\n}
|
777
|
+
|
778
|
+
Yaml2env.root = '/tmp/path'
|
779
|
+
lambda {
|
780
|
+
Yaml2env.log_root
|
781
|
+
}.must_output %{:: Yaml2env.root = "/tmp/path"\n}
|
782
|
+
end
|
783
|
+
end
|
784
|
+
|
785
|
+
describe ".log_values" do
|
786
|
+
it 'should be defined' do
|
787
|
+
Yaml2env.must_respond_to :log_values
|
788
|
+
end
|
789
|
+
|
790
|
+
it 'should log ENV values' do
|
791
|
+
with_constants :ENV => {"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"} do
|
792
|
+
lambda {
|
793
|
+
Yaml2env.log_values
|
794
|
+
}.must_output %{:: ENV = \"API_KEY\" => \"PRODUCTION_KEY\", \"API_SECRET\" => \"PRODUCTION_SECRET\"\n}
|
381
795
|
end
|
382
796
|
end
|
383
797
|
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
end
|
394
|
-
EVAL
|
395
|
-
Rails.root = '/home/grimen/development/rails-app'
|
396
|
-
Rails.env = 'rails-env'
|
397
|
-
else
|
398
|
-
Object.send(:remove_const, :Rails) if defined?(::Rails)
|
798
|
+
it 'should log ENV values for specified key(s)' do
|
799
|
+
with_constants :ENV => {"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"} do
|
800
|
+
lambda {
|
801
|
+
Yaml2env.log_values 'API_KEY'
|
802
|
+
}.must_output %{:: ENV = \"API_KEY\" => \"PRODUCTION_KEY\"\n}
|
803
|
+
|
804
|
+
lambda {
|
805
|
+
Yaml2env.log_values 'API_KEY', 'API_SECRET', 'BOGUS'
|
806
|
+
}.must_output %{:: ENV = \"API_KEY\" => \"PRODUCTION_KEY\", \"API_SECRET\" => \"PRODUCTION_SECRET\"\n}
|
399
807
|
end
|
400
808
|
end
|
401
809
|
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
end
|
412
|
-
end
|
413
|
-
end
|
414
|
-
EVAL
|
415
|
-
Sinatra::Application.root = '/home/grimen/development/sinatra-app'
|
416
|
-
Sinatra::Application.environment = 'sinatra-env'
|
417
|
-
else
|
418
|
-
Object.send(:remove_const, :Sinatra) if defined?(::Sinatra::Application)
|
810
|
+
it 'should log ENV values for specified key expression' do
|
811
|
+
with_constants :ENV => {"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"} do
|
812
|
+
lambda {
|
813
|
+
Yaml2env.log_values /API_KEY/
|
814
|
+
}.must_output %{:: ENV = \"API_KEY\" => \"PRODUCTION_KEY\"\n}
|
815
|
+
|
816
|
+
lambda {
|
817
|
+
Yaml2env.log_values /API_KEY|API_SECRET|BOGUS/
|
818
|
+
}.must_output %{:: ENV = \"API_KEY\" => \"PRODUCTION_KEY\", \"API_SECRET\" => \"PRODUCTION_SECRET\"\n}
|
419
819
|
end
|
420
820
|
end
|
821
|
+
end
|
822
|
+
|
823
|
+
describe ".assert_keys!" do
|
824
|
+
before do
|
825
|
+
Yaml2env.root = File.dirname(__FILE__)
|
826
|
+
Yaml2env.env = 'development'
|
827
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
828
|
+
end
|
829
|
+
|
830
|
+
it 'should be defined' do
|
831
|
+
Yaml2env.must_respond_to :assert_keys!
|
832
|
+
end
|
833
|
+
|
834
|
+
it 'should raise error if no arguments are specified' do
|
835
|
+
lambda {
|
836
|
+
Yaml2env.assert_keys!
|
837
|
+
}.must_raise Yaml2env::ArgumentError
|
838
|
+
end
|
839
|
+
|
840
|
+
it 'should raise error if specified keys are not loaded into ENV' do
|
841
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_6 => 'api_key', :API_SECRET_6 => 'api_secret'}
|
842
|
+
|
843
|
+
lambda {
|
844
|
+
Yaml2env.assert_keys! :BOGUS
|
845
|
+
}.must_raise Yaml2env::MissingConfigKeyError
|
846
|
+
|
847
|
+
lambda {
|
848
|
+
Yaml2env.assert_keys! :BOGUS, :BOGUS_2
|
849
|
+
}.must_raise Yaml2env::MissingConfigKeyError
|
850
|
+
end
|
851
|
+
|
852
|
+
it 'should not raise error if specified keys are loaded into ENV' do
|
853
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_6 => 'api_key', :API_SECRET_6 => 'api_secret'}
|
854
|
+
|
855
|
+
lambda {
|
856
|
+
Yaml2env.assert_keys! :API_KEY_6
|
857
|
+
}.must_be_silent
|
858
|
+
|
859
|
+
lambda {
|
860
|
+
Yaml2env.assert_keys! :API_KEY_6, :API_SECRET_6
|
861
|
+
}.must_be_silent
|
862
|
+
end
|
863
|
+
end
|
864
|
+
|
865
|
+
describe ".assert_keys" do
|
866
|
+
before do
|
867
|
+
Yaml2env.root = File.dirname(__FILE__)
|
868
|
+
Yaml2env.env = 'development'
|
869
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
870
|
+
end
|
871
|
+
|
872
|
+
it 'should be defined' do
|
873
|
+
Yaml2env.must_respond_to :assert_keys
|
874
|
+
end
|
875
|
+
|
876
|
+
it 'should raise error if no arguments are specified' do
|
877
|
+
lambda {
|
878
|
+
Yaml2env.assert_keys
|
879
|
+
}.must_raise Yaml2env::ArgumentError
|
880
|
+
end
|
881
|
+
|
882
|
+
it 'should log warning if specified keys are not loaded into ENV' do
|
883
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_5 => 'api_key', :API_SECRET_5 => 'api_secret'}
|
884
|
+
|
885
|
+
lambda {
|
886
|
+
Yaml2env.assert_keys :BOGUS
|
887
|
+
}.must_output %{[Yaml2env] WARN: Assertion failed, no such ENV-keys loaded: \"BOGUS\"\n}
|
888
|
+
|
889
|
+
lambda {
|
890
|
+
Yaml2env.assert_keys :BOGUS, :BOGUS_2
|
891
|
+
}.must_output %{[Yaml2env] WARN: Assertion failed, no such ENV-keys loaded: \"BOGUS\", \"BOGUS_2\"\n}
|
892
|
+
end
|
893
|
+
|
894
|
+
it 'should not log warning if specified keys are loaded into ENV' do
|
895
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_5 => 'api_key', :API_SECRET_5 => 'api_secret'}
|
896
|
+
|
897
|
+
lambda {
|
898
|
+
Yaml2env.assert_keys :API_KEY_5
|
899
|
+
}.must_be_silent
|
900
|
+
|
901
|
+
lambda {
|
902
|
+
Yaml2env.assert_keys :API_KEY_5, :API_SECRET_5
|
903
|
+
}.must_be_silent
|
904
|
+
end
|
905
|
+
end
|
906
|
+
|
907
|
+
describe ".assert_values!" do
|
908
|
+
before do
|
909
|
+
Yaml2env.root = File.dirname(__FILE__)
|
910
|
+
Yaml2env.env = 'development'
|
911
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
912
|
+
end
|
913
|
+
|
914
|
+
it 'should be defined' do
|
915
|
+
Yaml2env.must_respond_to :assert_values!
|
916
|
+
end
|
917
|
+
|
918
|
+
it 'should raise error if no hash is specified' do
|
919
|
+
lambda {
|
920
|
+
Yaml2env.assert_values!
|
921
|
+
}.must_raise ArgumentError
|
922
|
+
|
923
|
+
lambda {
|
924
|
+
Yaml2env.assert_values!({})
|
925
|
+
}.must_raise Yaml2env::ArgumentError
|
926
|
+
|
927
|
+
lambda {
|
928
|
+
Yaml2env.assert_values! :API_KEY_4
|
929
|
+
}.must_raise Yaml2env::ArgumentError
|
930
|
+
end
|
931
|
+
|
932
|
+
it 'should raise error if specified hash values are not regular expression values' do
|
933
|
+
lambda {
|
934
|
+
Yaml2env.assert_values! :API_KEY_4 => 'DEVELOPMENT_KEY'
|
935
|
+
}.must_raise Yaml2env::ArgumentError
|
936
|
+
|
937
|
+
lambda {
|
938
|
+
Yaml2env.assert_values! :API_KEY_4 => 'DEVELOPMENT_KEY', :API_SECRET_4 => /[A-Z]+/
|
939
|
+
}.must_raise Yaml2env::ArgumentError
|
940
|
+
end
|
941
|
+
|
942
|
+
it 'should raise error if specified keys with - based on the expression - valid values are not loaded into ENV' do
|
943
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_4 => 'api_key', :API_SECRET_4 => 'api_secret'}
|
944
|
+
|
945
|
+
lambda {
|
946
|
+
Yaml2env.assert_values! :API_KEY_4 => /[a-z]+/
|
947
|
+
}.must_raise Yaml2env::InvalidConfigValueError
|
948
|
+
|
949
|
+
lambda {
|
950
|
+
Yaml2env.assert_values! :API_KEY_4 => /[a-z]+/, :API_SECRET_4 => /[A-Z]+/
|
951
|
+
}.must_raise Yaml2env::InvalidConfigValueError
|
952
|
+
|
953
|
+
lambda {
|
954
|
+
Yaml2env.assert_values! :API_KEY_4 => /[a-z]+/, :API_SECRET_4 => /[a-z]+/
|
955
|
+
}.must_raise Yaml2env::InvalidConfigValueError
|
956
|
+
end
|
957
|
+
|
958
|
+
it 'should not raise error if specified keys with - based on the expression - valid values are loaded into ENV' do
|
959
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_4 => 'api_key', :API_SECRET_4 => 'api_secret'}
|
960
|
+
|
961
|
+
lambda {
|
962
|
+
Yaml2env.assert_values! :API_KEY_4 => /[A-Z]+/
|
963
|
+
}.must_be_silent
|
964
|
+
|
965
|
+
lambda {
|
966
|
+
Yaml2env.assert_values! :API_KEY_4 => /[A-Z]+/, :API_SECRET_4 => /[A-Z]+/
|
967
|
+
}.must_be_silent
|
968
|
+
end
|
969
|
+
end
|
970
|
+
|
971
|
+
describe ".assert_values" do
|
972
|
+
before do
|
973
|
+
Yaml2env.root = File.dirname(__FILE__)
|
974
|
+
Yaml2env.env = 'development'
|
975
|
+
Yaml2env.logger = nil # ::Logger.new(::STDOUT)
|
976
|
+
end
|
977
|
+
|
978
|
+
it 'should be defined' do
|
979
|
+
Yaml2env.must_respond_to :assert_values
|
980
|
+
end
|
981
|
+
|
982
|
+
it 'should raise error if no hash is specified' do
|
983
|
+
lambda {
|
984
|
+
Yaml2env.assert_values
|
985
|
+
}.must_raise ArgumentError
|
986
|
+
|
987
|
+
lambda {
|
988
|
+
Yaml2env.assert_values({})
|
989
|
+
}.must_raise Yaml2env::ArgumentError
|
990
|
+
|
991
|
+
lambda {
|
992
|
+
Yaml2env.assert_values :API_KEY_2
|
993
|
+
}.must_raise Yaml2env::ArgumentError
|
994
|
+
end
|
995
|
+
|
996
|
+
it 'should raise error if specified hash values are not regular expression values' do
|
997
|
+
lambda {
|
998
|
+
Yaml2env.assert_values :API_KEY_2 => 'DEVELOPMENT_KEY'
|
999
|
+
}.must_raise Yaml2env::ArgumentError
|
1000
|
+
|
1001
|
+
lambda {
|
1002
|
+
Yaml2env.assert_values :API_KEY_2 => 'DEVELOPMENT_KEY', :API_SECRET_2 => /[A-Z]+/
|
1003
|
+
}.must_raise Yaml2env::ArgumentError
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
it 'should log warning if specified keys with - based on the expression - valid values are not loaded into ENV' do
|
1007
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_2 => 'api_key', :API_SECRET_2 => 'api_secret'}
|
1008
|
+
|
1009
|
+
lambda {
|
1010
|
+
Yaml2env.assert_values :API_KEY_2 => /[a-z]+/
|
1011
|
+
}.must_output %{[Yaml2env] WARN: Assertion failed, invalid values: \"API_KEY_2\" => /[a-z]+/\n}
|
1012
|
+
|
1013
|
+
lambda {
|
1014
|
+
Yaml2env.assert_values :API_KEY_2 => /[a-z]+/, :API_SECRET_2 => /[A-Z]+/
|
1015
|
+
}.must_output %{[Yaml2env] WARN: Assertion failed, invalid values: \"API_KEY_2\" => /[a-z]+/, \"API_SECRET_2\" => /[A-Z]+/\n}
|
1016
|
+
|
1017
|
+
lambda {
|
1018
|
+
Yaml2env.assert_values :API_KEY_2 => /[a-z]+/, :API_SECRET_2 => /[a-z]+/
|
1019
|
+
}.must_output %{[Yaml2env] WARN: Assertion failed, invalid values: \"API_KEY_2\" => /[a-z]+/, \"API_SECRET_2\" => /[a-z]+/\n}
|
1020
|
+
end
|
1021
|
+
|
1022
|
+
it 'should not log warning if specified keys with - based on the expression - valid values are loaded into ENV' do
|
1023
|
+
Yaml2env.load 'fixtures/example.yml', {:API_KEY_3 => 'api_key', :API_SECRET_3 => 'api_secret'}
|
1024
|
+
|
1025
|
+
lambda {
|
1026
|
+
Yaml2env.assert_values :API_KEY_3 => /[A-Z]+/
|
1027
|
+
}.must_be_silent
|
1028
|
+
|
1029
|
+
lambda {
|
1030
|
+
Yaml2env.assert_values :API_KEY_3 => /[A-Z]+/, :API_SECRET_3 => /[A-Z]+/
|
1031
|
+
}.must_be_silent
|
1032
|
+
end
|
1033
|
+
end
|
421
1034
|
|
422
1035
|
end
|