config_reader 0.0.9 → 1.0.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/Gemfile.lock +28 -1
- data/README.rdoc +22 -8
- data/Rakefile +1 -1
- data/config_reader.gemspec +12 -10
- data/lib/config_reader/version.rb +1 -1
- data/lib/config_reader.rb +60 -24
- data/spec/config_reader_spec.rb +59 -4
- data/spec/sekrets_config.rb +4 -0
- data/spec/sekrets_config.yml.enc +0 -0
- data/spec/spec_helper.rb +3 -3
- data/spec/test_config.yml +3 -3
- metadata +55 -26
- data/spec/spec.opts +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ae749330c14b4055e3f45286b3c30036f5e8eeee
|
4
|
+
data.tar.gz: 87e0b4ec76ad3f9a923bd0124732f8de3909c499
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ce883b8f16a952fb8f9e459c43d2702e32f8f5c98fe2066b0363b3d676370926ef96b09380e97b5f65639a64e7699d49327e980840dc68d6e50e4e968bea9862
|
7
|
+
data.tar.gz: ddf297e0d4e4eb77f8e2d9b7af228c22b067034af11cd36ceaf3ed579ee8799b473ebf9598d10b213f21ce2bfb1f2cd7a4207f57cd36a7a767df97bd866703f8
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,18 +1,45 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
config_reader (0.0
|
4
|
+
config_reader (1.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
+
arrayfields (4.9.2)
|
10
|
+
chronic (0.10.2)
|
11
|
+
coderay (1.1.0)
|
12
|
+
coerce (0.0.6)
|
13
|
+
chronic (>= 0.6.2)
|
14
|
+
fattr (2.2.2)
|
15
|
+
highline (1.6.21)
|
16
|
+
main (6.0.0)
|
17
|
+
arrayfields (>= 4.7.4)
|
18
|
+
chronic (>= 0.6.2)
|
19
|
+
fattr (>= 2.2.0)
|
20
|
+
map (>= 5.1.0)
|
21
|
+
map (6.5.3)
|
22
|
+
method_source (0.8.2)
|
23
|
+
pry (0.9.12.6)
|
24
|
+
coderay (~> 1.0)
|
25
|
+
method_source (~> 0.8)
|
26
|
+
slop (~> 3.4)
|
9
27
|
rake (0.9.2.2)
|
10
28
|
rspec (1.3.2)
|
29
|
+
sekrets (1.7.0)
|
30
|
+
coerce (>= 0.0.3)
|
31
|
+
fattr (>= 2.2.1)
|
32
|
+
highline (>= 1.6.15)
|
33
|
+
main (>= 5.1.1)
|
34
|
+
map (>= 6.3.0)
|
35
|
+
slop (3.5.0)
|
11
36
|
|
12
37
|
PLATFORMS
|
13
38
|
ruby
|
14
39
|
|
15
40
|
DEPENDENCIES
|
16
41
|
config_reader!
|
42
|
+
pry
|
17
43
|
rake
|
18
44
|
rspec (= 1.3.2)
|
45
|
+
sekrets (~> 1.7.0)
|
data/README.rdoc
CHANGED
@@ -1,19 +1,21 @@
|
|
1
1
|
= ConfigReader
|
2
2
|
|
3
|
+
{<img src="https://codeclimate.com/github/UnderpantsGnome/config_reader-gem.png" />}[https://codeclimate.com/github/UnderpantsGnome/config_reader-gem] {<img src="https://travis-ci.org/UnderpantsGnome/config_reader-gem.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/UnderpantsGnome/config_reader-gem]
|
4
|
+
|
3
5
|
Provides a way to manage environment specific configuration settings. It will use the defaults for any environment and override any values you specify for an environment.
|
4
6
|
|
5
7
|
Example config file:
|
6
8
|
|
7
9
|
defaults:
|
8
10
|
site_url: http://localhost:3000
|
9
|
-
host_name:
|
10
|
-
mail_from: noreply@
|
11
|
-
site_name:
|
12
|
-
admin_email: admin@
|
11
|
+
host_name: example.com
|
12
|
+
mail_from: noreply@example.com
|
13
|
+
site_name: example
|
14
|
+
admin_email: admin@example.com
|
13
15
|
blackbird: true
|
14
16
|
|
15
17
|
production:
|
16
|
-
site_url: http://
|
18
|
+
site_url: http://example.com
|
17
19
|
blackbird: false
|
18
20
|
|
19
21
|
test:
|
@@ -25,13 +27,25 @@ Example class:
|
|
25
27
|
self.config_file = 'config/my_config.yml'
|
26
28
|
end
|
27
29
|
|
30
|
+
== Sekrets
|
31
|
+
Now also includes Sekrets integration. https://github.com/ahoward/sekrets
|
32
|
+
|
33
|
+
The format of the sekrets file is the same as the regular file.
|
34
|
+
|
35
|
+
Example class with Sekrets:
|
36
|
+
|
37
|
+
class MyConfig < ConfigReader
|
38
|
+
self.config_file = 'config/my_config.yml'
|
39
|
+
self.sekrets_file = 'config/my_config.yml.enc'
|
40
|
+
end
|
41
|
+
|
28
42
|
Usage:
|
29
43
|
|
30
|
-
MyConfig.mail_from #=> noreply@
|
31
|
-
MyConfig[:mail_from] #=> noreply@
|
44
|
+
MyConfig.mail_from #=> noreply@example.com
|
45
|
+
MyConfig[:mail_from] #=> noreply@example.com
|
32
46
|
|
33
47
|
== Note on Patches/Pull Requests
|
34
|
-
|
48
|
+
|
35
49
|
* Fork the project.
|
36
50
|
* Make your feature addition or bug fix.
|
37
51
|
* Add tests for it. This is important so I don't break it in a
|
data/Rakefile
CHANGED
data/config_reader.gemspec
CHANGED
@@ -1,24 +1,26 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path(
|
3
|
-
require
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'config_reader/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
6
|
+
s.name = 'config_reader'
|
7
7
|
s.version = ConfigReader::VERSION
|
8
|
-
s.authors = [
|
9
|
-
s.email = [
|
10
|
-
s.homepage =
|
8
|
+
s.authors = ['Michael Moen']
|
9
|
+
s.email = ['michael@underpantsgnome.com']
|
10
|
+
s.homepage = ''
|
11
11
|
s.summary = %q{Provides a way to manage environment specific configuration settings.}
|
12
12
|
s.description = %q{Provides a way to manage environment specific configuration settings.}
|
13
13
|
|
14
|
-
s.rubyforge_project =
|
14
|
+
s.rubyforge_project = 'config_reader'
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = [
|
19
|
+
s.require_paths = ['lib']
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
s.add_development_dependency
|
23
|
-
s.add_development_dependency
|
22
|
+
s.add_development_dependency 'rake'
|
23
|
+
s.add_development_dependency 'rspec', '1.3.2'
|
24
|
+
s.add_development_dependency 'sekrets', '~> 1.7.0'
|
25
|
+
s.add_development_dependency 'pry'
|
24
26
|
end
|
data/lib/config_reader.rb
CHANGED
@@ -9,10 +9,9 @@ rescue LoadError
|
|
9
9
|
end
|
10
10
|
|
11
11
|
class ConfigReader
|
12
|
-
@config_file = nil
|
13
|
-
@config = nil
|
14
|
-
|
15
12
|
class << self
|
13
|
+
attr_accessor :config_file, :config, :sekrets_file
|
14
|
+
|
16
15
|
def config
|
17
16
|
@config = nil unless defined?(@config)
|
18
17
|
@config ||= reload
|
@@ -23,27 +22,9 @@ class ConfigReader
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def reload
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
conf = YAML.load(ERB.new(File.open(find_config).read).result)
|
30
|
-
else
|
31
|
-
conf = YAML.load(File.open(find_config).read)
|
32
|
-
end
|
33
|
-
|
34
|
-
raise 'No config found' unless conf
|
35
|
-
|
36
|
-
if defined?(Rails) && Rails.env
|
37
|
-
env = Rails.env
|
38
|
-
elsif defined?(RAILS_ENV)
|
39
|
-
env = RAILS_ENV
|
40
|
-
elsif defined?(APP_ENV)
|
41
|
-
env = APP_ENV
|
42
|
-
end
|
43
|
-
|
44
|
-
_conf = conf['defaults']
|
45
|
-
_conf.merge!(conf[env]) if conf[env]
|
46
|
-
ConfigReader::MagicHash.convert_hash(_conf)
|
25
|
+
# require 'pry'
|
26
|
+
# binding.pry
|
27
|
+
merge_configs(find_env, load_config, load_sekrets)
|
47
28
|
end
|
48
29
|
|
49
30
|
def [](key)
|
@@ -57,6 +38,7 @@ class ConfigReader
|
|
57
38
|
config_file = File.join(dir, @config_file)
|
58
39
|
return config_file if File.exist?(config_file)
|
59
40
|
end
|
41
|
+
|
60
42
|
''
|
61
43
|
end
|
62
44
|
|
@@ -67,5 +49,59 @@ class ConfigReader
|
|
67
49
|
def inspect
|
68
50
|
puts config.inspect
|
69
51
|
end
|
52
|
+
|
53
|
+
def find_env
|
54
|
+
if defined?(Rails) && Rails.env
|
55
|
+
Rails.env
|
56
|
+
elsif defined?(RAILS_ENV)
|
57
|
+
RAILS_ENV
|
58
|
+
elsif defined?(Padrino) && Padrino.env
|
59
|
+
Padrino.env.to_s
|
60
|
+
elsif defined?(PADRINO_ENV)
|
61
|
+
PADRINO_ENV
|
62
|
+
elsif ENV['RACK_ENV']
|
63
|
+
ENV['RACK_ENV']
|
64
|
+
elsif defined?(APP_ENV)
|
65
|
+
APP_ENV
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_config
|
70
|
+
raise 'No config file set' unless @config_file
|
71
|
+
|
72
|
+
if defined?(ERB)
|
73
|
+
conf = YAML.load(ERB.new(File.open(find_config).read).result)
|
74
|
+
else
|
75
|
+
conf = YAML.load(File.open(find_config).read)
|
76
|
+
end
|
77
|
+
|
78
|
+
raise 'No config found' unless conf
|
79
|
+
|
80
|
+
conf
|
81
|
+
end
|
82
|
+
|
83
|
+
def load_sekrets
|
84
|
+
sekrets = {}
|
85
|
+
|
86
|
+
if @sekrets_file
|
87
|
+
begin
|
88
|
+
require 'sekrets'
|
89
|
+
sekrets = ::Sekrets.settings_for(@sekrets_file)
|
90
|
+
raise 'No sekrets found' unless sekrets
|
91
|
+
rescue LoadError
|
92
|
+
$stderr.puts "You specified a sekrets_file, but the sekrets gem isn't available."
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
sekrets
|
97
|
+
end
|
98
|
+
|
99
|
+
def merge_configs(env, conf, sekrets)
|
100
|
+
_conf = conf['defaults']
|
101
|
+
_conf.merge!(sekrets['defaults']) if sekrets && sekrets['defaults']
|
102
|
+
_conf.merge!(conf[env]) if conf[env]
|
103
|
+
_conf.merge!(sekrets[env]) if sekrets && sekrets[env]
|
104
|
+
ConfigReader::MagicHash.convert_hash(_conf)
|
105
|
+
end
|
70
106
|
end
|
71
107
|
end
|
data/spec/config_reader_spec.rb
CHANGED
@@ -3,18 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe "ConfigReader" do
|
4
4
|
describe "parsing a YAML file" do
|
5
5
|
it "should find values with method_missing" do
|
6
|
-
TestConfig.app_name.should == '
|
6
|
+
TestConfig.app_name.should == 'test_app'
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should find values using [] and a string" do
|
10
|
-
TestConfig['app_name'].should == '
|
10
|
+
TestConfig['app_name'].should == 'test_app'
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should find values using [] and a symbol" do
|
14
|
-
TestConfig[:app_name].should == '
|
14
|
+
TestConfig[:app_name].should == 'test_app'
|
15
15
|
end
|
16
16
|
|
17
|
-
it "should find nested values using
|
17
|
+
it "should find nested values using method_missing" do
|
18
18
|
TestConfig.nested_key.value.should == 'test'
|
19
19
|
end
|
20
20
|
|
@@ -25,5 +25,60 @@ describe "ConfigReader" do
|
|
25
25
|
it "should find nested values using [] and a string" do
|
26
26
|
TestConfig['nested_key']['value'].should == 'test'
|
27
27
|
end
|
28
|
+
|
29
|
+
it "should not find sekrets only nested values using method_missing" do
|
30
|
+
lambda { TestConfig.sekrets_only }.should raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not find sekrets only nested values using [] and a symbol" do
|
34
|
+
lambda { TestConfig[:sekrets_only][:value] }.should raise_error
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not find sekrets only nested values using [] and a string" do
|
38
|
+
lambda { TestConfig['sekrets_only']['value'] }.should raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'using sekrets' do
|
44
|
+
ENV['SEKRETS_KEY'] = 'shhh'
|
45
|
+
|
46
|
+
describe "parsing a YAML file" do
|
47
|
+
it "should find values with method_missing" do
|
48
|
+
SekretsConfig.app_name.should == 'test_app_sekret'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should find values using [] and a string" do
|
52
|
+
SekretsConfig['app_name'].should == 'test_app_sekret'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should find values using [] and a symbol" do
|
56
|
+
SekretsConfig[:app_name].should == 'test_app_sekret'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should find nested values using method_missing" do
|
60
|
+
SekretsConfig.nested_key.value.should == 'test_sekret'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should find nested values using [] and a symbol" do
|
64
|
+
SekretsConfig[:nested_key][:value].should == 'test_sekret'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should find nested values using [] and a string" do
|
68
|
+
SekretsConfig['nested_key']['value'].should == 'test_sekret'
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should find sekrets only nested values using method_missing" do
|
72
|
+
SekretsConfig.nested_key.value.should == 'test_sekret'
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should find sekrets only nested values using [] and a symbol" do
|
76
|
+
SekretsConfig[:nested_key][:value].should == 'test_sekret'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should find sekrets only nested values using [] and a string" do
|
80
|
+
SekretsConfig['nested_key']['value'].should == 'test_sekret'
|
81
|
+
end
|
82
|
+
end
|
28
83
|
end
|
29
84
|
end
|
Binary file
|
data/spec/spec_helper.rb
CHANGED
data/spec/test_config.yml
CHANGED
metadata
CHANGED
@@ -1,38 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: config_reader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Moen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-04-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: rspec
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - =
|
31
|
+
- - '='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 1.3.2
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sekrets
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.7.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.7.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
36
69
|
description: Provides a way to manage environment specific configuration settings.
|
37
70
|
email:
|
38
71
|
- michael@underpantsgnome.com
|
@@ -40,7 +73,8 @@ executables: []
|
|
40
73
|
extensions: []
|
41
74
|
extra_rdoc_files: []
|
42
75
|
files:
|
43
|
-
- .gitignore
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
44
78
|
- Gemfile
|
45
79
|
- Gemfile.lock
|
46
80
|
- History.rdoc
|
@@ -52,43 +86,38 @@ files:
|
|
52
86
|
- lib/config_reader/magic_hash.rb
|
53
87
|
- lib/config_reader/version.rb
|
54
88
|
- spec/config_reader_spec.rb
|
55
|
-
- spec/
|
89
|
+
- spec/sekrets_config.rb
|
90
|
+
- spec/sekrets_config.yml.enc
|
56
91
|
- spec/spec_helper.rb
|
57
92
|
- spec/test_config.rb
|
58
93
|
- spec/test_config.yml
|
59
94
|
homepage: ''
|
60
95
|
licenses: []
|
96
|
+
metadata: {}
|
61
97
|
post_install_message:
|
62
98
|
rdoc_options: []
|
63
99
|
require_paths:
|
64
100
|
- lib
|
65
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
102
|
requirements:
|
68
|
-
- -
|
103
|
+
- - ">="
|
69
104
|
- !ruby/object:Gem::Version
|
70
105
|
version: '0'
|
71
|
-
segments:
|
72
|
-
- 0
|
73
|
-
hash: -4112497528289826160
|
74
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
107
|
requirements:
|
77
|
-
- -
|
108
|
+
- - ">="
|
78
109
|
- !ruby/object:Gem::Version
|
79
110
|
version: '0'
|
80
|
-
segments:
|
81
|
-
- 0
|
82
|
-
hash: -4112497528289826160
|
83
111
|
requirements: []
|
84
112
|
rubyforge_project: config_reader
|
85
|
-
rubygems_version:
|
113
|
+
rubygems_version: 2.2.2
|
86
114
|
signing_key:
|
87
|
-
specification_version:
|
115
|
+
specification_version: 4
|
88
116
|
summary: Provides a way to manage environment specific configuration settings.
|
89
117
|
test_files:
|
90
118
|
- spec/config_reader_spec.rb
|
91
|
-
- spec/
|
119
|
+
- spec/sekrets_config.rb
|
120
|
+
- spec/sekrets_config.yml.enc
|
92
121
|
- spec/spec_helper.rb
|
93
122
|
- spec/test_config.rb
|
94
123
|
- spec/test_config.yml
|
data/spec/spec.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour
|