yaml2env 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,7 +1,10 @@
1
1
  rvm:
2
2
  - 1.8.7
3
3
  - 1.9.2
4
+ - ree
5
+ - ruby-head
4
6
  - rbx
7
+ - rbx-2.0
5
8
  - jruby
6
- - ree
7
- - ruby-head
9
+ notifications:
10
+ disabled: true
data/Gemfile CHANGED
@@ -2,3 +2,10 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in yaml2env.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ group :darwin do
8
+ gem 'rb-fsevent'
9
+ end
10
+ end
11
+
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Jonas Grimfelt, Merchii. http://merchii.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile CHANGED
@@ -25,7 +25,10 @@ h2. Usage
25
25
  To give this some context; this is how we use @Yaml2Env@ to initialize "Hoptoad":http://hoptoadapp.com:
26
26
 
27
27
  <pre>
28
- Yaml2Env.load 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
28
+ Yaml2Env.load! 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
29
+
30
+ # ...or if a warning note in the logs is enough:
31
+ # Yaml2Env.load 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
29
32
 
30
33
  if defined?(HoptoadNotifier)
31
34
  HoptoadNotifier.configure do |config|
@@ -53,22 +56,37 @@ To give this some context; this is how we use @Yaml2Env@ to initialize "Hoptoad"
53
56
  ...which will yield:
54
57
 
55
58
  <pre>
56
- Rails.env = 'development'
59
+ # Rails.env => 'development'
57
60
  ENV['HOPTOAD_API_KEY'] => 'NONE'
58
61
 
59
- Rails.env = 'staging'
62
+ # Rails.env => 'staging'
60
63
  ENV['HOPTOAD_API_KEY'] => '123abc'
61
64
 
62
- Rails.env = 'production'
65
+ # Rails.env => 'production'
63
66
  ENV['HOPTOAD_API_KEY'] => 'abc123'
64
67
 
65
- Rails.env = 'test'
68
+ # Rails.env => 'test'
66
69
  ENV['HOPTOAD_API_KEY'] => 'NONE'
67
70
 
68
- Rails.env = 'other'
71
+ # Rails.env => 'other'
69
72
  => "Failed to load required config for environment 'other': /Users/grimen/development/example.com/config/hoptoad.yml"
70
73
  </pre>
71
74
 
75
+ h2. Helpers
76
+
77
+ A few convenient helpers:
78
+
79
+ <pre>
80
+ Yaml2Env.loaded? 'HOPTOAD_API_KEY'
81
+ => true
82
+
83
+ Yaml2Env.loaded? 'BAZOOKA'
84
+ => false
85
+
86
+ Yaml2Env.loaded? 'HOPTOAD_API_KEY', 'BAZOOKA'
87
+ => false
88
+ </pre>
89
+
72
90
  h2. Notes
73
91
 
74
92
  This gem was developed for our own requirements at *"Merchii":http://github.com/merchii*, so feel free to send pull-requests with enhancements of any kind (features, bug-fixes, documentation, tests, etc.) to make it better or useful for you as well.
@@ -76,5 +94,5 @@ This gem was developed for our own requirements at *"Merchii":http://github.com/
76
94
  h2. License
77
95
 
78
96
  Released under the MIT license.
79
- Copyright (c) "Merchii":http://github.com/merchii, "Jonas Grimfelt":http://github.com/grimen
97
+ Copyright (c) "Jonas Grimfelt":http://github.com/grimen, "Merchii":http://github.com/merchii
80
98
 
@@ -1,3 +1,3 @@
1
1
  module Yaml2env
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/yaml2env.rb CHANGED
@@ -55,7 +55,7 @@ module Yaml2env
55
55
  yield self
56
56
  end
57
57
 
58
- def load(config_path, required_keys = {}, optional_keys = {})
58
+ def load!(config_path, required_keys = {}, optional_keys = {})
59
59
  self.detect_root!
60
60
  self.detect_env!
61
61
 
@@ -84,6 +84,21 @@ module Yaml2env
84
84
  end
85
85
  end
86
86
 
87
+ def load(config_path, required_keys = {}, optional_keys = {})
88
+ begin
89
+ self.load!(config_path, required_keys, optional_keys)
90
+ rescue Error => e
91
+ if self.logger?
92
+ ::Yaml2env.logger.warn("[Yaml2env]: #{e} -- called from: #{__FILE__})")
93
+ end
94
+ end
95
+ true
96
+ end
97
+
98
+ def loaded?(*constant_names)
99
+ constant_names.all? { |cn| ::Yaml2env::LOADED_ENV.key?(cn.to_s) }
100
+ end
101
+
87
102
  def detect_root!
88
103
  self.root ||= if ::ENV.key?('RACK_ROOT')
89
104
  ::ENV['RACK_ROOT']
@@ -92,7 +107,7 @@ module Yaml2env
92
107
  elsif defined?(::Sinatra::Application)
93
108
  ::Sinatra::Application.root
94
109
  else
