complex_config 0.18.1 → 0.19.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 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