complex_config 0.18.1 → 0.19.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e73e68945dd80153f4d2b7bdf6230188c2f818116b1be2b5d15275f6a60bd4cf
4
- data.tar.gz: 9b26daedb74a7ec7b964949157b090e132f2578caee5bc5017a8e9846e0737ae
3
+ metadata.gz: 3486d5210e50100d17dea40922e6958c06898ba4ec70d3830b58b50160ecdeba
4
+ data.tar.gz: ee463ae5164fee75e2a4454b1176b1d31903026924297aca8371814cf6e1649d
5
5
  SHA512:
6
- metadata.gz: 34f7301a12996a624fda778cf814601324e7241fd955bd19b32d37cec572ee3cf0550ac2868851094bc2badfa86b79ede0614beb2f3f90c9c24a2d6535985b63
7
- data.tar.gz: 62dd718af441e486f1ccf0c54201f4ca34cc46e02dd853956d331e8fbe903b3025e94734c84ec3cb854ae273cc009bcb3aefa874c48a4c0d786c6bbf16d0e807
6
+ metadata.gz: 6ea338ae3b2f8b9ea408d0a2e439afd14f21ba29937f82d33d01f3db6c155513e16108d3647345e3c05031c6ba06433ab9db7d626ba5be427758be6ad51f1981
7
+ data.tar.gz: 3cba305f3824ff5da2592283ce698ff7f06d28fe1c9c61caabd6fc77c7f0601664a7a4213bf8b47a14adb88bdb29ee43a44b4220ca9305b441678905d94c2b77
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.0.2
data/.travis.yml CHANGED
@@ -6,6 +6,7 @@ rvm:
6
6
  - 2.5
7
7
  - 2.6
8
8
  - 2.7
9
+ - 3.0
9
10
  - ruby-head
10
11
  - jruby-head
11
12
  sudo: false
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.18.1
1
+ 0.19.2
@@ -1,23 +1,23 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: complex_config 0.18.1 ruby lib
2
+ # stub: complex_config 0.19.2 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "complex_config".freeze
6
- s.version = "0.18.1"
6
+ s.version = "0.19.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 = "2020-08-26"
11
+ s.date = "2021-10-28"
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]
15
15
  s.extra_rdoc_files = ["README.md".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/version.rb".freeze]
16
- s.files = [".gitignore".freeze, ".rspec".freeze, ".travis.yml".freeze, ".utilsrc".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/complex_config".freeze, "complex_config.gemspec".freeze, "config/products.yml".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/version.rb".freeze, "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/config/broken_config.yml".freeze, "spec/config/config.yml".freeze, "spec/config/master.key".freeze, "spec/config/with-key-file.yml.enc".freeze, "spec/config/with-key-file.yml.key".freeze, "spec/config/without-key-file.yml.enc".freeze, "spec/spec_helper.rb".freeze]
16
+ s.files = [".gitignore".freeze, ".rspec".freeze, ".tool-versions".freeze, ".travis.yml".freeze, ".utilsrc".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/complex_config".freeze, "complex_config.gemspec".freeze, "config/products.yml".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/version.rb".freeze, "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/config/broken_config.yml".freeze, "spec/config/config.yml".freeze, "spec/config/config_with_alias.yml".freeze, "spec/config/master.key".freeze, "spec/config/with-key-file.yml.enc".freeze, "spec/config/with-key-file.yml.key".freeze, "spec/config/without-key-file.yml.enc".freeze, "spec/spec_helper.rb".freeze]
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.1.2".freeze
20
+ s.rubygems_version = "3.2.22".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
 
@@ -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)
@@ -99,7 +99,12 @@ class ComplexConfig::Provider
99
99
  "configuration file #{pathname.to_s.inspect} is missing"
100
100
  end
101
101
  results = datas.map { |d| evaluate(pathname, d) }
102
- hashes = results.map { |r| ::YAML.load(r, pathname) }
102
+ hashes =
103
+ if ::Psych::VERSION < "4"
104
+ results.map { |r| ::YAML.load(r, pathname) }
105
+ else
106
+ results.map { |r| ::YAML.load(r, filename: pathname, aliases: true) }
107
+ end
103
108
  settings = ComplexConfig::Settings.build(name, hashes.shift)
104
109
  hashes.each { |h| settings.attributes_update(h) }
105
110
  if shared = settings.shared?
@@ -169,10 +174,18 @@ class ComplexConfig::Provider
169
174
  self
170
175
  end
171
176
 