95
- raise DetectionFailedError, "Failed to auto-detect Yaml.env (config environment). Specify environment before loading any configs/initializers using Yaml2env, e.g Yaml2env.env = 'development'."
110
+ raise DetectionFailedError, "Failed to auto-detect Yaml.root (config root). Specify root before loading any configs/initializers using Yaml2env, e.g. Yaml2env.root = '~/projects/my_app'."
96
111
  end
97
112
  end
98
113
 
@@ -104,7 +119,7 @@ module Yaml2env
104
119
  elsif defined?(::Sinatra::Application)
105
120
  ::Sinatra::Application.environment
106
121
  else
107
- raise DetectionFailedError, "Failed to auto-detect Yaml2env.root (config root). Specify environment before loading any configs/initializers using Yaml2env, e.g Yaml2env.env = 'development'."
122
+ raise DetectionFailedError, "Failed to auto-detect Yaml2env.root (config root). Specify environment before loading any configs/initializers using Yaml2env, e.g. Yaml2env.env = 'development'."
108
123
  end
109
124
  end
110
125
 
@@ -260,7 +260,7 @@ describe Yaml2env do
260
260
  end
261
261
  end
262
262
 
263
- describe ".load" do
263
+ describe ".load!" do
264
264
  before do
265
265
  Yaml2env.env = 'production'
266
266
  Yaml2env.root = File.dirname(__FILE__)
@@ -268,26 +268,60 @@ describe Yaml2env do
268
268
  end
269
269
 
270
270
  it 'should be defined' do
271
- Yaml2env.must_respond_to :load
271
+ Yaml2env.must_respond_to :load!
272
272
  end
273
273
 
274
274
  it 'should throw error if specified config file that do not exist' do
275
275
  assert_raises Yaml2env::ConfigLoadingError do
276
- Yaml2env.load 'null.yml'
276
+ Yaml2env.load! 'null.yml'
277
277
  end
278
278
  end
279
279
 
280
280
  it 'should not throw error if specified config file do exist' do
281
- assert Yaml2env.load('fixtures/example.yml')
281
+ assert Yaml2env.load!('fixtures/example.yml')
282
282
  end
283
283
 
284
284
  it 'should throw error if a specified constant-key do not exist in the config file' do
285
285
  assert_raises Yaml2env::MissingConfigKeyError do
286
- Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'bla'}
286
+ Yaml2env.load! 'fixtures/example.yml', {:API_KEY => 'bla'}
287
287
  end
288
288
  end
289
289
 
290
290
  it 'should not throw error if a specified constant-key do in fact exist in the config file' do
291
+ assert Yaml2env.load! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
292
+ end
293
+
294
+ it 'should set - with Yaml2env - loaded ENV-values' do
295
+ Yaml2env::LOADED_ENV.clear unless Yaml2env::LOADED_ENV.empty?
296
+ Yaml2env.load! 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
297
+ Yaml2env::LOADED_ENV.must_equal({"API_SECRET" => "PRODUCTION_SECRET", "API_KEY" => "PRODUCTION_KEY"})
298
+ end
299
+ end
300
+
301
+ describe ".load" do
302
+ before do
303
+ Yaml2env.env = 'production'
304
+ Yaml2env.root = File.dirname(__FILE__)
305
+ Yaml2env.logger = nil
306
+ end
307
+
308
+ it 'should be defined' do
309
+ Yaml2env.must_respond_to :load
310
+ end
311
+
312
+ it 'should at maximum log warning if specified config file that do not exist' do
313
+ assert Yaml2env.load('null.yml')
314
+ end
315
+
316
+ it 'should not log warning or raise error if specified config file do exist' do
317
+ assert Yaml2env.load('fixtures/example.yml')
318
+ end
319
+
320
+ it 'should at maximum log warning if a specified constant-key do not exist in the config file' do
321
+ assert Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'bla'}
322
+ end
323
+
324
+ it 'should not log warning or raise error if a specified constant-key do in fact exist in the config file' do
291
325
  assert Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
292
326
  end
293
327
 
@@ -298,6 +332,43 @@ describe Yaml2env do
298
332
  end
299
333
  end
300
334
 
335
+ describe ".loaded?" do
336
+ before do
337
+ Yaml2env::LOADED_ENV.clear unless Yaml2env::LOADED_ENV.empty?
338
+ end
339
+
340
+ it 'should be defined' do
341
+ Yaml2env.must_respond_to :loaded?
342
+ end
343
+
344
+ describe "one argument" do
345
+ it 'should return false if specified constant is not loaded into ENV' do
346
+ Yaml2env.loaded?('API_KEY').must_equal false
347
+ end
348
+
349
+ it 'should return true if specified constant is loaded into ENV' do
350
+ Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
351
+ Yaml2env.loaded?('API_KEY').must_equal true
352
+ end
353
+ end
354
+
355
+ describe "multiple arguments" do
356
+ it 'should return false if none of the specified constants are not loaded into ENV' do
357
+ Yaml2env.loaded?('API_KEY', 'API_SECRET').must_equal false
358
+ end
359
+
360
+ it 'should return false if any of the specified constants are not loaded into ENV' do
361
+ Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'api_key'}
362
+ Yaml2env.loaded?('API_KEY', 'API_SECRET').must_equal false
363
+ end
364
+
365
+ it 'should return true if all specified constants are loaded into ENV' do
366
+ Yaml2env.load 'fixtures/example.yml', {:API_KEY => 'api_key', :API_SECRET => 'api_secret'}
367
+ Yaml2env.loaded?('API_KEY', 'API_SECRET').must_equal true
368
+ end
369
+ end
370
+ end
371
+
301
372
  protected
