static_config 0.0.1
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/.autotest +5 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/Gemfile +10 -0
- data/README.md +35 -0
- data/Rakefile +6 -0
- data/lib/static_config.rb +11 -0
- data/lib/static_config/aggregation/first.rb +22 -0
- data/lib/static_config/aggregation/merge.rb +26 -0
- data/lib/static_config/config_hash.rb +23 -0
- data/lib/static_config/config_proxy.rb +21 -0
- data/lib/static_config/configurer.rb +42 -0
- data/lib/static_config/reader/base.rb +18 -0
- data/lib/static_config/reader/environment.rb +28 -0
- data/lib/static_config/reader/yaml_env.rb +18 -0
- data/lib/static_config/reader/yaml_file.rb +21 -0
- data/lib/static_config/version.rb +3 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/static_config/aggregation/first_spec.rb +38 -0
- data/spec/static_config/aggregation/merge_spec.rb +39 -0
- data/spec/static_config/config_hash_spec.rb +11 -0
- data/spec/static_config/config_proxy_spec.rb +31 -0
- data/spec/static_config/reader/environment_spec.rb +16 -0
- data/spec/static_config/reader/yaml_env_spec.rb +11 -0
- data/spec/static_config/reader/yaml_file_spec.rb +34 -0
- data/spec/static_config/reader/yaml_file_spec.rb.empty +0 -0
- data/spec/static_config/reader/yaml_file_spec.rb.yml +2 -0
- data/static_config.gemspec +21 -0
- metadata +102 -0
data/.autotest
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
Example
|
2
|
+
-------
|
3
|
+
|
4
|
+
MyAppConfig = StaticConfig.build do
|
5
|
+
first do
|
6
|
+
env_yaml 'my_app_config'
|
7
|
+
file Rails.root.join('config/my_app.yml'), :section => Rails.env
|
8
|
+
end
|
9
|
+
env 'MY_APP'
|
10
|
+
end
|
11
|
+
|
12
|
+
Now you have an object MyAppConfig that you can use anywhere.
|
13
|
+
|
14
|
+
For instance, if your `config/my_app.yml` looks like this:
|
15
|
+
|
16
|
+
development:
|
17
|
+
user:
|
18
|
+
selected:
|
19
|
+
color: orange
|
20
|
+
|
21
|
+
You could get `orange` by doing this:
|
22
|
+
|
23
|
+
MyAppConfig.user.selected.color
|
24
|
+
|
25
|
+
You could override it at runtime by setting the environment variable
|
26
|
+
`MY_APP_USER_SELECTED_COLOR`.
|
27
|
+
|
28
|
+
You can also override the entire `config/my_app.yml` file by storing
|
29
|
+
some yaml in an environment variable called `my_app_config`.
|
30
|
+
|
31
|
+
To get your config to reload on each request in Rails, add this:
|
32
|
+
|
33
|
+
Rails.application.config.to_prepare do
|
34
|
+
MyAppConfig.reload!
|
35
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module StaticConfig
|
2
|
+
module Aggregation
|
3
|
+
class First
|
4
|
+
def initialize(readers)
|
5
|
+
@readers = readers
|
6
|
+
end
|
7
|
+
|
8
|
+
def read
|
9
|
+
@readers.inject(nil) { |res, reader| res || empty_to_nil(reader.read) } || {}
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def empty_to_nil(hash)
|
14
|
+
if hash && hash.size > 0
|
15
|
+
hash
|
16
|
+
else
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module StaticConfig
|
2
|
+
module Aggregation
|
3
|
+
class Merge
|
4
|
+
def initialize(readers)
|
5
|
+
@readers = readers
|
6
|
+
end
|
7
|
+
|
8
|
+
def read
|
9
|
+
@readers.inject({}) { |res, reader| deep_merge res, reader.read }
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def deep_merge base, overrides
|
14
|
+
overrides.inject(base.dup) { |res, (key, value)|
|
15
|
+
res[key] =
|
16
|
+
if res[key].is_a?(Hash) && value.is_a?(Hash)
|
17
|
+
deep_merge res[key], value
|
18
|
+
else
|
19
|
+
value
|
20
|
+
end
|
21
|
+
res
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module StaticConfig
|
2
|
+
class ConfigHash
|
3
|
+
def initialize(data)
|
4
|
+
@data = data
|
5
|
+
end
|
6
|
+
|
7
|
+
def method_missing(attr, *args)
|
8
|
+
if value = @data[attr.to_s]
|
9
|
+
if value.is_a? Hash
|
10
|
+
ConfigHash.new value
|
11
|
+
else
|
12
|
+
value
|
13
|
+
end
|
14
|
+
else
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def ==(other)
|
20
|
+
super || @data == other
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'static_config/config_hash'
|
2
|
+
|
3
|
+
module StaticConfig
|
4
|
+
class ConfigProxy
|
5
|
+
def initialize(reader)
|
6
|
+
@reader = reader
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(*args)
|
10
|
+
config.send(*args)
|
11
|
+
end
|
12
|
+
|
13
|
+
def config
|
14
|
+
@config ||= ConfigHash.new @reader.read
|
15
|
+
end
|
16
|
+
|
17
|
+
def reload!
|
18
|
+
@config = nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'static_config/config_proxy'
|
2
|
+
require 'static_config/aggregation/merge'
|
3
|
+
require 'static_config/aggregation/first'
|
4
|
+
require 'static_config/reader/environment'
|
5
|
+
require 'static_config/reader/yaml_env'
|
6
|
+
require 'static_config/reader/yaml_file'
|
7
|
+
|
8
|
+
module StaticConfig
|
9
|
+
class Configurer
|
10
|
+
def build
|
11
|
+
ConfigProxy.new StaticConfig::Aggregation::Merge.new(self.readers)
|
12
|
+
end
|
13
|
+
def first(&block)
|
14
|
+
push_readers do
|
15
|
+
instance_eval(&block)
|
16
|
+
add StaticConfig::Aggregation::First.new self.readers
|
17
|
+
end
|
18
|
+
end
|
19
|
+
def env(var_prefix)
|
20
|
+
add StaticConfig::Reader::Environment.new(:env_prefix => var_prefix)
|
21
|
+
end
|
22
|
+
def env_yaml(var_name)
|
23
|
+
add StaticConfig::Reader::YamlEnv.new(:env => var_name)
|
24
|
+
end
|
25
|
+
def file(path, opts={})
|
26
|
+
add StaticConfig::Reader::YamlFile.new(opts.merge(:file => path))
|
27
|
+
end
|
28
|
+
def add(reader)
|
29
|
+
readers << reader
|
30
|
+
end
|
31
|
+
def push_readers
|
32
|
+
old_readers, self.readers = self.readers, []
|
33
|
+
yield
|
34
|
+
ensure
|
35
|
+
self.readers = old_readers
|
36
|
+
end
|
37
|
+
def readers
|
38
|
+
@readers ||= []
|
39
|
+
end
|
40
|
+
attr_writer :readers
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'static_config/reader/base'
|
2
|
+
|
3
|
+
module StaticConfig
|
4
|
+
module Reader
|
5
|
+
class Environment < Base
|
6
|
+
def initialize(opts = {})
|
7
|
+
super
|
8
|
+
@env_prefix = opts[:env_prefix]
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
def raw_data
|
13
|
+
ENV.inject({}) { |res, (name, value)| update(res, name, value) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(data, env_name, env_value)
|
17
|
+
if env_name =~ /^#{@env_prefix}_(.*)/
|
18
|
+
parts = $1.downcase.split(/_/)
|
19
|
+
last_part = parts.pop
|
20
|
+
parts.inject(data) { |h, k| h[k] ||= {} }[last_part] = env_value
|
21
|
+
end
|
22
|
+
data
|
23
|
+
rescue => e
|
24
|
+
raise "Unable to fit #{env_name} into #{data.inspect}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'static_config/reader/base'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module StaticConfig
|
5
|
+
module Reader
|
6
|
+
class YamlEnv < Base
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
@env = opts[:env]
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
def raw_data
|
14
|
+
YAML.load(ENV[@env])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'static_config/reader/base'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module StaticConfig
|
5
|
+
module Reader
|
6
|
+
class YamlFile < Base
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
@file = opts[:file]
|
10
|
+
@section = opts[:section]
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def raw_data
|
15
|
+
data = YAML.load_file(@file) if File.exists? @file
|
16
|
+
data = data[@section] if data && @section
|
17
|
+
data
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# if necessary.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/aggregation/first'
|
3
|
+
|
4
|
+
describe StaticConfig::Aggregation::First do
|
5
|
+
let(:subject) { described_class.new(readers) }
|
6
|
+
|
7
|
+
class Reader
|
8
|
+
def initialize(data)
|
9
|
+
@read = data
|
10
|
+
end
|
11
|
+
attr_accessor :read
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:nil_reader) { Reader.new(nil) }
|
15
|
+
let(:empty_reader) { Reader.new({}) }
|
16
|
+
let(:reader_A) { Reader.new('a' => '1') }
|
17
|
+
let(:reader_B) { Reader.new('b' => '1') }
|
18
|
+
|
19
|
+
context 'with a not-empty reader' do
|
20
|
+
let(:readers) { [reader_A] }
|
21
|
+
its(:read) { should == {'a' => '1'} }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with just a nil reader' do
|
25
|
+
let(:readers) { [nil_reader] }
|
26
|
+
its(:read) { should == {} }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'with an empty and not-empty reader' do
|
30
|
+
let(:readers) { [empty_reader, reader_A] }
|
31
|
+
its(:read) { should == {'a' => '1'} }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with two readers' do
|
35
|
+
let(:readers) { [reader_B, reader_A] }
|
36
|
+
its(:read) { should == {'b' => '1'} }
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/aggregation/merge'
|
3
|
+
|
4
|
+
describe StaticConfig::Aggregation::Merge do
|
5
|
+
let(:subject) { described_class.new(readers) }
|
6
|
+
|
7
|
+
class Reader
|
8
|
+
def initialize(data)
|
9
|
+
@read = data
|
10
|
+
end
|
11
|
+
attr_accessor :read
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:reader_A) { Reader.new('a' => '1') }
|
15
|
+
let(:reader_A2) { Reader.new('a' => '2') }
|
16
|
+
let(:reader_B) { Reader.new('b' => '1') }
|
17
|
+
let(:deep_reader_A) { Reader.new('really' => { 'deep' => { 'A' => '1' } }) }
|
18
|
+
let(:deep_reader_B) { Reader.new('really' => { 'deep' => { 'B' => '1' } }) }
|
19
|
+
|
20
|
+
context 'with one reader' do
|
21
|
+
let(:readers) { [reader_A] }
|
22
|
+
its(:read) { should == {'a' => '1'} }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with two readers' do
|
26
|
+
let(:readers) { [reader_A, reader_B] }
|
27
|
+
its(:read) { should == {'a' => '1', 'b' => '1'} }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with two readers with the same key' do
|
31
|
+
let(:readers) { [reader_A, reader_A2] }
|
32
|
+
its(:read) { should == {'a' => '2'} }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'with two deeply-nested results' do
|
36
|
+
let(:readers) { [deep_reader_A, deep_reader_B] }
|
37
|
+
its(:read) { should == {'really' => {'deep' => {'A' => '1', 'B' => '1'}}} }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/config_hash'
|
3
|
+
|
4
|
+
describe StaticConfig::ConfigHash do
|
5
|
+
let(:subject) { StaticConfig::ConfigHash.new({'a' => 'ok', 'nested' => { 'key' => 'also ok' }}) }
|
6
|
+
|
7
|
+
its('a') { should == 'ok' }
|
8
|
+
its('nested') { should == { 'key' => 'also ok' } }
|
9
|
+
its('nested.key') { should == 'also ok' }
|
10
|
+
its('missing') { should be_nil }
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/config_proxy'
|
3
|
+
|
4
|
+
describe StaticConfig::ConfigProxy do
|
5
|
+
let(:subject) { described_class.new(reader) }
|
6
|
+
|
7
|
+
context do
|
8
|
+
class SimpleReader
|
9
|
+
def read
|
10
|
+
{'a' => 'ok', 'nested' => { 'key' => 'also ok' }}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
let(:reader) { SimpleReader.new }
|
14
|
+
|
15
|
+
its('a') { should == 'ok' }
|
16
|
+
its('nested') { should == { 'key' => 'also ok' } }
|
17
|
+
its('nested.key') { should == 'also ok' }
|
18
|
+
its('missing') { should be_nil }
|
19
|
+
end
|
20
|
+
|
21
|
+
context do
|
22
|
+
class ChangeableReader
|
23
|
+
attr_accessor :read
|
24
|
+
end
|
25
|
+
let(:reader) { ChangeableReader.new }
|
26
|
+
it 're-reads' do
|
27
|
+
reader.read = { 'a' => 'old' }
|
28
|
+
expect{subject.reload! ; reader.read = { 'a' => 'new' }}.to change{subject.a}.from('old').to('new')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/reader/environment'
|
3
|
+
|
4
|
+
describe StaticConfig::Reader::Environment do
|
5
|
+
before do
|
6
|
+
ENV['MY_CONFIG_DEV_KEY'] = 'value'
|
7
|
+
end
|
8
|
+
after do
|
9
|
+
ENV['MY_CONFIG_DEV_KEY'] = nil
|
10
|
+
end
|
11
|
+
let(:subject) { described_class.read(opts) }
|
12
|
+
|
13
|
+
def opts ; { :env_prefix => 'MY_CONFIG' } ; end
|
14
|
+
it('reads environment') { should == { 'dev' => { 'key' => 'value' } } }
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/reader/yaml_env'
|
3
|
+
|
4
|
+
describe StaticConfig::Reader::YamlEnv do
|
5
|
+
let(:subject) { described_class.read(opts) }
|
6
|
+
after { ENV['my_config_yml'] = nil }
|
7
|
+
before { ENV['my_config_yml'] = "dev:\n key: value\n" }
|
8
|
+
|
9
|
+
def opts ; { :env => 'my_config_yml' } ; end
|
10
|
+
it('loads the yaml') { should == { 'dev' => { 'key' => 'value' } } }
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'static_config/reader/yaml_file'
|
3
|
+
|
4
|
+
describe StaticConfig::Reader::YamlFile do
|
5
|
+
let(:subject) { described_class.read(opts) }
|
6
|
+
|
7
|
+
def opts ; { :file => "#{__FILE__}.yml" } ; end
|
8
|
+
it('loads the yaml') { should == { 'dev' => { 'key' => 'value' } } }
|
9
|
+
|
10
|
+
context 'with section' do
|
11
|
+
def opts ; super.merge :section => 'dev' ; end
|
12
|
+
it('uses the section') { should == { 'key' => 'value' } }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with a section that does not exist' do
|
16
|
+
def opts ; super.merge :section => 'bad' ; end
|
17
|
+
it('is empty') { should == {} }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'with an empty file' do
|
21
|
+
def opts ; { :file => "#{__FILE__}.empty" } ; end
|
22
|
+
it('is empty') { should == {} }
|
23
|
+
|
24
|
+
context 'and a section' do
|
25
|
+
def opts ; super.merge :section => 'section' ; end
|
26
|
+
it('is empty') { should == {} }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with a file that does not exist' do
|
31
|
+
def opts ; { :file => "#{__FILE__}.does.not.exist" } ; end
|
32
|
+
it('is empty') { should == {} }
|
33
|
+
end
|
34
|
+
end
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "static_config/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "static_config"
|
7
|
+
s.version = StaticConfig::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Matt Burke"]
|
10
|
+
s.email = ["spraints@gmail.com"]
|
11
|
+
s.homepage = "http://github.com/spraints/static_config"
|
12
|
+
s.summary = %q{Load configuration from yaml and/or environment variables}
|
13
|
+
s.description = %q{Load configuration from yaml and/or environment variables}
|
14
|
+
|
15
|
+
s.rubyforge_project = "static_config"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: static_config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Matt Burke
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-08-09 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Load configuration from yaml and/or environment variables
|
22
|
+
email:
|
23
|
+
- spraints@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .autotest
|
32
|
+
- .gitignore
|
33
|
+
- .rspec
|
34
|
+
- Gemfile
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- lib/static_config.rb
|
38
|
+
- lib/static_config/aggregation/first.rb
|
39
|
+
- lib/static_config/aggregation/merge.rb
|
40
|
+
- lib/static_config/config_hash.rb
|
41
|
+
- lib/static_config/config_proxy.rb
|
42
|
+
- lib/static_config/configurer.rb
|
43
|
+
- lib/static_config/reader/base.rb
|
44
|
+
- lib/static_config/reader/environment.rb
|
45
|
+
- lib/static_config/reader/yaml_env.rb
|
46
|
+
- lib/static_config/reader/yaml_file.rb
|
47
|
+
- lib/static_config/version.rb
|
48
|
+
- spec/spec_helper.rb
|
49
|
+
- spec/static_config/aggregation/first_spec.rb
|
50
|
+
- spec/static_config/aggregation/merge_spec.rb
|
51
|
+
- spec/static_config/config_hash_spec.rb
|
52
|
+
- spec/static_config/config_proxy_spec.rb
|
53
|
+
- spec/static_config/reader/environment_spec.rb
|
54
|
+
- spec/static_config/reader/yaml_env_spec.rb
|
55
|
+
- spec/static_config/reader/yaml_file_spec.rb
|
56
|
+
- spec/static_config/reader/yaml_file_spec.rb.empty
|
57
|
+
- spec/static_config/reader/yaml_file_spec.rb.yml
|
58
|
+
- static_config.gemspec
|
59
|
+
homepage: http://github.com/spraints/static_config
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 3
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project: static_config
|
88
|
+
rubygems_version: 1.8.4
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Load configuration from yaml and/or environment variables
|
92
|
+
test_files:
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- spec/static_config/aggregation/first_spec.rb
|
95
|
+
- spec/static_config/aggregation/merge_spec.rb
|
96
|
+
- spec/static_config/config_hash_spec.rb
|
97
|
+
- spec/static_config/config_proxy_spec.rb
|
98
|
+
- spec/static_config/reader/environment_spec.rb
|
99
|
+
- spec/static_config/reader/yaml_env_spec.rb
|
100
|
+
- spec/static_config/reader/yaml_file_spec.rb
|
101
|
+
- spec/static_config/reader/yaml_file_spec.rb.empty
|
102
|
+
- spec/static_config/reader/yaml_file_spec.rb.yml
|