complex_config 0.0.0 → 0.1.0

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
  SHA1:
3
- metadata.gz: 02095dc1d57e5c7310afb22efd984d69b3054473
4
- data.tar.gz: ac7bfb58dae97e30b401447649accdeb3ebd3afc
3
+ metadata.gz: be1bf6c1cc5c0472312df63b9f4e9b5d2165b659
4
+ data.tar.gz: 9234cf89ba86ed15fdc24041000ee334340d3ccf
5
5
  SHA512:
6
- metadata.gz: a136b2e271793501909062fb7ec333041de9a53c19490d19655d05946abb3ca7e0bfecff51f944eafd3c7d6d206f7eb491f0a65ae7b98456b50dd7d23976b965
7
- data.tar.gz: 56fe16ae1198d30650e57ab501725a15ef78de7afe2930962f62a9b838d1265ee0f39afc8b8e1ff9952686bfbf29469ef1e13538ef4efcdc6748132e4a170e4a
6
+ metadata.gz: 47801efebe328219554dff8380be0db7098f430d2f913b461999fae3513f01ecab0a67300060222311a8cb0abc0e2c3d81e3017cb289f8d87b28b571f1a8eff6
7
+ data.tar.gz: 32a4b840c5ff2ab5a89a00b972f3efdf295bfb0cc4d2dec41bd6731d6595956036bec2a1e82af7b27ae490f89ceb4da815600afaf9b188e0a69261447b974bd2
data/Gemfile CHANGED
@@ -3,3 +3,5 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ gem "codeclimate-test-reporter", group: :development, require: nil
data/README.md CHANGED
@@ -114,6 +114,9 @@ Here is the `ComplexConfig::Plugins::MONEY` plugin for example:
114
114
 
115
115
  ## Changes
116
116
 
117
+ * 2014-12-15 Release 0.1.0
118
+ * Freeze configuration by default.
119
+
117
120
  * 2014-12-12 Release 0.0.0
118
121
 
119
122
  ## Download
data/TODO.md ADDED
@@ -0,0 +1,5 @@
1
+ # TODO
2
+
3
+ - Cache the plugin results?
4
+ - Figure out why rspec don't like my double dispatch.
5
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.0
@@ -1,18 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: complex_config 0.0.0 ruby lib
2
+ # stub: complex_config 0.1.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "complex_config"
6
- s.version = "0.0.0"
6
+ s.version = "0.1.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["Florian Frank"]
11
- s.date = "2014-12-12"
11
+ s.date = "2014-12-15"
12
12
  s.description = "This library allows you to access configuration files via a simple interface"
13
13
  s.email = "flori@ping.de"
14
14
  s.extra_rdoc_files = ["README.md", "lib/complex_config.rb", "lib/complex_config/errors.rb", "lib/complex_config/plugins.rb", "lib/complex_config/plugins/enable.rb", "lib/complex_config/plugins/money.rb", "lib/complex_config/plugins/uri.rb", "lib/complex_config/provider.rb", "lib/complex_config/rude.rb", "lib/complex_config/settings.rb", "lib/complex_config/shortcuts.rb", "lib/complex_config/version.rb"]
15
- s.files = [".gitignore", ".rspec", ".travis.yml", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "complex_config.gemspec", "lib/complex_config.rb", "lib/complex_config/errors.rb", "lib/complex_config/plugins.rb", "lib/complex_config/plugins/enable.rb", "lib/complex_config/plugins/money.rb", "lib/complex_config/plugins/uri.rb", "lib/complex_config/provider.rb", "lib/complex_config/rude.rb", "lib/complex_config/settings.rb", "lib/complex_config/shortcuts.rb", "lib/complex_config/version.rb", "spec/complex_config/plugins_spec.rb", "spec/complex_config/provider_spec.rb", "spec/complex_config/settings_spec.rb", "spec/complex_config/shortcuts_spec.rb", "spec/config/broken_config.yml", "spec/config/config.yml", "spec/spec_helper.rb"]
15
+ s.files = [".gitignore", ".rspec", ".travis.yml", ".utilsrc", "Gemfile", "README.md", "Rakefile", "TODO.md", "VERSION", "complex_config.gemspec", "lib/complex_config.rb", "lib/complex_config/errors.rb", "lib/complex_config/plugins.rb", "lib/complex_config/plugins/enable.rb", "lib/complex_config/plugins/money.rb", "lib/complex_config/plugins/uri.rb", "lib/complex_config/provider.rb", "lib/complex_config/rude.rb", "lib/complex_config/settings.rb", "lib/complex_config/shortcuts.rb", "lib/complex_config/version.rb", "spec/complex_config/plugins_spec.rb", "spec/complex_config/provider_spec.rb", "spec/complex_config/settings_spec.rb", "spec/complex_config/shortcuts_spec.rb", "spec/config/broken_config.yml", "spec/config/config.yml", "spec/spec_helper.rb"]
16
16
  s.homepage = "https://github.com/flori/complex_config"
17
17
  s.licenses = ["Apache-2.0"]
18
18
  s.rdoc_options = ["--title", "ComplexConfig -- configuration library", "--main", "README.md"]
