mixlib-config 2.2.11 → 2.2.12

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: c764853ffe7576f6b9568775541cc9358cc6a392a26997af52ae0c9dcde1611e
4
- data.tar.gz: 19713a0e41d1c407510483d11df8f6ac83e8645d5607890b5b7181fcf0e51689
3
+ metadata.gz: e49d199c25ed417933cc95a2868d154e4f0fbc631aef9d1c5f05310ebbdbbe56
4
+ data.tar.gz: 4307e6ce5ff263812c96055084d328901587139f82ca213a2ec1272208931150
5
5
  SHA512:
6
- metadata.gz: 99c7c6639a2f2a1de69db7970d99ea5ca2a54fba04ac544967aba9a1552f3541a856b4d447098ee73364ac1094da33e7d5bdda92a87296e19d1d2dbbc5656ae2
7
- data.tar.gz: 95be61fa365942dc7a0a7a1d1bcc5b0eff1e9a362ed9207a138e1dc362a7051c8a546d6b1bc1c2a40113bf93d83571a2fde96473ae1fe576e013faa0bdc3c78e
6
+ metadata.gz: cdfcc6a831af4bd63216614a7e191152cd5f9dee67e7e87a2775d5d7c766b7c6e8f667ec45062400688e2cc746e2936041087f4e1de85e72f91b10c71c7a36de
7
+ data.tar.gz: ac0b067a839675c594663b0fa5a91cd66059dc807775dfaacceae62f77efb975d3f26db0ca1781571bfd73c97c5b09bea921fe04fc7e0cf3af48e617917241f5
data/README.md CHANGED
@@ -248,6 +248,18 @@ This allows the user to quickly specify a number of values with one default, whi
248
248
  print_network_requests false
249
249
  ```
250
250
 
251
+ You can also inspect if the values are still their defaults or not:
252
+
253
+ ```ruby
254
+ MyConfig.is_default?(:verbosity) # == true
255
+ MyConfig[:verbosity] = 5
256
+ MyConfig.is_default?(:verbosity) # == false
257
+ MyConfig[:verbosity] = 1
258
+ MyConfig.is_default?(:verbosity) # == true
259
+ ```
260
+
261
+ Trying to call `is_default?` on a config context or a config which does not have a declared default is an error and will raise.
262
+
251
263
  ## Strict Mode
252
264
 
253
265
  Misspellings are a common configuration problem, and Mixlib::Config has an answer: `config_strict_mode`. Setting `config_strict_mode` to `true` will cause any misspelled or incorrect configuration option references to throw `Mixlib::Config::UnknownConfigOptionError`.
@@ -158,6 +158,15 @@ module Mixlib
158
158
 
159
159
  alias_method :has_key?, :key?
160
160
 
161
+ def is_default?(key)
162
+ symbol = key.to_sym
163
+ if configurables.has_key?(symbol)
164
+ configurables[symbol].is_default?(configuration)
165
+ else
166
+ raise ArgumentError, "config option must exist, and not be a context to check for default values"
167
+ end
168
+ end
169
+
161
170
  # Resets a config option to its default.
162
171
  #
163
172
  # === Parameters
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright (c) 2013-2016 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) 2013-2018, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,20 +19,31 @@
19
19
  module Mixlib
20
20
  module Config
21
21
  class Configurable
22
+ attr_reader :symbol
23
+ attr_reader :default_value
24
+ attr_reader :default_block
25
+
22
26
  def initialize(symbol)
23
27
  @symbol = symbol
24
- @default_block = nil
25
- @has_default = false
26
- @default_value = nil
27
- @writes_value = nil
28
28
  end
29
29
 
30
- attr_reader :has_default
30
+ def has_default?
31
+ instance_variable_defined?(:@default_value)
32
+ end
33
+
34
+ def writes_value?
35
+ instance_variable_defined?(:@writes_value)
36
+ end
37
+
38
+ def default_block?
39
+ instance_variable_defined?(:@default_block)
40
+ end
41
+
42
+ alias_method :has_default, :has_default?
31
43
 
32
44
  def defaults_to(default_value = nil, &block)
33
- @has_default = true
34
- @default_block = block
35
45
  @default_value = default_value
46
+ @default_block = block if block_given?
36
47
  self
37
48
  end
38
49
 
@@ -42,32 +53,38 @@ module Mixlib
42
53
  end
43
54
 
44
55
  def get(config)
45
- if config.has_key?(@symbol)
46
- config[@symbol]
47
- elsif @default_block
48
- @default_block.call
56
+ if config.key?(symbol)
57
+ config[symbol]
58
+ elsif default_block?
59
+ default_block.call
49
60
  else
50
- begin
51
- # Some things cannot be dup'd, and you won't know this till after the fact
52
- # because all values implement dup
53
- config[@symbol] = @default_value.dup
54
- rescue TypeError
55
- @default_value
56
- end
61
+ config[symbol] = safe_dup(default_value)
57
62
  end
58
63
  end
59
64
 
60
65
  def set(config, value)
61
- config[@symbol] = @writes_value ? @writes_value.call(value) : value
66
+ config[symbol] = writes_value? ? @writes_value.call(value) : value
62
67
  end
63
68
 
64
69
  def default
65
- if @default_block
66
- @default_block.call
70
+ if default_block?
71
+ default_block.call
67
72
  else
68
- @default_value
73
+ default_value
69
74
  end
70
75
  end
76
+
77
+ def is_default?(config)
78
+ !config.key?(symbol) || config[symbol] == default_value
79
+ end
80
+
81
+ private
82
+
83
+ def safe_dup(e)
84
+ e.dup
85
+ rescue TypeError
86
+ e
87
+ end
71
88
  end
72
89
  end
73
90
  end
@@ -19,7 +19,7 @@
19
19
  module Mixlib
20
20
  module Config
21
21
 
22
- VERSION = "2.2.11"
22
+ VERSION = "2.2.12"
23
23
 
24
24
  end
25
25
  end
@@ -235,6 +235,23 @@ describe Mixlib::Config do
235
235
  expect(@klass.respond_to?("z=".to_sym)).to be false
236
236
  end
237
237
 
238
+ it "returns true for is_default? for a default value" do
239
+ expect(@klass[:a]).to eql(1)
240
+ expect(@klass.is_default?(:a)).to be true
241
+ end
242
+
243
+ it "returns true for is_default? for an overwritten default value" do
244
+ @klass[:a] = 1
245
+ expect(@klass[:a]).to eql(1)
246
+ expect(@klass.is_default?(:a)).to be true
247
+ end
248
+
249
+ it "returns false for is_default? for a value that is not the default" do
250
+ @klass[:a] = 2
251
+ expect(@klass[:a]).to eql(2)
252
+ expect(@klass.is_default?(:a)).to be false
253
+ end
254
+
238
255
  describe "and extra methods have been dumped into Object" do
239
256
  class NopeError < StandardError
240
257
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.11
4
+ version: 2.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-02 00:00:00.000000000 Z
11
+ date: 2018-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tomlrb