konfig-yaml 0.9.1 → 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 +5 -5
- data/README.md +2 -9
- data/config/another.yaml +19 -0
- data/config/app.yml +64 -0
- data/lib/konfig_yaml/main.rb +11 -22
- data/lib/konfig_yaml/version.rb +1 -1
- data/spec/fixtures/app.yaml +4 -0
- data/spec/fixtures/erb_config.yml +2 -0
- data/spec/konfig_yaml_spec.rb +15 -22
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 81472d9c7b5adac249a44bf50b5ca8d6746f112ecb12638e32021fd8c134a8a2
|
4
|
+
data.tar.gz: b5063c6f970702f29dae0d9637fc3bb8e9395fa0929a81e5c53bc2c79950c478
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7365f1e19f29aae6627491839a5c622792ff607721865e632aaf554b945ccc05c0e44bbc7ccaa75e8d4c1a3d5719a3b8184e8f3b0adf2f3f45a5238e74248730
|
7
|
+
data.tar.gz: 1f96bb8b49d895c9f296fbd86fe8d05caba42da3a7733715ff30baae90d639974f470904e3c762714e4a345e8c2d2afbb3e90b2dc770a06c833ca2f8c90fec61
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# konfig-yaml for Ruby
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/konfig-yaml)
|
4
|
+
[](http://www.rubydoc.info/gems/konfig-yaml/)
|
4
5
|
[](https://travis-ci.org/tilfin/konfig-yaml-rb)
|
5
6
|
[](https://codeclimate.com/github/tilfin/konfig-yaml-rb)
|
6
7
|
[](https://codeclimate.com/github/tilfin/konfig-yaml-rb/coverage)
|
@@ -43,8 +44,8 @@ config = KonfigYaml.new([name], [opts]);
|
|
43
44
|
* `name` specifys the name of `config/<name>.yml` ( default `app` )
|
44
45
|
* `opts`
|
45
46
|
* `:path` config directory path resolved from the process current one ( default `config` )
|
47
|
+
* `:erb` whether expand ERB or not ( default `false` )
|
46
48
|
* `:env` Execution environment ( default **RUBY_ENV** value, **RAILS_ENV** value, **RACK_ENV** value, or `development` )
|
47
|
-
* `:use_cache` whether using cache ( default `true` )
|
48
49
|
|
49
50
|
### Load a configuration as Static class
|
50
51
|
|
@@ -96,14 +97,6 @@ p config.backend.host # "cms.example.com"
|
|
96
97
|
p config.backend.port # 7080
|
97
98
|
```
|
98
99
|
|
99
|
-
### Clear caches
|
100
|
-
|
101
|
-
For testing purpose
|
102
|
-
|
103
|
-
```
|
104
|
-
KonfigYaml.clear
|
105
|
-
```
|
106
|
-
|
107
100
|
## Example
|
108
101
|
|
109
102
|
### Setup
|
data/config/another.yaml
ADDED
data/config/app.yml
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
default:
|
2
|
+
port: 1080
|
3
|
+
db:
|
4
|
+
host: localhost
|
5
|
+
name: service-${RUBY_ENV:development}
|
6
|
+
user: ${DATABASE_USER:-user}
|
7
|
+
pass: ${DATABASE_PASSWORD:-password}
|
8
|
+
log:
|
9
|
+
level: debug
|
10
|
+
access_limits:
|
11
|
+
- 127.0.0.1
|
12
|
+
entries:
|
13
|
+
- 0
|
14
|
+
- name: A
|
15
|
+
value: 1
|
16
|
+
- name: B
|
17
|
+
value: 2
|
18
|
+
|
19
|
+
development: &dev
|
20
|
+
root_url: http://localhost
|
21
|
+
log:
|
22
|
+
file: log/app.log
|
23
|
+
|
24
|
+
test:
|
25
|
+
<<: *dev
|
26
|
+
log:
|
27
|
+
level: error
|
28
|
+
file: log/test.log
|
29
|
+
|
30
|
+
integration: &deployments
|
31
|
+
root_url: https://api-itg.example.com
|
32
|
+
db:
|
33
|
+
host: ${DATABASE_HOST}
|
34
|
+
log:
|
35
|
+
level: info
|
36
|
+
bucket: storage-service-stg
|
37
|
+
bucket_path: /itg
|
38
|
+
cloud_access_key: aaabbbccc
|
39
|
+
access_limits:
|
40
|
+
- 192.168.0.0/24
|
41
|
+
- 10.0.0.0/8
|
42
|
+
|
43
|
+
staging:
|
44
|
+
<<: *deployments
|
45
|
+
root_url: https://api-stg.example.com
|
46
|
+
bucket_path: /stg
|
47
|
+
|
48
|
+
preproduction:
|
49
|
+
<<: *deployments
|
50
|
+
root_url: https://api-pre.example.com
|
51
|
+
log:
|
52
|
+
level: warn
|
53
|
+
bucket_path: /pre
|
54
|
+
|
55
|
+
production:
|
56
|
+
root_url: https://api.example.com
|
57
|
+
db:
|
58
|
+
host: ${DATABASE_HOST}
|
59
|
+
log:
|
60
|
+
level: error
|
61
|
+
bucket: storage-service
|
62
|
+
bucket_path: /
|
63
|
+
cloud_access_key: xxxyyyzzz
|
64
|
+
access_limits:
|
data/lib/konfig_yaml/main.rb
CHANGED
@@ -11,8 +11,8 @@ class KonfigYaml
|
|
11
11
|
# @param [String] name ('app') the basename of YAML file
|
12
12
|
# @param [Hash] opts the options to intialize
|
13
13
|
# @option opts [String] :env (ENV['RUBY_ENV'] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development') execution environment
|
14
|
+
# @option opts [Boolean] :erb (false) whether evaluate ERB or not
|
14
15
|
# @option opts [String] :path ('config') directory path that contains the YAML file
|
15
|
-
# @option opts [Boolean] :use_cache (true) whether cache settings or not
|
16
16
|
def initialize(name = 'app', opts = nil)
|
17
17
|
if name.is_a?(Hash) && opts.nil?
|
18
18
|
opts = name
|
@@ -20,6 +20,7 @@ class KonfigYaml
|
|
20
20
|
elsif opts.nil?
|
21
21
|
opts = {}
|
22
22
|
end
|
23
|
+
|
23
24
|
hash = self.class.create_hash(name, opts)
|
24
25
|
set_inner_hash(hash)
|
25
26
|
end
|
@@ -56,18 +57,13 @@ class KonfigYaml
|
|
56
57
|
Object.const_set(const_name, cls)
|
57
58
|
end
|
58
59
|
|
59
|
-
# Clear caches
|
60
|
-
def clear
|
61
|
-
@cfg_cache = {}
|
62
|
-
end
|
63
|
-
|
64
60
|
def create_hash(name, opts)
|
65
61
|
name ||= 'app'
|
66
62
|
path = File.expand_path(opts[:path] || 'config', Dir.pwd)
|
67
63
|
env = environment(opts)
|
68
|
-
|
64
|
+
expand_erb = opts.fetch(:erb, false)
|
69
65
|
|
70
|
-
h = load_config(name, env, path,
|
66
|
+
h = load_config(name, env, path, expand_erb)
|
71
67
|
dup_hash_expand_envs(h)
|
72
68
|
end
|
73
69
|
|
@@ -79,24 +75,17 @@ class KonfigYaml
|
|
79
75
|
ENV['RUBY_ENV'] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
|
80
76
|
end
|
81
77
|
|
82
|
-
def
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
def load_config(name, env, path, use_cache)
|
87
|
-
cfg_key = "#{name}/#{env}"
|
88
|
-
if use_cache && cfg_cache.key?(cfg_key)
|
89
|
-
return cfg_cache[cfg_key]
|
90
|
-
end
|
91
|
-
|
92
|
-
data = load_yaml(name, path)
|
93
|
-
cfg_cache[cfg_key] = convert_data_to_hash(data, env)
|
78
|
+
def load_config(name, env, path, expand_erb)
|
79
|
+
data = load_yaml(name, path, expand_erb)
|
80
|
+
convert_data_to_hash(data, env)
|
94
81
|
end
|
95
82
|
|
96
|
-
def load_yaml(name, dir)
|
83
|
+
def load_yaml(name, dir, expand_erb)
|
97
84
|
file_path = Dir.glob("#{dir}/#{name}.{yml,yaml}").first
|
98
85
|
raise ArgumentError.new("Not found configuration yaml file") unless file_path
|
99
|
-
|
86
|
+
str = File.read(file_path)
|
87
|
+
str = ERB.new(str).result if expand_erb
|
88
|
+
YAML.load(str)
|
100
89
|
end
|
101
90
|
|
102
91
|
def convert_data_to_hash(data, env)
|
data/lib/konfig_yaml/version.rb
CHANGED
data/spec/fixtures/app.yaml
CHANGED
data/spec/konfig_yaml_spec.rb
CHANGED
@@ -120,43 +120,31 @@ describe KonfigYaml do
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
describe 'option
|
123
|
+
describe 'option erb' do
|
124
124
|
let!(:path) { File.expand_path("../fixtures", __FILE__) }
|
125
125
|
let!(:pre_instance) { described_class.new }
|
126
126
|
|
127
|
-
before do
|
128
|
-
allow(described_class).to receive(:load_yaml).and_raise('load_yaml called')
|
129
|
-
end
|
130
|
-
|
131
127
|
context 'not specified' do
|
132
|
-
subject { described_class.new }
|
128
|
+
subject { described_class.new('erb_config', path: path) }
|
133
129
|
|
134
|
-
it 'loads
|
135
|
-
expect
|
130
|
+
it 'loads without evaluating ERB' do
|
131
|
+
expect(subject.label).to eq '<%= 3 * 15 %>seconds'
|
136
132
|
end
|
137
133
|
end
|
138
134
|
|
139
135
|
context 'true' do
|
140
|
-
subject { described_class.new(
|
141
|
-
|
142
|
-
it 'loads cached instance without calling load_yaml' do
|
143
|
-
expect{ subject }.not_to raise_error 'load_yaml called'
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'after cache cleared' do
|
147
|
-
before { described_class.clear }
|
136
|
+
subject { described_class.new('erb_config', path: path, erb: true) }
|
148
137
|
|
149
|
-
|
150
|
-
|
151
|
-
end
|
138
|
+
it 'loads with evaluating ERB' do
|
139
|
+
expect(subject.label).to eq '45seconds'
|
152
140
|
end
|
153
141
|
end
|
154
142
|
|
155
143
|
context 'false' do
|
156
|
-
subject { described_class.new(
|
144
|
+
subject { described_class.new('erb_config', path: path, erb: false) }
|
157
145
|
|
158
|
-
it 'loads
|
159
|
-
expect
|
146
|
+
it 'loads without evaluating ERB' do
|
147
|
+
expect(subject.label).to eq '<%= 3 * 15 %>seconds'
|
160
148
|
end
|
161
149
|
end
|
162
150
|
end
|
@@ -207,6 +195,11 @@ describe KonfigYaml do
|
|
207
195
|
expect{ subject.cloud_access_key }.to raise_error(NoMethodError)
|
208
196
|
expect(subject[:cloud_access_key]).to be_nil
|
209
197
|
expect(subject.access_limits).to eq ['127.0.0.1']
|
198
|
+
expect(subject.entries[0]).to eq 0
|
199
|
+
expect(subject.entries[1].name).to eq 'A'
|
200
|
+
expect(subject.entries[1].value).to eq 1
|
201
|
+
expect(subject.entries[2].name).to eq 'B'
|
202
|
+
expect(subject.entries[2].value).to eq 2
|
210
203
|
end
|
211
204
|
end
|
212
205
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: konfig-yaml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toshimitsu Takahashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: neohash
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,12 +75,15 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- LICENSE
|
77
77
|
- README.md
|
78
|
+
- config/another.yaml
|
79
|
+
- config/app.yml
|
78
80
|
- lib/konfig-yaml.rb
|
79
81
|
- lib/konfig_yaml.rb
|
80
82
|
- lib/konfig_yaml/main.rb
|
81
83
|
- lib/konfig_yaml/version.rb
|
82
84
|
- spec/fixtures/another.yml
|
83
85
|
- spec/fixtures/app.yaml
|
86
|
+
- spec/fixtures/erb_config.yml
|
84
87
|
- spec/konfig_yaml_spec.rb
|
85
88
|
- spec/spec_helper.rb
|
86
89
|
homepage: https://github.com/tilfin/konfig-yaml-rb
|
@@ -103,12 +106,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
106
|
version: '0'
|
104
107
|
requirements: []
|
105
108
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.
|
109
|
+
rubygems_version: 2.7.3
|
107
110
|
signing_key:
|
108
111
|
specification_version: 4
|
109
112
|
summary: Loader for YAML configuration with ENVs.
|
110
113
|
test_files:
|
111
114
|
- spec/konfig_yaml_spec.rb
|
112
115
|
- spec/fixtures/another.yml
|
116
|
+
- spec/fixtures/erb_config.yml
|
113
117
|
- spec/fixtures/app.yaml
|
114
118
|
- spec/spec_helper.rb
|
119
|
+
- config/another.yaml
|
120
|
+
- config/app.yml
|