302
373
 
303
374
  def rack!(loaded)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: yaml2env
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Merchii
@@ -11,12 +11,10 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-07-27 00:00:00 +02:00
15
- default_executable:
14
+ date: 2011-08-20 00:00:00 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: rake
19
- prerelease: false
20
18
  requirement: &id001 !ruby/object:Gem::Requirement
21
19
  none: false
22
20
  requirements:
@@ -24,10 +22,10 @@ dependencies:
24
22
  - !ruby/object:Gem::Version
25
23
  version: "0"
26
24
  type: :development
25
+ prerelease: false
27
26
  version_requirements: *id001
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: bundler
30
- prerelease: false
31
29
  requirement: &id002 !ruby/object:Gem::Requirement
32
30
  none: false
33
31
  requirements:
@@ -35,10 +33,10 @@ dependencies:
35
33
  - !ruby/object:Gem::Version
36
34
  version: 1.0.0
37
35
  type: :development
36
+ prerelease: false
38
37
  version_requirements: *id002
39
38
  - !ruby/object:Gem::Dependency
40
39
  name: minitest
41
- prerelease: false
42
40
  requirement: &id003 !ruby/object:Gem::Requirement
43
41
  none: false
44
42
  requirements:
@@ -46,10 +44,10 @@ dependencies:
46
44
  - !ruby/object:Gem::Version
47
45
  version: "0"
48
46
  type: :development
47
+ prerelease: false
49
48
  version_requirements: *id003
50
49
  - !ruby/object:Gem::Dependency
51
50
  name: guard
52
- prerelease: false
53
51
  requirement: &id004 !ruby/object:Gem::Requirement
54
52
  none: false
55
53
  requirements:
@@ -57,10 +55,10 @@ dependencies:
57
55
  - !ruby/object:Gem::Version
58
56
  version: "0"
59
57
  type: :development
58
+ prerelease: false
60
59
  version_requirements: *id004
61
60
  - !ruby/object:Gem::Dependency
62
61
  name: guard-bundler
63
- prerelease: false
64
62
  requirement: &id005 !ruby/object:Gem::Requirement
65
63
  none: false
66
64
  requirements:
@@ -68,10 +66,10 @@ dependencies:
68
66
  - !ruby/object:Gem::Version
69
67
  version: "0"
70
68
  type: :development
69
+ prerelease: false
71
70
  version_requirements: *id005
72
71
  - !ruby/object:Gem::Dependency
73
72
  name: guard-minitest
74
- prerelease: false
75
73
  requirement: &id006 !ruby/object:Gem::Requirement
76
74
  none: false
77
75
  requirements:
@@ -79,6 +77,7 @@ dependencies:
79
77
  - !ruby/object:Gem::Version
80
78
  version: "0"
81
79
  type: :development
80
+ prerelease: false
82
81
  version_requirements: *id006
83
82
  description: Stash environment-specific configs in YAML-files and load them into ENV according to best-practices pattern - and auto-detects on-initialization if something is missing (skipping the "scratching the head"-part).
84
83
  email:
@@ -95,6 +94,7 @@ files:
95
94
  - .travis.yml
96
95
  - Gemfile
97
96
  - Guardfile
97
+ - MIT-LICENSE
98
98
  - README.textile
99
99
  - Rakefile
100
100
  - lib/yaml2env.rb
@@ -103,7 +103,6 @@ files:
103
103
  - spec/spec_helper.rb
104
104
  - spec/yaml2env_spec.rb
105
105
  - yaml2env.gemspec
106
- has_rdoc: true
107
106
  homepage: http://github.com/merchii/yaml2env
108
107
  licenses: []
109
108
 
@@ -117,6 +116,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
116
  requirements:
118
117
  - - ">="
119
118
  - !ruby/object:Gem::Version
119
+ hash: -148891887331939387
120
+ segments:
121
+ - 0
120
122
  version: "0"
121
123
  required_rubygems_version: !ruby/object:Gem::Requirement
122
124
  none: false
@@ -127,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
129
  requirements: []
128
130
 
129
131
  rubyforge_project: yaml2env
130
- rubygems_version: 1.6.2
132
+ rubygems_version: 1.8.7
131
133
  signing_key:
132
134
  specification_version: 3
133
135
  summary: YAML => ENV for environment-specific configs