static_config 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,13 +16,37 @@ module StaticConfig
16
16
  def update(data, env_name, env_value)
17
17
  if env_name =~ /^#{@env_prefix}_(.*)/
18
18
  parts = $1.downcase.split(/_/)
19
- last_part = parts.pop
20
- parts.inject(data) { |h, k| h[k] ||= {} }[last_part] = env_value
19
+ value = convert(env_value)
20
+ build(data, parts, value)
21
21
  end
22
22
  data
23
23
  rescue => e
24
24
  raise "Unable to fit #{env_name} into #{data.inspect}"
25
25
  end
26
+
27
+ def build(data, keys, value)
28
+ first, *rest = keys
29
+ while !rest.empty?
30
+ build(data[first] ||= {}, rest, value)
31
+ first += '_' + rest.shift
32
+ end
33
+ data[first] = value
34
+ end
35
+
36
+ def convert env_value
37
+ case env_value
38
+ when /^\d+$/
39
+ env_value.to_i
40
+ when /^(\d*\.\d+)|(\d+\.\d*)$/
41
+ env_value.to_f
42
+ when 'true'
43
+ true
44
+ when 'false'
45
+ false
46
+ else
47
+ env_value
48
+ end
49
+ end
26
50
  end
27
51
  end
28
52
  end
@@ -1,3 +1,3 @@
1
1
  module StaticConfig
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,15 +2,49 @@ require 'spec_helper'
2
2
  require 'static_config/reader/environment'
3
3
 
4
4
  describe StaticConfig::Reader::Environment do
5
- before do
6
- ENV['MY_CONFIG_DEV_KEY'] = 'value'
5
+ def self.has_env(e)
6
+ before do
7
+ @original_env ||= {}
8
+ e.each do |key, value|
9
+ @original_env[key], ENV[key] = ENV[key], value
10
+ end
11
+ end
12
+ after do
13
+ e.each do |key, _|
14
+ ENV[key] = @original_env[key]
15
+ end
16
+ end
7
17
  end
8
- after do
9
- ENV['MY_CONFIG_DEV_KEY'] = nil
10
- end
11
- let(:subject) { described_class.read(opts) }
12
18
 
19
+ let(:subject) { described_class.read(opts) }
13
20
  def opts ; { :env_prefix => 'MY_CONFIG' } ; end
14
- it('reads environment') { should == { 'dev' => { 'key' => 'value' } } }
21
+
22
+ context do
23
+ has_env 'MY_CONFIG_TEST' => 'value'
24
+ it('reads environment') { should == { 'test' => 'value' } }
25
+ end
26
+
27
+ context do
28
+ has_env 'MY_CONFIG_A_B_C' => 'D'
29
+ it { subject['a_b_c'].should == 'D' }
30
+ it { subject['a']['b_c'].should == 'D' }
31
+ it { subject['a_b']['c'].should == 'D' }
32
+ it { subject['a']['b']['c'].should == 'D' }
33
+ end
34
+
35
+ context do
36
+ has_env({
37
+ 'MY_CONFIG_INT' => '123',
38
+ 'MY_CONFIG_TRUE' => 'true',
39
+ 'MY_CONFIG_FALSE' => 'false',
40
+ 'MY_CONFIG_FLOAT' => '123.45',
41
+ 'MY_CONFIG_STRING' => 'string',
42
+ })
43
+ it { subject['int'].should == 123 }
44
+ it { subject['true'].should == true }
45
+ it { subject['false'].should == false }
46
+ it { subject['float'].should == 123.45 }
47
+ it { subject['string'].should == 'string' }
48
+ end
15
49
  end
16
50
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: static_config
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Burke
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-09 00:00:00 Z
18
+ date: 2011-09-12 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Load configuration from yaml and/or environment variables