confrider 0.0.1 → 0.0.2
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 +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +38 -5
- data/lib/confrider/core.rb +19 -10
- data/lib/confrider/deep_merge.rb +18 -0
- data/lib/confrider/version.rb +1 -1
- data/lib/confrider.rb +8 -1
- data/spec/lib/confrider/core_spec.rb +21 -7
- metadata +6 -5
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,42 @@
|
|
1
1
|
# Confrider
|
2
2
|
|
3
|
-
|
3
|
+
Configuration managment system with i18n like syntax
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
### little helper(to render yaml files with ERB)
|
8
|
+
|
9
|
+
require "erb"
|
10
|
+
require "yaml"
|
11
|
+
def load_yml(yml_path)
|
12
|
+
YAML.load(ERB.new(File.read(yml_path)).result(binding))
|
13
|
+
end
|
14
|
+
|
15
|
+
### settings.yml (example)
|
16
|
+
|
17
|
+
app:
|
18
|
+
name: some app name
|
19
|
+
version: <%= File.read('VERSION') %>
|
20
|
+
subnamespace:
|
21
|
+
another_key: value
|
22
|
+
|
23
|
+
### using Confrider
|
24
|
+
|
25
|
+
$cfg = Confrider.from_hash(load_yml('/path/to/settings.yml'))
|
26
|
+
# or short form
|
27
|
+
$cfg = Confrider(load_yml('/path/to/settings.yml'))
|
28
|
+
$cfg['app.name'] # => 'some app name'
|
29
|
+
$cfg['app.version'] # will be rendered through ERB
|
30
|
+
$cfg['app.subnamespace'] # => {'another_key' => 'value'}
|
31
|
+
$cfg['app.subnamespace.another_key'] # => 'value'
|
32
|
+
$cfg['non.existent.key'] # => nil
|
33
|
+
$cfg['non.existent.key', 'default'] # => 'default'
|
34
|
+
|
35
|
+
### deep merge hashes
|
36
|
+
|
37
|
+
# load additional hash that will be deeply merged
|
38
|
+
$cfg.from_hash(load_yml('/path/to/settings_local.yml'))
|
39
|
+
|
4
40
|
|
5
41
|
## Installation
|
6
42
|
|
@@ -16,10 +52,6 @@ Or install it yourself as:
|
|
16
52
|
|
17
53
|
$ gem install confrider
|
18
54
|
|
19
|
-
## Usage
|
20
|
-
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
|
23
55
|
## Contributing
|
24
56
|
|
25
57
|
1. Fork it
|
@@ -27,3 +59,4 @@ TODO: Write usage instructions here
|
|
27
59
|
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
60
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
61
|
5. Create new Pull Request
|
62
|
+
|
data/lib/confrider/core.rb
CHANGED
@@ -1,29 +1,38 @@
|
|
1
1
|
class Confrider::Core
|
2
|
-
def initialize
|
2
|
+
def initialize
|
3
3
|
@vault = {}
|
4
|
-
save_hash(nil, hash)
|
5
4
|
end
|
6
5
|
|
7
6
|
def [](key, default_value = nil)
|
8
7
|
@vault.fetch(key, default_value)
|
9
8
|
end
|
10
9
|
|
10
|
+
def from_hash(hash)
|
11
|
+
save_hash(nil, hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
def normalize_keys(*keys)
|
15
|
+
keys.join('.').gsub(/^\./, '')
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
11
20
|
def save(key, value)
|
12
21
|
@vault[key] = value
|
13
22
|
end
|
14
23
|
|
15
24
|
def save_hash(key, hash)
|
16
|
-
|
25
|
+
if key
|
26
|
+
@vault[key] ||= {}
|
27
|
+
@vault[key].deep_merge!(hash)
|
28
|
+
end
|
17
29
|
hash.each do |inner_key, value|
|
18
30
|
normalized_key = normalize_keys(key, inner_key)
|
19
|
-
|
20
|
-
|
21
|
-
|
31
|
+
if value.is_a? Hash
|
32
|
+
save_hash(normalized_key, value)
|
33
|
+
else
|
34
|
+
save(normalized_key, value)
|
22
35
|
end
|
23
36
|
end
|
24
37
|
end
|
25
|
-
|
26
|
-
def normalize_keys(*keys)
|
27
|
-
keys.join('.').gsub(/^\./, '')
|
28
|
-
end
|
29
38
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# ported from active_support/core_ext/hash/deep_merge
|
2
|
+
|
3
|
+
class Hash
|
4
|
+
# Returns a new hash with +self+ and +other_hash+ merged recursively.
|
5
|
+
def deep_merge(other_hash)
|
6
|
+
dup.deep_merge!(other_hash)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns a new hash with +self+ and +other_hash+ merged recursively.
|
10
|
+
# Modifies the receiver in place.
|
11
|
+
def deep_merge!(other_hash)
|
12
|
+
other_hash.each_pair do |k,v|
|
13
|
+
tv = self[k]
|
14
|
+
self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
|
15
|
+
end
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
data/lib/confrider/version.rb
CHANGED
data/lib/confrider.rb
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
require 'confrider/version'
|
2
|
+
require 'confrider/deep_merge'
|
2
3
|
require 'confrider/core'
|
3
4
|
|
4
5
|
module Confrider
|
5
6
|
def self.from_hash(hash)
|
6
|
-
Confrider::Core.new
|
7
|
+
Confrider::Core.new.tap do |o|
|
8
|
+
o.from_hash hash
|
9
|
+
end
|
7
10
|
end
|
8
11
|
end
|
12
|
+
|
13
|
+
def Confrider(hash)
|
14
|
+
Confrider.from_hash(hash)
|
15
|
+
end
|
@@ -1,23 +1,37 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Confrider::Core do
|
4
|
-
let(:cfg) { Confrider::Core.new :foo => 'bar' }
|
4
|
+
let(:cfg) { Confrider::Core.new.tap { |o| o.from_hash :foo => 'bar'} }
|
5
5
|
|
6
|
-
|
6
|
+
describe '#initialize' do
|
7
7
|
it 'should init @vault' do
|
8
|
-
cfg.instance_variable_get('@vault').should
|
8
|
+
cfg.instance_variable_get('@vault').should be_a Hash
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
let(:cfg)
|
12
|
+
describe '#from_hash' do
|
13
|
+
let(:cfg) do
|
14
|
+
Confrider::Core.new.tap do |o|
|
15
|
+
o.from_hash 'foo' => {'bar' => {'baz' => 'value'}}
|
16
|
+
end
|
17
|
+
end
|
14
18
|
|
15
19
|
it 'should flatten hash keys' do
|
16
20
|
cfg['foo.bar.baz'].should == 'value'
|
17
21
|
end
|
22
|
+
|
23
|
+
it 'should merge nested hashes' do
|
24
|
+
cfg.from_hash 'foo' => {'bar' => {'kii' => 'kiivalue'}}
|
25
|
+
cfg['foo.bar.baz'].should == 'value'
|
26
|
+
cfg['foo.bar.kii'].should == 'kiivalue'
|
27
|
+
|
28
|
+
# hash should be merged
|
29
|
+
cfg['foo.bar'].should include('kii' => 'kiivalue')
|
30
|
+
cfg['foo.bar'].should include('baz' => 'value')
|
31
|
+
end
|
18
32
|
end
|
19
33
|
|
20
|
-
|
34
|
+
describe '#[]' do
|
21
35
|
it 'should return value' do
|
22
36
|
cfg['foo'].should == 'bar'
|
23
37
|
end
|
@@ -27,7 +41,7 @@ describe Confrider::Core do
|
|
27
41
|
end
|
28
42
|
end
|
29
43
|
|
30
|
-
|
44
|
+
describe '#normalize_keys' do
|
31
45
|
it 'should join keys with "."' do
|
32
46
|
cfg.normalize_keys('q', 'a', 'z').should == 'q.a.z'
|
33
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: confrider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- confrider.gemspec
|
45
45
|
- lib/confrider.rb
|
46
46
|
- lib/confrider/core.rb
|
47
|
+
- lib/confrider/deep_merge.rb
|
47
48
|
- lib/confrider/version.rb
|
48
49
|
- spec/lib/confrider/core_spec.rb
|
49
50
|
- spec/lib/confrider/version_spec.rb
|
@@ -63,7 +64,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
64
|
version: '0'
|
64
65
|
segments:
|
65
66
|
- 0
|
66
|
-
hash: -
|
67
|
+
hash: -3148026561097312103
|
67
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
69
|
none: false
|
69
70
|
requirements:
|
@@ -72,10 +73,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
73
|
version: '0'
|
73
74
|
segments:
|
74
75
|
- 0
|
75
|
-
hash: -
|
76
|
+
hash: -3148026561097312103
|
76
77
|
requirements: []
|
77
78
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.8.
|
79
|
+
rubygems_version: 1.8.18
|
79
80
|
signing_key:
|
80
81
|
specification_version: 3
|
81
82
|
summary: manage config options like i18n
|