config-parser 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +16 -0
- data/Gemfile.lock +15 -13
- data/{README.markdown → README.md} +15 -7
- data/config-parser.gemspec +5 -6
- data/lib/common/options.rb +6 -11
- data/spec/fixtures/example_config.yml +18 -0
- data/spec/fixtures/example_config_local.yml +14 -0
- data/spec/local_overwrite_spec.rb +26 -0
- data/spec/nested_values_spec.rb +18 -0
- data/spec/read_values_spec.rb +13 -0
- metadata +30 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 87a783bc84cb4b18d7c595ab1d189fc96de95b37be769e8d9283b6a6f7de6dd3
|
4
|
+
data.tar.gz: ea1ea23ec0ac507e57148e407ced402f96a26da73baf18ba352794eafe74e978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fdea9dede402cd33725eee39f9261eadd47890e0cc5d58b06be7bf3313fe2a7d91fb7676636c86627b30158f13feb5759e6edd0e31f6757ac8848a72001fced
|
7
|
+
data.tar.gz: f26277e7c6874c3bf4ad4cd33f7c80859ae80028f9a5145a2661b6aa8c0b5e7cbeb202853548d22e29c71270cbd1ca7c07a24c38531860a101f7bac00c801bc3
|
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,36 +1,38 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
config-parser (0.
|
4
|
+
config-parser (0.4.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
deep_merge (1.2.1)
|
9
10
|
diff-lcs (1.3)
|
10
|
-
rspec (3.
|
11
|
-
rspec-core (~> 3.
|
12
|
-
rspec-expectations (~> 3.
|
13
|
-
rspec-mocks (~> 3.
|
14
|
-
rspec-core (3.
|
15
|
-
rspec-support (~> 3.
|
16
|
-
rspec-expectations (3.
|
11
|
+
rspec (3.9.0)
|
12
|
+
rspec-core (~> 3.9.0)
|
13
|
+
rspec-expectations (~> 3.9.0)
|
14
|
+
rspec-mocks (~> 3.9.0)
|
15
|
+
rspec-core (3.9.0)
|
16
|
+
rspec-support (~> 3.9.0)
|
17
|
+
rspec-expectations (3.9.0)
|
17
18
|
diff-lcs (>= 1.2.0, < 2.0)
|
18
|
-
rspec-support (~> 3.
|
19
|
+
rspec-support (~> 3.9.0)
|
19
20
|
rspec-its (1.2.0)
|
20
21
|
rspec-core (>= 3.0.0)
|
21
22
|
rspec-expectations (>= 3.0.0)
|
22
|
-
rspec-mocks (3.
|
23
|
+
rspec-mocks (3.9.0)
|
23
24
|
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
-
rspec-support (~> 3.
|
25
|
-
rspec-support (3.
|
25
|
+
rspec-support (~> 3.9.0)
|
26
|
+
rspec-support (3.9.0)
|
26
27
|
|
27
28
|
PLATFORMS
|
28
29
|
ruby
|
29
30
|
|
30
31
|
DEPENDENCIES
|
31
32
|
config-parser!
|
33
|
+
deep_merge
|
32
34
|
rspec
|
33
35
|
rspec-its
|
34
36
|
|
35
37
|
BUNDLED WITH
|
36
|
-
1.
|
38
|
+
1.16.2
|
@@ -1,22 +1,24 @@
|
|
1
|
-
|
1
|
+
[![Build Status](https://travis-ci.org/openSUSE/rubygem_config-parser.png?branch=master)](https://travis-ci.org/openSUSE/rubygem_config-parser)
|
2
2
|
|
3
|
-
|
3
|
+
## Ruby Config Parser
|
4
|
+
|
5
|
+
Providing config values for your Ruby app with convenience methods like
|
4
6
|
overwriting variables per Rails environment and overwriting variables with a local
|
5
7
|
options_local.yml file.
|
6
8
|
|
7
9
|
### Installation
|
8
10
|
|
9
|
-
The best way to install is with RubyGems:
|
11
|
+
The best way to install is with [RubyGems](https://rubygems.org/gems/config-parser):
|
10
12
|
|
11
|
-
$
|
13
|
+
$ gem install config-parser
|
12
14
|
|
13
|
-
Or better still, just add it to your Gemfile
|
15
|
+
Or better still, just add it to your `Gemfile`:
|
14
16
|
|
15
17
|
gem 'config-parser'
|
16
18
|
|
17
19
|
### Defaults
|
18
20
|
|
19
|
-
Per default the parser will search for the config file at config/options.yml and config/options-local.yml
|
21
|
+
Per default the parser will search for the config file at `config/options.yml` and local overrides at `config/options-local.yml`.
|
20
22
|
|
21
23
|
|
22
24
|
### Example
|
@@ -33,7 +35,12 @@ Example config file:
|
|
33
35
|
When running in the production environment, the mailer_delivery_method will be set to
|
34
36
|
'smtp'. The same works for all other environments. The optional options_local.yml file
|
35
37
|
would have the same layout.
|
36
|
-
|
38
|
+
|
39
|
+
The precedence of config values goes like this (from lowest to highest):
|
40
|
+
|
41
|
+
`options.yml default section -> options.yml environment section -> options-local.yml default section -> options-local.yml environment section`
|
42
|
+
|
43
|
+
When used from a Rails app, just include in your `application.rb`:
|
37
44
|
|
38
45
|
```ruby
|
39
46
|
OPTS = Common::Options.new
|
@@ -43,6 +50,7 @@ and you can use the config variables like:
|
|
43
50
|
|
44
51
|
```ruby
|
45
52
|
OPTS.<variable_name>
|
53
|
+
OPTS.<variable_name>[:nested_value]
|
46
54
|
```
|
47
55
|
|
48
56
|
Also, you can pass main config and local config location as well as environment to load
|
data/config-parser.gemspec
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "config-parser"
|
3
3
|
gem.summary = %Q{Parsing an options.yml file into a Hash with convenience.}
|
4
|
-
gem.description = "
|
5
|
-
overwriting variables per Rails environment and overwriting variables with a local
|
6
|
-
options_local.yml file."
|
4
|
+
gem.description = "Providing config values for your Ruby app with convenience methods like
|
5
|
+
overwriting variables per Rails environment and overwriting variables with a local
|
6
|
+
options_local.yml file."
|
7
7
|
gem.homepage = "https://github.com/openSUSE/rubygem_config-parser"
|
8
8
|
gem.authors = ['cschum@suse.de', 'tom@opensuse.org', 'kpimenov@suse.de']
|
9
9
|
gem.files = `git ls-files`.split("\n")
|
10
10
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
11
11
|
gem.require_paths = ['lib']
|
12
|
-
gem.version = '0.
|
12
|
+
gem.version = '0.4.0'
|
13
13
|
gem.license = 'MIT'
|
14
14
|
gem.add_development_dependency 'rspec'
|
15
15
|
gem.add_development_dependency 'rspec-its'
|
16
|
+
gem.add_development_dependency 'deep_merge'
|
16
17
|
end
|
17
|
-
|
18
|
-
|
data/lib/common/options.rb
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
require 'yaml'
|
24
24
|
require 'erb'
|
25
|
+
require 'deep_merge'
|
25
26
|
|
26
27
|
require "#{File.dirname(__FILE__)}/utils"
|
27
28
|
|
@@ -111,14 +112,14 @@ module Common
|
|
111
112
|
elsif @persistent_local_cfg_file && File.exists?(@persistent_local_cfg_file)
|
112
113
|
vputs "Loading '#{@persistent_local_cfg_file}'", args[:verbose]
|
113
114
|
update_options(@persistent_local_cfg_file, options)
|
114
|
-
elsif File.exists?
|
115
|
+
elsif @local_cfg_file && File.exists?(@local_cfg_file)
|
115
116
|
vputs "Loading '#{@local_cfg_file}'", args[:verbose]
|
116
117
|
update_options(@local_cfg_file, options)
|
117
118
|
end
|
118
119
|
|
119
120
|
if args[:environment]
|
120
121
|
vputs "Using environment '#{args[:environment]}'", args[:verbose]
|
121
|
-
options = (options['default']||{}).
|
122
|
+
options = (options['default']||{}).deep_merge!(options[args[:environment]]||{})
|
122
123
|
end
|
123
124
|
|
124
125
|
options.update(update_options)
|
@@ -164,16 +165,10 @@ module Common
|
|
164
165
|
raise NoMethodError.new("undefined method `#{key}' for Options:Class", "unknown_key")
|
165
166
|
end
|
166
167
|
|
167
|
-
#
|
168
|
+
# Merge options with content of <file>.
|
168
169
|
def update_options file, options
|
169
|
-
load_file(file)
|
170
|
-
next unless v
|
171
|
-
if options[k]
|
172
|
-
options[k].update(v)
|
173
|
-
else
|
174
|
-
options[k] = v
|
175
|
-
end
|
176
|
-
end
|
170
|
+
options.deep_merge!(load_file(file))
|
177
171
|
end
|
172
|
+
|
178
173
|
end
|
179
174
|
end
|
@@ -2,3 +2,21 @@ default:
|
|
2
2
|
plain_key: plain_value
|
3
3
|
erb_key: <%= %w(erb value).join('_') %>
|
4
4
|
mixed_key: "<%= 'mixed_' %>value"
|
5
|
+
|
6
|
+
nested:
|
7
|
+
nested_key: nested_value_default
|
8
|
+
nested_key2: nested_value_default2
|
9
|
+
|
10
|
+
nested_env:
|
11
|
+
nested_key: nested_value_env
|
12
|
+
nested_key2: nested_value_env2
|
13
|
+
|
14
|
+
env_overwrite_key: env_value
|
15
|
+
|
16
|
+
|
17
|
+
test:
|
18
|
+
env_only_key: test_value
|
19
|
+
env_overwrite_key: test_value
|
20
|
+
|
21
|
+
nested_env:
|
22
|
+
nested_key: nested_value_test
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Common::Options do
|
4
|
+
subject { Common::Options.new('spec/fixtures/example_config.yml', 'spec/fixtures/example_config_local.yml', 'test') }
|
5
|
+
|
6
|
+
it 'reads default value' do
|
7
|
+
expect( subject.mixed_key ).to eq("mixed_value")
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'reads local value' do
|
11
|
+
expect( subject.plain_key ).to eq("plain_value_local")
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'reads local nested value' do
|
15
|
+
expect( subject.nested['nested_key'] ).to eq("nested_value_local")
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'reads nested value for local env' do
|
19
|
+
expect( subject.nested_env['nested_key']).to eq("nested_value_test_local")
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'keeps default for not overwritten parts of nested set' do
|
23
|
+
expect(subject.nested_env['nested_key2']).to eq("nested_value_env2")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Common::Options do
|
4
|
+
subject { Common::Options.new('spec/fixtures/example_config.yml', nil, 'test') }
|
5
|
+
|
6
|
+
it 'reads nested value' do
|
7
|
+
expect( subject.nested['nested_key']).to eq("nested_value_default")
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'reads nested value for env' do
|
11
|
+
expect( subject.nested_env['nested_key']).to eq("nested_value_test")
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'keeps default for not overwritten parts of nested set' do
|
15
|
+
expect(subject.nested_env['nested_key2']).to eq("nested_value_env2")
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Common::Options do
|
4
|
+
subject { Common::Options.new('spec/fixtures/example_config.yml') }
|
5
|
+
|
6
|
+
it 'reads value' do
|
7
|
+
expect( subject.plain_key ).to eq("plain_value")
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'reads nested value' do
|
11
|
+
expect( subject.nested['nested_key'] ).to eq("nested_value_default")
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: config-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cschum@suse.de
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-12-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -40,26 +40,45 @@ dependencies:
|
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: deep_merge
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
43
57
|
description: |-
|
44
|
-
|
45
|
-
|
46
|
-
|
58
|
+
Providing config values for your Ruby app with convenience methods like
|
59
|
+
overwriting variables per Rails environment and overwriting variables with a local
|
60
|
+
options_local.yml file.
|
47
61
|
email:
|
48
62
|
executables: []
|
49
63
|
extensions: []
|
50
64
|
extra_rdoc_files: []
|
51
65
|
files:
|
52
66
|
- ".gitignore"
|
67
|
+
- ".travis.yml"
|
53
68
|
- Gemfile
|
54
69
|
- Gemfile.lock
|
55
70
|
- LICENSE
|
56
|
-
- README.
|
71
|
+
- README.md
|
57
72
|
- config-parser.gemspec
|
58
73
|
- lib/common/options.rb
|
59
74
|
- lib/common/utils.rb
|
60
75
|
- lib/config-parser.rb
|
61
76
|
- spec/erb_interpolation_spec.rb
|
62
77
|
- spec/fixtures/example_config.yml
|
78
|
+
- spec/fixtures/example_config_local.yml
|
79
|
+
- spec/local_overwrite_spec.rb
|
80
|
+
- spec/nested_values_spec.rb
|
81
|
+
- spec/read_values_spec.rb
|
63
82
|
- spec/spec_helper.rb
|
64
83
|
homepage: https://github.com/openSUSE/rubygem_config-parser
|
65
84
|
licenses:
|
@@ -81,11 +100,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
100
|
version: '0'
|
82
101
|
requirements: []
|
83
102
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.6
|
103
|
+
rubygems_version: 2.7.6
|
85
104
|
signing_key:
|
86
105
|
specification_version: 4
|
87
106
|
summary: Parsing an options.yml file into a Hash with convenience.
|
88
107
|
test_files:
|
89
108
|
- spec/erb_interpolation_spec.rb
|
90
109
|
- spec/fixtures/example_config.yml
|
110
|
+
- spec/fixtures/example_config_local.yml
|
111
|
+
- spec/local_overwrite_spec.rb
|
112
|
+
- spec/nested_values_spec.rb
|
113
|
+
- spec/read_values_spec.rb
|
91
114
|
- spec/spec_helper.rb
|