@@ -7,7 +7,8 @@ class ComplexConfig::Provider
7
7
  include Tins::SexySingleton
8
8
 
9
9
  def initialize
10
- @plugins = Set.new
10
+ @plugins = Set.new
11
+ @deep_freeze = true
11
12
  end
12
13
 
13
14
  attr_reader :plugins
@@ -17,6 +18,12 @@ class ComplexConfig::Provider
17
18
  self
18
19
  end
19
20
 
21
+ attr_writer :deep_freeze
22
+
23
+ def deep_freeze?
24
+ !!@deep_freeze
25
+ end
26
+
20
27
  def apply_plugins(setting, id)
21
28
  @plugins.find do |plugin|
22
29
  catch :skip do
@@ -32,7 +39,9 @@ class ComplexConfig::Provider
32
39
 
33
40
  def config(pathname)
34
41
  result = evaluate(pathname)
35
- ComplexConfig::Settings[::YAML.load(result, pathname)]
42
+ ComplexConfig::Settings[::YAML.load(result, pathname)].tap do |settings|
43
+ deep_freeze? and settings.deep_freeze
44
+ end
36
45
  rescue ::Errno::ENOENT => e
37
46
  raise ComplexConfig::ComplexConfigError.wrap(:ConfigurationFileMissing, e)
38
47
  rescue ::Psych::SyntaxError => e
@@ -35,6 +35,13 @@ class ComplexConfig::Settings < JSON::GenericObject
35
35
 
36
36
  alias inspect to_s
37
37
 
38
+ def deep_freeze
39
+ each do |_, v|
40
+ v.ask_and_send(:deep_freeze) || (v.freeze rescue v)
41
+ end
42
+ freeze
43
+ end
44
+
38
45
  private
39
46
 
40
47
  def respond_to_missing?(id, include_private = false)
@@ -1,6 +1,6 @@
1
1
  module ComplexConfig
2
2
  # ComplexConfig version
3
- VERSION = '0.0.0'
3
+ VERSION = '0.1.0'
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:
@@ -5,6 +5,10 @@ RSpec.describe ComplexConfig::Provider do
5
5
  ComplexConfig::Provider
6
6
  end
7
7
 
8
+ after do
9
+ provider.flush_cache
10
+ end
11
+
8
12
  context 'plugin' do
9
13
  let :plugin do
10
14
  -> id { __send__ id }
@@ -62,6 +66,21 @@ RSpec.describe ComplexConfig::Provider do
62
66
  ).to be_a ComplexConfig::Settings
63
67
  end
64
68
 
69
+ it 'has deep frozen settings' do
70
+ settings = provider.config(asset('config.yml'))
71
+ expect(settings).to be_frozen
72
+ end
73
+
74
+ it 'deep freezing can be disabled' do
75
+ begin
76
+ provider.deep_freeze = false
77
+ settings = provider.config(asset('config.yml'))
78
+ expect(settings).not_to be_frozen
79
+ ensure
80
+ provider.deep_freeze = true
81
+ end
82
+ end
83
+
65
84
  it 'handles missing configuration files' do
66
85
  expect { provider.config(asset('nix_config.yml')) }.to\
67
86
  raise_error(ComplexConfig::ConfigurationFileMissing)
@@ -78,10 +97,6 @@ RSpec.describe ComplexConfig::Provider do
78
97
  provider.root = Pathname.new(__FILE__).dirname.dirname
79
98
  end
80
99
 
81
- after do
82
- provider.flush_cache
83
- end
84
-
85
100
  it 'returns the correct configuration' do
86
101
  expect(provider['config']).to be_a ComplexConfig::Settings
87
102
  end
@@ -1,10 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe ComplexConfig::Settings do
4
- let :provider do
5
- ComplexConfig::Provider
6
- end
7
-
8
4
  let :settings do
9
5
  ComplexConfig::Settings[
10
6
  foo: {
@@ -44,15 +40,15 @@ RSpec.describe ComplexConfig::Settings do
44
40
  EOT
45
41
  end
46
42
  it 'raises exception if expected attribute is missing' do
47
- skip "doesn't work in spec?!?" # XXX
48
- expect { settings.foo.baz }.to raise_error(ComplexConfig::AttributeMissing)
43
+ pending "still doesn't work"
44
+ expect { settings.nix }.to raise_error(ComplexConfig::AttributeMissing)
49
45
  end
50
46
 
51
47
  it 'can be checked for set attributes' do
52
48
  expect(settings.foo.attribute_set?(:bar)).to eq true
53
49
  expect(settings.foo.bar?).to be_truthy
54
50
  expect(settings.foo.attribute_set?(:baz)).to eq false
55
- # XXX doesn't work in spec?!? expect(settings.foo.baz?).to be_falsy
51
+ #expect(settings.foo.baz?).to be_falsy
56
52
  end
57
53
  end
58
54
 
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.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-12 00:00:00.000000000 Z
11
+ date: 2014-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -133,6 +133,7 @@ files:
133
133
  - Gemfile
134
134
  - README.md
135
135
  - Rakefile
136
+ - TODO.md
136
137
  - VERSION
137
138
  - complex_config.gemspec
138
139
  - lib/complex_config.rb