dry-configurable 0.16.0 → 0.16.1
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/CHANGELOG.md +8 -0
- data/lib/dry/configurable/config.rb +26 -12
- data/lib/dry/configurable/setting.rb +7 -1
- data/lib/dry/configurable/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d8c3e4ebee8cf7f978c48580f64c1547c6c818b50ed7064b0758b4bffb072ee
|
4
|
+
data.tar.gz: 2aa701383b59289fbe591100642027fc5bc0d074bd0ec5d6d085359293af0f8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 221e2cfb38c4eae38ab6b56250e2d70672c9d1e6883b048f5a6bc807d0996065bf1b8e4a102fd78b6a95a4a4ffcf21dcfd46c64737acd915b3d1b80f9dca273e
|
7
|
+
data.tar.gz: 1f04a6b9af22d12a6b310902cdf5761362762a7fcca97c78a2feb17a28ce3199285a8cd1b6e80c56cde10f7fc2983c8598990fa263e5e55656502ad22761dd2e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 0.16.1 2022-10-13
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
|
7
|
+
- Restored performance of config value reads (direct reader methods as well as aggregate methods like `#values` and `#to_h`) to pre-0.16.0 levels (#149 by @timriley)
|
8
|
+
|
9
|
+
[Compare v0.16.0...v0.16.1](https://github.com/dry-rb/dry-configurable/compare/v0.16.0...v0.16.1)
|
10
|
+
|
3
11
|
## 0.16.0 2022-10-08
|
4
12
|
|
5
13
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/core/constants"
|
4
|
+
require "set"
|
4
5
|
|
5
6
|
require "dry/core/equalizer"
|
6
7
|
|
@@ -18,15 +19,27 @@ module Dry
|
|
18
19
|
# @api private
|
19
20
|
attr_reader :_values
|
20
21
|
|
22
|
+
# @api private
|
23
|
+
attr_reader :_configured
|
24
|
+
protected :_configured
|
25
|
+
|
21
26
|
# @api private
|
22
27
|
def initialize(settings, values: {})
|
23
28
|
@_settings = settings
|
24
29
|
@_values = values
|
30
|
+
@_configured = Set.new
|
31
|
+
end
|
32
|
+
|
33
|
+
# @api private
|
34
|
+
private def initialize_copy(source)
|
35
|
+
super
|
36
|
+
@_values = source.__send__(:dup_values)
|
37
|
+
@_configured = source._configured.dup
|
25
38
|
end
|
26
39
|
|
27
40
|
# @api private
|
28
41
|
def dup_for_settings(settings)
|
29
|
-
|
42
|
+
dup.tap { |config| config.instance_variable_set(:@_settings, settings) }
|
30
43
|
end
|
31
44
|
|
32
45
|
# Get config value by a key
|
@@ -42,10 +55,11 @@ module Dry
|
|
42
55
|
end
|
43
56
|
|
44
57
|
_values.fetch(name) {
|
45
|
-
#
|
46
|
-
|
58
|
+
# Mutable settings may be configured after read
|
59
|
+
_configured.add(name) if setting.cloneable?
|
60
|
+
|
47
61
|
setting.to_value.tap { |value|
|
48
|
-
_values[name] = value
|
62
|
+
_values[name] = value
|
49
63
|
}
|
50
64
|
}
|
51
65
|
end
|
@@ -64,6 +78,8 @@ module Dry
|
|
64
78
|
raise ArgumentError, "+#{name}+ is not a setting name"
|
65
79
|
end
|
66
80
|
|
81
|
+
_configured.add(name)
|
82
|
+
|
67
83
|
_values[name] = setting.constructor.(value)
|
68
84
|
end
|
69
85
|
|
@@ -101,11 +117,11 @@ module Dry
|
|
101
117
|
#
|
102
118
|
# @api public
|
103
119
|
def configured?(key)
|
104
|
-
if _settings[key].cloneable?
|
120
|
+
if _configured.include?(key) && _settings[key].cloneable?
|
105
121
|
return _values[key] != _settings[key].to_value
|
106
122
|
end
|
107
123
|
|
108
|
-
|
124
|
+
_configured.include?(key)
|
109
125
|
end
|
110
126
|
|
111
127
|
# Returns the current config values.
|
@@ -116,7 +132,10 @@ module Dry
|
|
116
132
|
#
|
117
133
|
# @api public
|
118
134
|
def values
|
119
|
-
|
135
|
+
# Ensure all settings are represented in values
|
136
|
+
_settings.each { |setting| self[setting.name] unless _values.key?(setting.name) }
|
137
|
+
|
138
|
+
_values
|
120
139
|
end
|
121
140
|
|
122
141
|
# Returns config values as a hash, with nested values also converted from {Config} instances
|
@@ -175,11 +194,6 @@ module Dry
|
|
175
194
|
dup_hsh[key] = _settings[key].cloneable? ? val.dup : val
|
176
195
|
}
|
177
196
|
end
|
178
|
-
|
179
|
-
def initialize_copy(source)
|
180
|
-
super
|
181
|
-
@_values = source.__send__(:dup_values)
|
182
|
-
end
|
183
197
|
end
|
184
198
|
end
|
185
199
|
end
|
@@ -24,6 +24,9 @@ module Dry
|
|
24
24
|
# @api private
|
25
25
|
attr_reader :default
|
26
26
|
|
27
|
+
# @api private
|
28
|
+
attr_reader :cloneable
|
29
|
+
|
27
30
|
# @api private
|
28
31
|
attr_reader :constructor
|
29
32
|
|
@@ -48,6 +51,9 @@ module Dry
|
|
48
51
|
)
|
49
52
|
@name = name
|
50
53
|
@default = default
|
54
|
+
@cloneable = children.any? || options.fetch(:cloneable) {
|
55
|
+
Setting.cloneable_value?(default)
|
56
|
+
}
|
51
57
|
@constructor = constructor
|
52
58
|
@children = children
|
53
59
|
@options = options
|
@@ -60,7 +66,7 @@ module Dry
|
|
60
66
|
|
61
67
|
# @api private
|
62
68
|
def cloneable?
|
63
|
-
|
69
|
+
cloneable
|
64
70
|
end
|
65
71
|
|
66
72
|
# @api private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-configurable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Holland
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-core
|
@@ -114,7 +114,7 @@ metadata:
|
|
114
114
|
changelog_uri: https://github.com/dry-rb/dry-configurable/blob/main/CHANGELOG.md
|
115
115
|
source_code_uri: https://github.com/dry-rb/dry-configurable
|
116
116
|
bug_tracker_uri: https://github.com/dry-rb/dry-configurable/issues
|
117
|
-
post_install_message:
|
117
|
+
post_install_message:
|
118
118
|
rdoc_options: []
|
119
119
|
require_paths:
|
120
120
|
- lib
|
@@ -129,8 +129,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '0'
|
131
131
|
requirements: []
|
132
|
-
rubygems_version: 3.
|
133
|
-
signing_key:
|
132
|
+
rubygems_version: 3.1.6
|
133
|
+
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: A mixin to add configuration functionality to your classes
|
136
136
|
test_files: []
|