172
- def evaluate(pathname, data)
173
- erb = ::ERB.new(data, nil, '-')
174
- erb.filename = pathname.to_s
175
- erb.result
177
+ if RUBY_VERSION >= "3"
178
+ def evaluate(pathname, data)
179
+ erb = ::ERB.new(data, trim_mode: '-')
180
+ erb.filename = pathname.to_s
181
+ erb.result
182
+ end
183
+ else
184
+ def evaluate(pathname, data)
185
+ erb = ::ERB.new(data, nil, '-')
186
+ erb.filename = pathname.to_s
187
+ erb.result
188
+ end
176
189
  end
177
190
 
178
191
  def env
@@ -111,7 +111,7 @@ class ComplexConfig::Settings < BasicObject
111
111
  end
112
112
 
113
113
  def ==(other)
114
- to_h == other.to_h
114
+ other.respond_to?(:to_h) && to_h == other.to_h
115
115
  end
116
116
 
117
117
  def to_yaml
@@ -187,7 +187,7 @@ class ComplexConfig::Settings < BasicObject
187
187
  freeze
188
188
  end
189
189
 
190
- def [](name)
190
+ def attribute_get(name)
191
191
  if !attribute_set?(name) and
192
192
  value = ::ComplexConfig::Provider.apply_plugins(self, name)
193
193
  then
@@ -197,6 +197,16 @@ class ComplexConfig::Settings < BasicObject
197
197
  end
198
198
  end
199
199
 
200
+ alias [] attribute_get
201
+
202
+ def attribute_get!(name)
203
+ if attribute_set?(name)
204
+ attribute_get(name)
205
+ else
206
+ raise ::ComplexConfig::AttributeMissing, "no attribute named #{name.inspect}"
207
+ end
208
+ end
209
+
200
210
  def []=(name, value)
201
211
  @table[name.to_sym] = value
202
212
  end
@@ -1,6 +1,6 @@
1
1
  module ComplexConfig
2
2
  # ComplexConfig version
3
- VERSION = '0.18.1'
3
+ VERSION = '0.19.2'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -269,6 +269,18 @@ RSpec.describe ComplexConfig::Provider do
269
269
  end
270
270
  end
271
271
 
272
+ context 'handling configuration files with aliases (considered unsafe)' do
273
+ before do
274
+ described_class.config_dir = Pathname.new(__FILE__) + '../../config'
275
+ end
276
+
277
+ it 'reads yaml files with aliases just fine' do
278
+ expect(
279
+ described_class.config(asset('config_with_alias.yml')).specific.extended
280
+ ).to be true
281
+ end
282
+ end
283
+
272
284
  context 'evaluating configuration files with ERB' do
273
285
  it 'evaluates a config file correctly' do
274
286
  expect(
@@ -133,6 +133,11 @@ EOT
133
133
  expect(settings.foo.baz?).to be_falsy
134
134
  end
135
135
 
136
+ it 'can trigger exception on attribute get' do
137
+ expect(settings.foo.attribute_get!(:bar)).to be_truthy
138
+ expect { settings.foo.attribute_get!(:baz) }.to raise_error ComplexConfig::AttributeMissing
139
+ end
140
+
136
141
  it 'handles arrays correctly' do
137
142
  settings = described_class[ary: [ 1, { hsh: 2 }, 3 ]]
138
143
  expect(settings.to_h).to eq(ary: [ 1, { hsh: 2 }, 3 ])
@@ -0,0 +1,6 @@
1
+ common: &common
2
+ extended: true
3
+
4
+ specific:
5
+ <<: *common
6
+ foo: true
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.18.1
4
+ version: 0.19.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-26 00:00:00.000000000 Z
11
+ date: 2021-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -155,6 +155,7 @@ extra_rdoc_files:
155
155
  files:
156
156
  - ".gitignore"
157
157
  - ".rspec"
158
+ - ".tool-versions"
158
159
  - ".travis.yml"
159
160
  - ".utilsrc"
160
161
  - COPYING
@@ -191,6 +192,7 @@ files:
191
192
  - spec/complex_config/shortcuts_spec.rb
192
193
  - spec/config/broken_config.yml
193
194
  - spec/config/config.yml
195
+ - spec/config/config_with_alias.yml
194
196
  - spec/config/master.key
195
197
  - spec/config/with-key-file.yml.enc
196
198
  - spec/config/with-key-file.yml.key
@@ -219,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
221
  - !ruby/object:Gem::Version
220
222
  version: '0'
221
223
  requirements: []
222
- rubygems_version: 3.1.2
224
+ rubygems_version: 3.2.22
223
225
  signing_key:
224
226
  specification_version: 4
225
227
  summary: configuration library