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 CHANGED
@@ -1,4 +1,9 @@
1
- *.gem
1
+ .DS_Store
2
2
  .bundle
3
+ .rbx
4
+ .*~
3
5
  Gemfile.lock
4
6
  pkg/*
7
+ *.gem
8
+ *.rbc
9
+ *~
data/.travis.yml CHANGED
@@ -4,7 +4,6 @@ rvm:
4
4
  - ree
5
5
  - ruby-head
6
6
  - rbx
7
- - rbx-2.0
8
7
  - jruby
9
8
  notifications:
10
9
  disabled: true
data/Gemfile CHANGED
@@ -1,11 +1,13 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in yaml2env.gemspec
4
3
  gemspec
5
4
 
6
5
  group :test do
7
6
  group :darwin do
8
7
  gem 'rb-fsevent'
9
8
  end
9
+
10
+ # Solving runner bug: https://github.com/guard/guard-minitest/pull/25
11
+ gem 'guard-minitest', :git => 'https://github.com/grimen/guard-minitest'
10
12
  end
11
13
 
data/README.textile CHANGED
@@ -22,13 +22,13 @@ Add to your @Gemfile@:
22
22
 
23
23
  h2. Usage
24
24
 
25
- To give this some context; this is how we use @Yaml2Env@ to initialize "Hoptoad":http://hoptoadapp.com:
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.require! 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
29
29
 
30
30
  # ...or if a warning note in the logs is enough:
31
- # Yaml2Env.load 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
31
+ # Yaml2env.require 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
32
32
 
33
33
  if defined?(HoptoadNotifier)
34
34
  HoptoadNotifier.configure do |config|
@@ -56,37 +56,160 @@ To give this some context; this is how we use @Yaml2Env@ to initialize "Hoptoad"
56
56
  ...which will yield:
57
57
 
58
58
  <pre>
59
- # Rails.env => 'development'
60
- ENV['HOPTOAD_API_KEY'] => 'NONE'
59
+ # For: Rails.env => 'development'
60
+ ENV['HOPTOAD_API_KEY']
61
+ => 'NONE'
61
62
 
62
- # Rails.env => 'staging'
63
- ENV['HOPTOAD_API_KEY'] => '123abc'
63
+ # For: Rails.env => 'staging'
64
+ ENV['HOPTOAD_API_KEY']
65
+ => '123abc'
64
66
 
65
- # Rails.env => 'production'
66
- ENV['HOPTOAD_API_KEY'] => 'abc123'
67
+ # For: Rails.env => 'production'
68
+ ENV['HOPTOAD_API_KEY']
69
+ => 'abc123'
67
70
 
68
- # Rails.env => 'test'
69
- ENV['HOPTOAD_API_KEY'] => 'NONE'
71
+ # For: Rails.env => 'test'
72
+ ENV['HOPTOAD_API_KEY']
73
+ => 'NONE'
70
74
 
71
- # Rails.env => 'other'
72
- => "Failed to load required config for environment 'other': /Users/grimen/development/example.com/config/hoptoad.yml"
75
+ # For: Rails.env => 'other'
76
+ => STDOUT: "Failed to load required config for environment 'other': /Users/grimen/development/example.com/config/hoptoad.yml"
73
77
  </pre>
74
78
 
75
- h2. Helpers
79
+ h2. API
76
80
 
77
- A few convenient helpers:
81
+ Being lazy and just dropping a lot of examples here.
82
+
83
+ *@Yaml2env.require@*
84
+
85
+ <pre>
86
+ # Case: If config file exists with proper keys
87
+ Yaml2env.require 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
88
+ => true
89
+ Yaml2env.require 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
90
+ => false + STDOUT: (already loaded warning)
91
+
92
+ # Case: If config file don't exists, or it don't contain expected setting-key(s)
93
+ Yaml2env.require 'config/hoptoad2.yml', {'HOPTOAD_API_KEY' => 'api_key'}
94
+ => false + STDOUT: (invalid file or missing key warning)
95
+ </pre>
96
+
97
+ *@Yaml2env.require!@*
98
+
99
+ See above: Same as @Yaml2env.require@ but raises error instead of log warning.
100
+
101
+ *@Yaml2env.load@*
102
+
103
+ <pre>
104
+ # Case: If config file exists with proper keys
105
+ Yaml2env.load 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
106
+ => true
107
+
108
+ # Case: If config file don't exists, or it don't contain expected setting-key(s)
109
+ Yaml2env.load 'config/hoptoad.yml', {'HOPTOAD_API_KEY' => 'api_key'}
110
+ => STDOUT: (warning)
111
+ </pre>
112
+
113
+ *@Yaml2env.load!@*
114
+
115
+ See above: Same as @Yaml2env.require@ but raises error instead of log warning.
116
+
117
+ *@Yaml2env.assert_keys@*
78
118
 
79
119
  <pre>
80
- Yaml2Env.loaded? 'HOPTOAD_API_KEY'
81
- => true
120
+ Yaml2env.assert_keys 'HOPTOAD_API_KEY'
121
+ => true
122
+
123
+ Yaml2env.assert_keys 'BAZOOKA'
124
+ => false + STDOUT: (warning)
125
+ </pre>
126
+
127
+ *@Yaml2env.assert_keys!@*
82
128
 
83
- Yaml2Env.loaded? 'BAZOOKA'
84
- => false
129
+ See above: Same as @Yaml2env.assert_keys@ but raises error instead of log warning.
130
+
131
+ *@Yaml2env.assert_values@*
132
+
133
+ <pre>
134
+ Yaml2env.assert_values 'HOPTOAD_API_KEY' => /[a-z0-9]+/
135
+ => true
85
136
 
86
- Yaml2Env.loaded? 'HOPTOAD_API_KEY', 'BAZOOKA'
87
- => false
137
+ Yaml2env.assert_values 'HOPTOAD_API_KEY' => /[0-9]+/
138
+ => false + STDOUT: (warning)
139
+ </pre>
140
+
141
+ *@Yaml2env.assert_values!@*
142
+
143
+ See above: Same as @Yaml2env.assert_values@ but raises error instead of log warning.
144
+
145
+ *@Yaml2env.log_root@*
146
+
147
+ <pre>
148
+ Yaml2env.log_root
149
+ => STDOUT: :: Yaml2env.root = '/path/to/project/root'
88
150
  </pre>
89
151
 
152
+ *@Yaml2env.log_env@*
153
+
154
+ <pre>
155
+ Yaml2env.log_env
156
+ => STDOUT: :: Yaml2env.env = 'development' (default)
157
+ </pre>
158
+
159
+ *@Yaml2env.log_values@*
160
+
161
+ <pre>
162
+ Yaml2env.log_values
163
+ => STDOUT: :: ENV = {'HOPTOAD_API_KEY' => 'api_key', 'RUBY_VERSION' => 'ruby-1.9.3-p0', ...}
164
+
165
+ Yaml2env.log_values 'HOPTOAD_API_KEY'
166
+ => STDOUT: :: ENV = {'HOPTOAD_API_KEY' => 'api_key'}
167
+
168
+ Yaml2env.log_values 'BAZOOKA'
169
+ => STDOUT: :: ENV = {}
170
+
171
+ Yaml2env.log_values /RACK|MERCHII/
172
+ => STDOUT: :: ENV = {'RACK_ENV' => 'api_key', 'MERCHII_ASSETS_DOMAIN' => 'assets.merchii.com'}
173
+ </pre>
174
+
175
+ *@Yaml2env.detect_root!@*
176
+
177
+ <pre>
178
+ # For: Rack, Sinatra, Rails, or Yaml2env.default_env is set
179
+ Yaml2env.detect_root!
180
+ => Yaml2env.root = '/path/to/project/root'
181
+
182
+ # For: Failed detection
183
+ Yaml2env.detect_root!
184
+ => DetectionFailedError
185
+ </pre>
186
+
187
+ *@Yaml2env.detect_env!@*
188
+
189
+ <pre>
190
+ # For: Rack, Sinatra, Rails, or Yaml2env.default_env is set
191
+ Yaml2env.detect_env!
192
+ => Yaml2env.env = ENV['RACK_ENV'] # ...example for Rack
193
+
194
+ # For: Failed detection
195
+ Yaml2env.detect_env!
196
+ => DetectionFailedError
197
+
198
+ # For: Default environment set
199
+ Yaml2env.default_env = 'development'
200
+ Yaml2env.detect_env!
201
+ => Yaml2env.env = 'development'
202
+ </pre>
203
+
204
+ *@Yaml2env.loaded@*
205
+
206
+ <pre>
207
+ Yaml2env.loaded
208
+ => STDOUT: '/path/to/project/root/config/hoptoad.yml' => {'HOPTOAD_API_KEY' => 'abc123'}
209
+ </pre>
210
+
211
+ There are a few more, but these are the most useful ones.
212
+
90
213
  h2. Notes
91
214
 
92
215
  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.
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
1
+ require 'bundler/gem_tasks'
3
2
  require 'rake/testtask'
4
3
 
5
4
  task :default => :test
data/TODO ADDED
@@ -0,0 +1,13 @@
1
+
2
+ == NEXT
3
+
4
+ - [feature]: Yaml2env.log_files => Array
5
+
6
+ - [enhancement]: Make use of 'awesome_print' - with fallback on 'pretty_print' - without breaking Ruby specs; "ordered hash keys" issue causes pain here so disabled it temporarily to get a green build.
7
+
8
+
9
+ == WOULD-BE-NICE
10
+
11
+ - [review]: Find out best practice for testing Pathname vs. String like this: Pathname.new("/tmp") == "/tmp"
12
+
13
+ - [spec]: Find out why many specs fail when Yaml2env.env is a ActiveSupport::StringInquirer - works in Rails.
@@ -1,3 +1,3 @@
1
1
  module Yaml2env
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/yaml2env.rb CHANGED
@@ -1,5 +1,15 @@
1
1
  require 'yaml'
2
2
  require 'logger'
3
+ require 'active_support/string_inquirer'
4
+ require 'active_support/hash_with_indifferent_access'
5
+ require 'active_support/ordered_hash'
6
+ require 'active_support/core_ext/object/blank'
7
+ require 'pp'
8
+ begin
9
+ require 'awesome_print'
10
+ rescue LoadError
11
+ # optional
12
+ end
3
13
 
4
14
  module Yaml2env
5
15
 
@@ -8,6 +18,9 @@ module Yaml2env
8
18
  class Error < ::StandardError
9
19
  end
10
20
 
21
+ class ArgumentError < ::ArgumentError
22
+ end
23
+
11
24
  class DetectionFailedError < Error
12
25
  end
13
26
 
@@ -17,6 +30,18 @@ module Yaml2env
17
30
  class MissingConfigKeyError < Error
18
31
  end
19
32
 
33
+ class InvalidConfigValueError < Error
34
+ end
35
+
36
+ class InvalidRootError < ArgumentError
37
+ end
38
+
39
+ class AlreadyLoadedError < Error
40
+ end
41
+
42
+ class HumanError < Error
43
+ end
44
+
20
45
  # Hash tracking all of the loaded ENV-values via Yaml2env.load.
21
46
  LOADED_ENV = {}
22
47
 
@@ -32,15 +57,51 @@ module Yaml2env
32
57
  # Default: +::Logger.new(::STDOUT)+
33
58
  @@logger = ::Logger.new(::STDOUT)
34
59
 
60
+ # Loaded files and their values.
61
+ @@loaded = {}
62
+
63
+ # Default env.
64
+ @@default_env = nil
65
+
35
66
  class << self
36
67
 
37
- [:root, :env, :logger].each do |name|
68
+ [:default_env, :logger].each do |name|
38
69
  define_method name do
39
- class_variable_get "@@#{name}"
70
+ class_variable_get :"@@#{name}"
71
+ end
72
+ define_method :"#{name}=" do |value|
73
+ class_variable_set :"@@#{name}", value
40
74
  end
41
- define_method "#{name}=" do |value|
42
- class_variable_set "@@#{name}", value
75
+ end
76
+
77
+ define_method :'root' do
78
+ class_variable_get :'@@root'
79
+ end
80
+ define_method :'root=' do |value|
81
+ if value.present?
82
+ value = File.expand_path(value) rescue value
83
+ value = Pathname.new(value) rescue value
84
+ # FIXME: Makes sense, but need to rewrite specs somewhat - later.
85
+ # if Dir.exists?(value)
86
+ # value = Pathname.new(value).expand_path
87
+ # else
88
+ # raise InvalidRootError, "Trying to set Yaml2env.root to a path that don't exists: #{value.inspect}. Yaml2env.root must point to existing path."
89
+ # end
43
90
  end
91
+ class_variable_set :'@@root', value
92
+ end
93
+
94
+ define_method :'env' do
95
+ class_variable_get :'@@env'
96
+ end
97
+ define_method :'env=' do |value|
98
+ # FIXME: Specs "Yaml2env.env.must_equal" fails in really weird way with this line enabled.
99
+ # value = ActiveSupport::StringInquirer.new(value.to_s) unless value.is_a?(ActiveSupport::StringInquirer)
100
+ class_variable_set :'@@env', value
101
+ end
102
+
103
+ define_method :'loaded' do
104
+ class_variable_get :'@@loaded'
44
105
  end
45
106
 
46
107
  alias :environment :env
@@ -49,6 +110,8 @@ module Yaml2env
49
110
  @@root ||= nil
50
111
  @@env ||= nil
51
112
  @@logger ||= ::Logger.new(::STDOUT)
113
+ @@loaded ||= {}
114
+ @@default_env ||= nil
52
115
  end
53
116
 
54
117
  def configure
@@ -62,7 +125,9 @@ module Yaml2env
62
125
  config ||= {}
63
126
 
64
127
  begin
65
- config_path = File.expand_path(File.join(self.root, config_path)).to_s
128
+ unless File.exists?(config_path)
129
+ config_path = File.expand_path(File.join(self.root, config_path)).to_s
130
+ end
66
131
  config = self.load_config_for_env(config_path, self.env)
67
132
  rescue
68
133
  raise ConfigLoadingError, "Failed to load required config for environment '#{self.env}': #{config_path}"
@@ -70,31 +135,62 @@ module Yaml2env
70
135
 
71
136
  # Merge required + optional keys.
72
137
  keys_values = optional_keys.merge(required_keys)
138
+ loaded_key_values = ActiveSupport::OrderedHash.new
73
139
 
74
140
  # Stash found keys from the config into ENV.
75
141
  keys_values.each do |extected_env_key, extected_yaml_key|
76
- ::Yaml2env::LOADED_ENV[extected_env_key.to_s] = ::ENV[extected_env_key.to_s] = config[extected_yaml_key.to_s]
77
- self.logger.info ":: ENV[#{extected_env_key.inspect}] = #{::ENV[extected_env_key.to_s].inspect}" if self.logger?
142
+ config_value = config[extected_yaml_key.to_s]
143
+ ::Yaml2env::LOADED_ENV[extected_env_key.to_s] = ::ENV[extected_env_key.to_s] = config_value
144
+ info ":: ENV[#{extected_env_key.inspect}] = #{::ENV[extected_env_key.to_s].inspect}"
78
145
  end
79
146
 
147
+ self.loaded[config_path] = config
148
+
80
149
  # Raise error if any credentials are missing.
81
150
  required_keys.keys.each do |env_key|
82
151
  ::Yaml2env::LOADED_ENV[env_key.to_s] ||
83
152
  raise(MissingConfigKeyError, "ENV variable '#{env_key}' needs to be set. Query: #{keys_values.inspect}. Found: #{config.inspect}")
84
153
  end
154
+
155
+ true
85
156
  end
86
157
 
87
158
  def load(config_path, required_keys = {}, optional_keys = {})
159
+ args = [config_path, required_keys, optional_keys]
160
+
88
161
  begin
89
162
  self.load!(config_path, required_keys, optional_keys)
90
163
  rescue Error => e
91
- if self.logger?
92
- ::Yaml2env.logger.warn("[Yaml2env]: #{e} -- called from: #{__FILE__})")
93
- end
164
+ warn "[Yaml2env]: #{e} -- arguments: #{args.inspect})"
94
165
  end
95
166
  true
96
167
  end
97
168
 
169
+ public # force public - we are overriding private Ruby method here, but should be all good in the hood. >:)
170
+
171
+ def require!(config_path, required_keys = {}, optional_keys = {})
172
+ self.detect_root!
173
+ config_path = File.expand_path(File.join(self.root, config_path)).to_s
174
+ raise AlreadyLoadedError, "Already loaded:" if self.loaded_files.include?(config_path)
175
+ self.load!(config_path, required_keys, optional_keys)
176
+ end
177
+
178
+ def require(*args)
179
+ begin
180
+ self.require!(*args)
181
+ true
182
+ rescue AlreadyLoadedError => e
183
+ false
184
+ rescue Error => e
185
+ warn "[Yaml2env]: #{e} -- arguments: #{args.inspect})"
186
+ false
187
+ end
188
+ end
189
+
190
+ def loaded_files
191
+ self.loaded.keys
192
+ end
193
+
98
194
  def loaded?(*constant_names)
99
195
  constant_names.all? { |cn| ::Yaml2env::LOADED_ENV.key?(cn.to_s) }
100
196
  end
@@ -112,14 +208,16 @@ module Yaml2env
112
208
  end
113
209
 
114
210
  def detect_env!
115
- self.env ||= if ::ENV.key?('RACK_ENV')
211
+ self.env ||= if ::ENV['RACK_ENV'].present?
116
212
  ::ENV['RACK_ENV']
117
213
  elsif defined?(::Rails)
118
214
  ::Rails.env
119
215
  elsif defined?(::Sinatra::Application)
120
216
  ::Sinatra::Application.environment
217
+ elsif self.default_env.present?
218
+ self.default_env
121
219
  else
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'."
220
+ raise DetectionFailedError, "Failed to auto-detect Yaml2env.env (config environment). Specify environment before loading any configs/initializers using Yaml2env, e.g. Yaml2env.env = 'development'."
123
221
  end
124
222
  end
125
223
 
@@ -127,7 +225,142 @@ module Yaml2env
127
225
  self.logger.respond_to?(:info)
128
226
  end
129
227
 
228
+ def root?
229
+ self.root.present?
230
+ end
231
+
232
+ def env?(*args)
233
+ if args.size > 0
234
+ raise HumanError, "Seriously, what are you trying to do? *<:)" if args.size > 1 && args.count { |a| a.blank? } > 1
235
+ args.any? do |arg|
236
+ arg.is_a?(Regexp) ? self.env.to_s =~ arg : self.env.to_s == arg.to_s
237
+ end
238
+ else
239
+ self.env.present?
240
+ end
241
+ end
242
+
243
+ def default_env?
244
+ self.env == self.default_env
245
+ end
246
+
247
+ def log_env
248
+ value = self.env.inspect
249
+ output = ":: Yaml2env.env = #{value}"
250
+ output << " (default)" if self.default_env? && self.default_env.present?
251
+ puts output
252
+ end
253
+
254
+ def log_root
255
+ value = self.root.present? ? self.root.to_s.inspect : self.root.inspect
256
+ output = ":: Yaml2env.root = #{value}"
257
+ puts output
258
+ end
259
+
260
+ def log_values(*args)
261
+ if args.blank?
262
+ should_include = proc { true }
263
+ elsif args.first.is_a?(Regexp)
264
+ key_pattern = args.shift
265
+ should_include = proc { |key| key =~ key_pattern }
266
+ else
267
+ should_include = proc { |key| args.any? { |key_string| key == key_string; } }
268
+ end
269
+ key_values = {}
270
+ ::ENV.keys.sort.each do |k,v|
271
+ key_values[k] = ENV[k] if should_include.call(k)
272
+ end
273
+ print ":: ENV = "
274
+ puts format_output key_values
275
+ end
276
+
277
+ def assert_keys!(*required_keys)
278
+ raise ArgumentError, "Expected ENV-keys, but got: #{required_keys.inspect}" if required_keys.blank?
279
+ raise ArgumentError, "Expected ENV-keys, but got: #{required_keys.inspect}" unless required_keys.first.is_a?(String) || required_keys.first.is_a?(Symbol)
280
+
281
+ required_keys = required_keys.collect { |k| k.to_s }
282
+ missing_keys = required_keys - ::ENV.keys
283
+
284
+ if missing_keys.size == 0
285
+ true
286
+ else
287
+ raise MissingConfigKeyError, "Assertion failed, no such ENV-keys loaded: #{missing_keys}"
288
+ end
289
+ end
290
+
291
+ def assert_keys(*required_keys)
292
+ begin
293
+ self.assert_keys!(*required_keys)
294
+ true
295
+ rescue Error => e
296
+ print "[Yaml2env] WARN: Assertion failed, no such ENV-keys loaded: "
297
+ puts format_output required_keys
298
+ false
299
+ end
300
+ end
301
+
302
+ def assert_values!(key_values)
303
+ raise ArgumentError, "Expected hash, but got: #{key_values.inspect}" unless key_values.is_a?(Hash) && key_values.present?
304
+ raise ArgumentError, "Expected hash with string-regexp values, but got: #{key_values.inspect}" unless key_values.all? { |k, v| v.is_a?(Regexp) }
305
+
306
+ self.assert_keys! *key_values.keys
307
+
308
+ failed_assertions = {}
309
+
310
+ key_values.each do |k, v|
311
+ k = k.to_s
312
+ failed_assertions[k] = ::ENV[k] unless ::ENV[k] =~ v
313
+ end
314
+
315
+ if failed_assertions.keys.size == 0
316
+ true
317
+ else
318
+ raise InvalidConfigValueError, "Assertion failed, invalid values: #{failed_assertions}"
319
+ end
320
+ end
321
+
322
+ def assert_values(key_values)
323
+ begin
324
+ self.assert_values!(key_values)
325
+ true
326
+ rescue Error => e
327
+ print "[Yaml2env] WARN: Assertion failed, invalid values: "
328
+ puts format_output key_values
329
+ false
330
+ end
331
+ end
332
+
130
333
  protected
334
+
335
+ # Work around helpers to make output specs pass on different Ruby version (ordered hash problem). Grrr...
336
+ def format_output(array_or_hash)
337
+ if array_or_hash.is_a?(Array)
338
+ array_or_hash.collect(&:to_s).sort.collect { |k| "#{k.inspect}" }.join(", ")
339
+ elsif array_or_hash.is_a?(Hash)
340
+ array_or_hash = ActiveSupport::HashWithIndifferentAccess.new(array_or_hash)
341
+ array_or_hash.keys.collect(&:to_s).sort.collect { |k| "#{k.inspect} => #{array_or_hash[k].inspect}" }.join(", ")
342
+ end
343
+ end
344
+
345
+ def pretty(*args)
346
+ begin
347
+ ap *args
348
+ rescue
349
+ pp *args
350
+ end
351
+ end
352
+
353
+ def info(message)
354
+ self.logger.info message if self.logger?
355
+ # puts message
356
+ end
357
+
358
+ # FIXME: Should show filepath for calle.
359
+ def warn(message)
360
+ self.logger.warn(message) if self.logger?
361
+ # puts message
362
+ end
363
+
131
364
  def load_config(config_file)
132
365
  YAML.load(File.open(config_file))
133
366
  end
@@ -136,6 +369,7 @@ module Yaml2env
136
369
  config = self.load_config(config_file)
137
370
  config[env]
138
371
  end
372
+
139
373
  end
140
374
 
141
375
  end
@@ -0,0 +1,19 @@
1
+ development:
2
+ api_key: DEVELOPMENT_KEY_2
3
+ api_secret: DEVELOPMENT_SECRET_2
4
+
5
+ staging:
6
+ api_key: STAGING_KEY_2
7
+ api_secret: STAGING_SECRET_2
8
+
9
+ production:
10
+ api_key: PRODUCTION_KEY_2
11
+ api_secret: PRODUCTION_SECRET_2
12
+
13
+ test:
14
+ api_key: TEST_KEY_2
15
+ api_secret: TEST_SECRET_2
16
+
17
+ nyan_cat_mode:
18
+ api_key: NYAN_CAT_MODE_KEY_2
19
+ api_secret: NYAN_CAT_MODE_SECRET_2
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,61 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require 'rubygems'
3
- require 'bundler'
4
- Bundler.require
5
-
6
2
  require 'minitest/autorun'
7
3
  require 'minitest/unit'
8
4
  require 'minitest/spec'
9
5
  require 'minitest/pride'
10
6
  require 'minitest/mock'
7
+ require 'mocha'
11
8
 
12
9
  require 'yaml2env'
13
10
 
11
+ def rack!(loaded)
12
+ if loaded
13
+ ::ENV['RACK_ROOT'] = '/home/grimen/development/rack_app'
14
+ ::ENV['RACK_ENV'] = 'rack_env'
15
+ else
16
+ ::ENV['RACK_ROOT'] = nil
17
+ ::ENV['RACK_ENV'] = nil
18
+ end
19
+ end
20
+
21
+ def rails!(loaded)
22
+ if loaded
23
+ eval <<-EVAL
24
+ unless defined?(::Rails)
25
+ module ::Rails
26
+ class << self
27
+ attr_accessor :root, :env
28
+ end
29
+ end
30
+ end
31
+ EVAL
32
+ Rails.root = '/home/grimen/development/rails_app'
33
+ Rails.env = 'rails_env'
34
+ else
35
+ Object.send(:remove_const, :Rails) if defined?(::Rails)
36
+ end
37
+ end
38
+
39
+ def sinatra!(loaded)
40
+ if loaded
41
+ eval <<-EVAL
42
+ unless defined?(::Sinatra::Application)
43
+ module ::Sinatra
44
+ class Application
45
+ class << self
46
+ attr_accessor :root, :environment
47
+ end
48
+ end
49
+ end
50
+ end
51
+ EVAL
52
+ Sinatra::Application.root = '/home/grimen/development/sinatra_app'
53
+ Sinatra::Application.environment = 'sinatra_env'
54
+ else
55
+ Object.send(:remove_const, :Sinatra) if defined?(::Sinatra::Application)
56
+ end
57
+ end
58
+
14
59
  def silence_all_warnings
15
60
  # Ruby 1.8: Kernel.silence_warnings { yield }
16
61
  old_verbose = $VERBOSE