complex_config 0.16.0 → 0.18.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/README.md +2 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/complex_config.gemspec +15 -24
- data/lib/complex_config/errors.rb +3 -0
- data/lib/complex_config/plugins/uri.rb +1 -1
- data/lib/complex_config/provider.rb +33 -14
- data/lib/complex_config/settings.rb +10 -1
- data/lib/complex_config/version.rb +1 -1
- data/spec/complex_config/provider_spec.rb +2 -2
- data/spec/config/config.yml +2 -0
- metadata +8 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8a0d455caf5fdc57de73eafd6308920b5f0b1e5b0bf99b67e289fa4df83b54d6
|
|
4
|
+
data.tar.gz: 41948d2b4b6dfcddbcec801639b19a2c855b9c81d573281f098ccb954b9e5606
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9ec0abc072a32b190f3982254f45a1475a28442d78ac03e80c111a589027bc34b3095f51187b264e17cc74147e1137680494d9c51e7b02b71b9c0ce86e41e6b6
|
|
7
|
+
data.tar.gz: be4f16643cb26822aa77d6e68fb82a125fa3b559d0eff6abdb0f0d34fdbe3b48778939392c68cc3747de7e4bf8b0f5b96888d1519414bcb4a64b80ef4f1db516
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -144,6 +144,8 @@ Here is the `ComplexConfig::Plugins::MONEY` plugin for example:
|
|
|
144
144
|
|
|
145
145
|
## Changes
|
|
146
146
|
|
|
147
|
+
* 2019-03-18 Release 0.17.0
|
|
148
|
+
* Improve error message for missing encryption key
|
|
147
149
|
* 2019-03-14 Release 0.16.0
|
|
148
150
|
* Enable `- trim_mode` for ERB in yml files
|
|
149
151
|
* Allow `to_json` calls on settings
|
data/Rakefile
CHANGED
|
@@ -12,7 +12,7 @@ GemHadar do
|
|
|
12
12
|
executables 'complex_config'
|
|
13
13
|
test_dir 'spec'
|
|
14
14
|
ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
|
|
15
|
-
'.AppleDouble', '.DS_Store', '.byebug_history', 'errors.lst'
|
|
15
|
+
'.AppleDouble', '.DS_Store', '.byebug_history', 'errors.lst', 'tags'
|
|
16
16
|
|
|
17
17
|
readme 'README.md'
|
|
18
18
|
title "#{name.camelize} -- configuration library"
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.18.2
|
data/complex_config.gemspec
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: complex_config 0.
|
|
2
|
+
# stub: complex_config 0.18.2 ruby lib
|
|
3
3
|
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = "complex_config".freeze
|
|
6
|
-
s.version = "0.
|
|
6
|
+
s.version = "0.18.2"
|
|
7
7
|
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
9
9
|
s.require_paths = ["lib".freeze]
|
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
|
11
|
-
s.date = "
|
|
11
|
+
s.date = "2020-08-26"
|
|
12
12
|
s.description = "This library allows you to access configuration files via a simple interface".freeze
|
|
13
13
|
s.email = "flori@ping.de".freeze
|
|
14
14
|
s.executables = ["complex_config".freeze]
|
|
@@ -17,34 +17,25 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.homepage = "https://github.com/flori/complex_config".freeze
|
|
18
18
|
s.licenses = ["Apache-2.0".freeze]
|
|
19
19
|
s.rdoc_options = ["--title".freeze, "ComplexConfig -- configuration library".freeze, "--main".freeze, "README.md".freeze]
|
|
20
|
-
s.rubygems_version = "3.
|
|
20
|
+
s.rubygems_version = "3.1.2".freeze
|
|
21
21
|
s.summary = "configuration library".freeze
|
|
22
22
|
s.test_files = ["spec/complex_config/config_spec.rb".freeze, "spec/complex_config/encryption_spec.rb".freeze, "spec/complex_config/key_source_spec.rb".freeze, "spec/complex_config/plugins_spec.rb".freeze, "spec/complex_config/provider_spec.rb".freeze, "spec/complex_config/settings_spec.rb".freeze, "spec/complex_config/shortcuts_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
|
23
23
|
|
|
24
24
|
if s.respond_to? :specification_version then
|
|
25
25
|
s.specification_version = 4
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
else
|
|
37
|
-
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
|
38
|
-
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
|
39
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
40
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
|
41
|
-
s.add_dependency(%q<monetize>.freeze, [">= 0"])
|
|
42
|
-
s.add_dependency(%q<json>.freeze, [">= 0"])
|
|
43
|
-
s.add_dependency(%q<tins>.freeze, [">= 0"])
|
|
44
|
-
s.add_dependency(%q<mize>.freeze, ["~> 0.3", ">= 0.3.4"])
|
|
45
|
-
end
|
|
28
|
+
if s.respond_to? :add_runtime_dependency then
|
|
29
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
|
|
30
|
+
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
|
31
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
32
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
|
33
|
+
s.add_development_dependency(%q<monetize>.freeze, [">= 0"])
|
|
34
|
+
s.add_runtime_dependency(%q<json>.freeze, [">= 0"])
|
|
35
|
+
s.add_runtime_dependency(%q<tins>.freeze, [">= 0"])
|
|
36
|
+
s.add_runtime_dependency(%q<mize>.freeze, ["~> 0.3", ">= 0.3.4"])
|
|
46
37
|
else
|
|
47
|
-
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.
|
|
38
|
+
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
|
|
48
39
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
|
49
40
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
50
41
|
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
|
@@ -65,7 +65,7 @@ class ComplexConfig::Provider
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def config_dir
|
|
68
|
-
@config_dir || (defined?(Rails) && Rails.root || Pathname.pwd) + 'config'
|
|
68
|
+
@config_dir || (defined?(Rails) && Rails.respond_to?(:root) && Rails.root || Pathname.pwd) + 'config'
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
def pathname(name)
|
|
@@ -73,12 +73,7 @@ class ComplexConfig::Provider
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def decrypt_config(pathname)
|
|
76
|
-
|
|
77
|
-
my_ks = key_source(pathname)
|
|
78
|
-
if File.exist?(enc_pathname) && my_ks.ask_and_send(:key)
|
|
79
|
-
text = IO.binread(enc_pathname)
|
|
80
|
-
ComplexConfig::Encryption.new(my_ks.key_bytes).decrypt(text)
|
|
81
|
-
end
|
|
76
|
+
decrypt_config_case(pathname).first
|
|
82
77
|
end
|
|
83
78
|
|
|
84
79
|
def encrypt_config(pathname, config)
|
|
@@ -88,14 +83,21 @@ class ComplexConfig::Provider
|
|
|
88
83
|
|
|
89
84
|
def config(pathname, name = nil)
|
|
90
85
|
datas = []
|
|
91
|
-
|
|
86
|
+
path_exist = File.exist?(pathname)
|
|
87
|
+
if path_exist
|
|
92
88
|
datas << IO.binread(pathname)
|
|
93
89
|
end
|
|
94
|
-
|
|
90
|
+
decrypted, reason, enc_pathname = decrypt_config_case(pathname)
|
|
91
|
+
case reason
|
|
92
|
+
when :ok
|
|
95
93
|
datas << decrypted
|
|
94
|
+
when :key_missing
|
|
95
|
+
datas.empty? and raise ComplexConfig::EncryptionKeyMissing,
|
|
96
|
+
"encryption key for #{enc_pathname.to_s.inspect} is missing"
|
|
97
|
+
when :file_missing
|
|
98
|
+
datas.empty? and raise ComplexConfig::ConfigurationFileMissing,
|
|
99
|
+
"configuration file #{pathname.to_s.inspect} is missing"
|
|
96
100
|
end
|
|
97
|
-
datas.empty? and raise ComplexConfig::ConfigurationFileMissing,
|
|
98
|
-
"configuration file #{pathname.to_s.inspect} is missing"
|
|
99
101
|
results = datas.map { |d| evaluate(pathname, d) }
|
|
100
102
|
hashes = results.map { |r| ::YAML.load(r, pathname) }
|
|
101
103
|
settings = ComplexConfig::Settings.build(name, hashes.shift)
|
|
@@ -104,7 +106,7 @@ class ComplexConfig::Provider
|
|
|
104
106
|
shared = shared.to_h
|
|
105
107
|
settings.each do |key, value|
|
|
106
108
|
if value.is_a? ComplexConfig::Settings
|
|
107
|
-
value.
|
|
109
|
+
value.attributes_update_if_nil(shared)
|
|
108
110
|
elsif value.nil?
|
|
109
111
|
settings[key] = ComplexConfig::Settings.build(nil, shared.dup)
|
|
110
112
|
end
|
|
@@ -153,7 +155,7 @@ class ComplexConfig::Provider
|
|
|
153
155
|
|
|
154
156
|
def exist?(name)
|
|
155
157
|
!!config(pathname(name), name)
|
|
156
|
-
rescue ComplexConfig::ConfigurationFileMissing
|
|
158
|
+
rescue ComplexConfig::ConfigurationFileMissing, ComplexConfig::EncryptionKeyMissing
|
|
157
159
|
false
|
|
158
160
|
end
|
|
159
161
|
|
|
@@ -174,7 +176,9 @@ class ComplexConfig::Provider
|
|
|
174
176
|
end
|
|
175
177
|
|
|
176
178
|
def env
|
|
177
|
-
@env || defined?(Rails) && Rails.env
|
|
179
|
+
@env || defined?(Rails) && Rails.respond_to?(:env) && Rails.env ||
|
|
180
|
+
ENV['RAILS_ENV'] ||
|
|
181
|
+
'development'
|
|
178
182
|
end
|
|
179
183
|
|
|
180
184
|
attr_writer :env
|
|
@@ -211,6 +215,21 @@ class ComplexConfig::Provider
|
|
|
211
215
|
|
|
212
216
|
private
|
|
213
217
|
|
|
218
|
+
def decrypt_config_case(pathname)
|
|
219
|
+
enc_pathname = pathname.to_s + '.enc'
|
|
220
|
+
my_ks = key_source(pathname)
|
|
221
|
+
if File.exist?(enc_pathname)
|
|
222
|
+
if my_ks.ask_and_send(:key)
|
|
223
|
+
text = IO.binread(enc_pathname)
|
|
224
|
+
decrypted = ComplexConfig::Encryption.new(my_ks.key_bytes).decrypt(text)
|
|
225
|
+
return decrypted, :ok, enc_pathname
|
|
226
|
+
else
|
|
227
|
+
return nil, :key_missing, enc_pathname
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
return nil, :file_missing, enc_pathname
|
|
231
|
+
end
|
|
232
|
+
|
|
214
233
|
def interpret_name_value(name, value)
|
|
215
234
|
if ComplexConfig::Settings === name
|
|
216
235
|
if value
|
|
@@ -76,6 +76,15 @@ class ComplexConfig::Settings < BasicObject
|
|
|
76
76
|
@table.update(other.table)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
def attributes_update_if_nil(other)
|
|
80
|
+
unless other.is_a? self.class
|
|
81
|
+
other = self.class.from_hash(other)
|
|
82
|
+
end
|
|
83
|
+
@table.update(other.table) do |key, oldval, newval|
|
|
84
|
+
@table.key?(key) ? oldval : newval
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
79
88
|
def replace_attributes(hash)
|
|
80
89
|
@table = self.class.from_hash(hash).table
|
|
81
90
|
self
|
|
@@ -124,7 +133,7 @@ class ComplexConfig::Settings < BasicObject
|
|
|
124
133
|
def to_s(pair_sep: ' = ', path_sep: ?.)
|
|
125
134
|
empty? and return self.class.name
|
|
126
135
|
pathes(path_sep: path_sep).inject('') do |result, (path, value)|
|
|
127
|
-
result
|
|
136
|
+
result + "#{path}#{pair_sep}#{value.inspect}\n"
|
|
128
137
|
end
|
|
129
138
|
end
|
|
130
139
|
|
|
@@ -314,8 +314,8 @@ RSpec.describe ComplexConfig::Provider do
|
|
|
314
314
|
|
|
315
315
|
it 'can share values' do
|
|
316
316
|
expect(described_class['config'].development.shared).to eq true
|
|
317
|
-
expect(described_class['config'].test.shared).to eq
|
|
318
|
-
expect(described_class['config'].staging.shared).to eq
|
|
317
|
+
expect(described_class['config'].test.shared).to eq nil
|
|
318
|
+
expect(described_class['config'].staging.shared).to eq false
|
|
319
319
|
end
|
|
320
320
|
end
|
|
321
321
|
end
|
data/spec/config/config.yml
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: complex_config
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.18.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Frank
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: gem_hadar
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
19
|
+
version: 1.11.0
|
|
20
20
|
type: :development
|
|
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: 1.
|
|
26
|
+
version: 1.11.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -200,7 +200,7 @@ homepage: https://github.com/flori/complex_config
|
|
|
200
200
|
licenses:
|
|
201
201
|
- Apache-2.0
|
|
202
202
|
metadata: {}
|
|
203
|
-
post_install_message:
|
|
203
|
+
post_install_message:
|
|
204
204
|
rdoc_options:
|
|
205
205
|
- "--title"
|
|
206
206
|
- ComplexConfig -- configuration library
|
|
@@ -219,8 +219,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
219
219
|
- !ruby/object:Gem::Version
|
|
220
220
|
version: '0'
|
|
221
221
|
requirements: []
|
|
222
|
-
rubygems_version: 3.
|
|
223
|
-
signing_key:
|
|
222
|
+
rubygems_version: 3.1.2
|
|
223
|
+
signing_key:
|
|
224
224
|
specification_version: 4
|
|
225
225
|
summary: configuration library
|
|
226
226
|
test_files:
|