qonf 0.0.2 → 0.0.3
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 +4 -4
- data/.rspec +2 -0
- data/README.md +47 -15
- data/Rakefile +7 -0
- data/examples/environed.json +8 -0
- data/examples/simple.json +3 -0
- data/lib/qonf/version.rb +1 -1
- data/lib/qonf.rb +63 -14
- data/qonf.gemspec +1 -0
- data/spec/qonf_spec.rb +47 -0
- data/spec/spec_helper.rb +8 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12132d8454c98e3c2a1424e86cbb6faebb0f51e2
|
4
|
+
data.tar.gz: eda1d01e2b676e61d9438492e11b819df425d961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e401058d8f0a05b2a3ad34b75639d1599673233fc9db17a4e9f367531623c1573beed6bd8dd08f9d283ef6fd7463d37ab4c8018273ba151afb082036df278ba2
|
7
|
+
data.tar.gz: 13104477004369318b7016ee489c85d83e8df055fc28eb9f28d42deecc396ca782ef78225aad1c01f78d15efb3e116d76d2b364e757017ea817dfb5676e9bf2b
|
data/.rspec
ADDED
data/README.md
CHANGED
@@ -2,23 +2,53 @@
|
|
2
2
|
|
3
3
|
Versitle configuration management. Pull data from ENV or config files. Simplest use case:
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Qonf works well with or without Rails. If using Rails, Qonf will assume config files are in `Rails.root/config` directory. Otherwise, you'll need to set the root yourself:
|
8
|
+
|
9
|
+
Qonf.configure do
|
10
|
+
self.base_dir = "./config"
|
11
|
+
end
|
12
|
+
|
13
|
+
Qonf also allows you to use environment based keys, these will come preconfigured for Rails or could be set by other ruby applications:
|
14
|
+
|
15
|
+
Qonf.configure do
|
16
|
+
self.env = "staging" # hash under this key will be merged into top-level hash
|
17
|
+
self.environments = %w{test staging production} # these will be removed from hash if they are top-level keys
|
18
|
+
end
|
19
|
+
|
20
|
+
So, if you config is as follows:
|
21
|
+
|
22
|
+
# config/names.json
|
23
|
+
{
|
24
|
+
"test": {
|
25
|
+
"name": "Test data"
|
26
|
+
},
|
27
|
+
"staging": {
|
28
|
+
"name": "Bob Jones"
|
29
|
+
}
|
30
|
+
}
|
11
31
|
|
12
|
-
Qonf.
|
32
|
+
Qonf.get(:names,:name) # Bob Jones
|
13
33
|
|
14
|
-
|
34
|
+
## Config Files
|
15
35
|
|
16
|
-
|
17
|
-
development:
|
18
|
-
host: localhost
|
19
|
-
```
|
36
|
+
Config files can be either json or yml. They are addressed by name and must live in the `base_dir` path (for Rails, this is `Rails.root/config`)
|
20
37
|
|
21
|
-
|
38
|
+
# config/qonf.json
|
39
|
+
{
|
40
|
+
"host": "http://google.com"
|
41
|
+
}
|
42
|
+
|
43
|
+
Qonf.host # "http://google.com"
|
44
|
+
|
45
|
+
YAML can also be used:
|
46
|
+
|
47
|
+
# config/redis.yml
|
48
|
+
development:
|
49
|
+
host: localhost
|
50
|
+
|
51
|
+
Qonf.get(:redis,:host) # "localhost"
|
22
52
|
|
23
53
|
## Installation
|
24
54
|
|
@@ -34,9 +64,11 @@ Or install it yourself as:
|
|
34
64
|
|
35
65
|
$ gem install qonf
|
36
66
|
|
37
|
-
##
|
67
|
+
## Testing
|
68
|
+
|
69
|
+
Tests are maintained by RSpec. To run test cases:
|
38
70
|
|
39
|
-
|
71
|
+
bundle exec rake test
|
40
72
|
|
41
73
|
## Contributing
|
42
74
|
|
data/Rakefile
CHANGED
data/lib/qonf/version.rb
CHANGED
data/lib/qonf.rb
CHANGED
@@ -3,7 +3,33 @@ require "qonf/version"
|
|
3
3
|
# A simple module to get information quickly out of config files
|
4
4
|
module Qonf
|
5
5
|
@@cache = {} # note, we're caching the config in memory
|
6
|
-
|
6
|
+
|
7
|
+
module Config
|
8
|
+
@@environments = []
|
9
|
+
@@base_dir = nil
|
10
|
+
@@env = nil
|
11
|
+
@@use_cache = true
|
12
|
+
|
13
|
+
[:environments,:env,:base_dir,:use_cache].each do |var|
|
14
|
+
self.class_eval("def self.#{var}=(value); @@#{var} = value; end")
|
15
|
+
self.class_eval("def self.#{var}; @@#{var}; end")
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.load_defaults
|
19
|
+
if defined?(Rails) # Rails defaults
|
20
|
+
self.environments = Dir.glob("#{Rails.root}/config/environments/*.rb").map { |filename| File.basename(filename, ".rb") } # for extraction
|
21
|
+
self.base_dir = "#{Rails.root}/config"
|
22
|
+
self.env = Rails.env
|
23
|
+
self.use_cache = Rails.env != "development"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
load_defaults # load defaults by default
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.configure(&block)
|
31
|
+
Qonf::Config.instance_eval(&block)
|
32
|
+
end
|
7
33
|
|
8
34
|
# Qonf.name -> Qonf.get(:qonf, [:name]) for quick short-hand
|
9
35
|
def self.method_missing(method)
|
@@ -26,23 +52,31 @@ module Qonf
|
|
26
52
|
raise "Invalid config" unless config =~ /^\w+$/
|
27
53
|
config = config.to_sym
|
28
54
|
|
29
|
-
|
55
|
+
# Do we just use cached version?
|
56
|
+
if !Qonf::Config.use_cache || !@@cache.has_key?(config.to_sym)
|
57
|
+
base_path = "#{Qonf::Config.base_dir}/#{config}"
|
30
58
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
formats
|
35
|
-
yml: ->(f){ YAML.load(f) },
|
36
|
-
json: ->(f){ JSON(f.read) }
|
37
|
-
}
|
59
|
+
formats={}
|
60
|
+
formats[:yml] = ->(f){ YAML.load(f) } if defined?(YAML)
|
61
|
+
formats[:json] = ->(f){ JSON(f.read) } if defined?(JSON)
|
62
|
+
raise "Must include JSON or YAML parser" if formats.keys.count == 0
|
38
63
|
|
39
64
|
formats.each do |ext,parser|
|
40
65
|
if File.exists?("#{base_path}.#{ext}")
|
41
66
|
cache = parser.call(File.open("#{base_path}.#{ext}"))
|
42
67
|
raise "Invalid Qonf; must be hash" unless cache.is_a?(Hash)
|
43
|
-
cache = cache
|
44
|
-
|
45
|
-
|
68
|
+
cache = symbolize_keys(cache) # Let's do this as symbols
|
69
|
+
|
70
|
+
# Do we use env key? (e.g. "development")
|
71
|
+
if Qonf::Config.env
|
72
|
+
# TODO: This should be a deep merge?
|
73
|
+
cache.merge!(cache.delete(Qonf::Config.env.to_sym)) if cache.has_key?(Qonf::Config.env.to_sym) # Now merge anything under current env
|
74
|
+
end
|
75
|
+
|
76
|
+
# Remove any other envs (e.g. "staging")
|
77
|
+
Qonf::Config.environments.each do |environment|
|
78
|
+
cache.delete(environment.to_sym)
|
79
|
+
end
|
46
80
|
|
47
81
|
@@cache[config.to_sym] = cache # Store
|
48
82
|
|
@@ -50,10 +84,10 @@ module Qonf
|
|
50
84
|
end
|
51
85
|
end
|
52
86
|
|
53
|
-
raise "Unable to find config for #{config} in #{
|
87
|
+
raise "Unable to find config for #{config} in #{base_path}/*.{#{formats.keys.join(',')}}" if @@cache[config.to_sym].nil?
|
54
88
|
end
|
55
89
|
|
56
|
-
return get_route(@@cache[config.to_sym], route)
|
90
|
+
return get_route(@@cache[config.to_sym], route)
|
57
91
|
end
|
58
92
|
|
59
93
|
def self.reset!
|
@@ -68,4 +102,19 @@ module Qonf
|
|
68
102
|
# TODO: Do we want to accept _ for -?
|
69
103
|
return Qonf.get_route(hash[route.shift.to_sym], route) # Recursive, yo!
|
70
104
|
end
|
105
|
+
|
106
|
+
def self.symbolize_keys(hash)
|
107
|
+
hash.inject({}) do |result, (key, value)|
|
108
|
+
new_key = case key
|
109
|
+
when String then key.to_sym
|
110
|
+
else key
|
111
|
+
end
|
112
|
+
new_value = case value
|
113
|
+
when Hash then symbolize_keys(value)
|
114
|
+
else value
|
115
|
+
end
|
116
|
+
result[new_key] = new_value
|
117
|
+
result
|
118
|
+
end
|
119
|
+
end
|
71
120
|
end
|
data/qonf.gemspec
CHANGED
data/spec/qonf_spec.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe 'qonf examples' do
|
5
|
+
|
6
|
+
it 'should configure correctly' do
|
7
|
+
Qonf.configure do
|
8
|
+
self.base_dir = "."
|
9
|
+
end
|
10
|
+
|
11
|
+
expect(Qonf::Config.base_dir).to eq(".")
|
12
|
+
expect(Qonf::Config.environments).to eq([])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should use Rails config if available' do
|
16
|
+
begin
|
17
|
+
Rails = double("rails", root: 'root', env: 'staging')
|
18
|
+
Qonf::Config.load_defaults
|
19
|
+
|
20
|
+
expect(Qonf::Config.base_dir).to eq("root/config")
|
21
|
+
expect(Qonf::Config.environments).to eq([]) # TODO: Test "environments"
|
22
|
+
expect(Qonf::Config.env).to eq("staging")
|
23
|
+
expect(Qonf::Config.use_cache).to eq(true)
|
24
|
+
ensure
|
25
|
+
Object.send(:remove_const, 'Rails')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should read from correct file path' do
|
30
|
+
Qonf.configure do
|
31
|
+
self.base_dir = "./examples"
|
32
|
+
end
|
33
|
+
|
34
|
+
expect(Qonf.get(:simple, :name)).to eq("Bob Jones")
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should work with environments' do
|
38
|
+
Qonf.configure do
|
39
|
+
self.base_dir = "./examples"
|
40
|
+
self.environments = ['test','production']
|
41
|
+
self.env = 'production'
|
42
|
+
end
|
43
|
+
|
44
|
+
expect(Qonf.get(:environed, :name)).to eq("Steve")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qonf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoff Hayes
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Qonf is a simple configuration management tool
|
42
56
|
email:
|
43
57
|
- hayesgm@gmail.com
|
@@ -46,13 +60,18 @@ extensions: []
|
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- .gitignore
|
63
|
+
- .rspec
|
49
64
|
- Gemfile
|
50
65
|
- LICENSE.txt
|
51
66
|
- README.md
|
52
67
|
- Rakefile
|
68
|
+
- examples/environed.json
|
69
|
+
- examples/simple.json
|
53
70
|
- lib/qonf.rb
|
54
71
|
- lib/qonf/version.rb
|
55
72
|
- qonf.gemspec
|
73
|
+
- spec/qonf_spec.rb
|
74
|
+
- spec/spec_helper.rb
|
56
75
|
homepage: ''
|
57
76
|
licenses:
|
58
77
|
- MIT
|
@@ -78,4 +97,6 @@ signing_key:
|
|
78
97
|
specification_version: 4
|
79
98
|
summary: Simplest use case, add config/qonf.json or config/qonf.yaml and call Qonf.key
|
80
99
|
to pull key from config file. And much more.
|
81
|
-
test_files:
|
100
|
+
test_files:
|
101
|
+
- spec/qonf_spec.rb
|
102
|
+
- spec/spec_helper.rb
|