dry-configurable 0.11.0 → 0.11.5
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 +56 -2
- data/lib/dry/configurable/class_methods.rb +1 -1
- data/lib/dry/configurable/config.rb +17 -15
- data/lib/dry/configurable/dsl.rb +1 -1
- data/lib/dry/configurable/setting.rb +18 -7
- data/lib/dry/configurable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0faa56dea70f112144295394747175b526e116cdfd09d3ccfa047b85dd06b11
|
4
|
+
data.tar.gz: 48fc6304ef41ea05076765bbe8f7286e90ed69ee54b388650d3654b74b4ebfda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c6c284433350053c27e745a8bcb0a0c000c22d4fe684c39eeb20340d026b764f8d80ee155a30ba88af66f4e9ba1022e1572accfa5aff4657b463978534d964e
|
7
|
+
data.tar.gz: ed4d650fb3f2d7f92d05bad9575c452bf67138489a734e91ccc4fb6d9fa5932a6dee72430a84c7b2994b8d28bb42a6d7c4dda8e5b82e9ce51ac588a0888f1b2b
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,58 @@
|
|
1
|
-
##
|
1
|
+
## 0.11.5 2020-03-23
|
2
|
+
|
3
|
+
|
4
|
+
### Fixed
|
5
|
+
|
6
|
+
- When settings are copied or cloned, unevaluated values will no longer be copied. This prevents unintended crashes when settings have constructors expecting a certain type of value, but that value is yet to be provided (Fixed via #87) (@timriley)
|
7
|
+
|
8
|
+
|
9
|
+
[Compare v0.11.4...v0.11.5](https://github.com/dry-rb/dry-configurable/compare/v0.11.4...v0.11.5)
|
10
|
+
|
11
|
+
## 0.11.4 2020-03-16
|
12
|
+
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- `Config#update` returns `self` again (issue #60 fixed via #92) (@solnic)
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- `Setting#inspect` no longer uses its value - this could cause crashes when inspecting settings that are yet to have a value applied (e.g. when they have a constructor that expects a value to be present) (@timriley)
|
21
|
+
|
22
|
+
[Compare v0.11.3...v0.11.4](https://github.com/dry-rb/dry-configurable/compare/v0.11.3...v0.11.4)
|
23
|
+
|
24
|
+
## 0.11.3 2020-02-22
|
25
|
+
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
|
29
|
+
- Retrieving settings by a string name works again (issue #82) (@waiting-for-dev)
|
30
|
+
|
31
|
+
|
32
|
+
[Compare v0.11.2...v0.11.3](https://github.com/dry-rb/dry-configurable/compare/v0.11.2...v0.11.3)
|
33
|
+
|
34
|
+
## 0.11.2 2020-02-20
|
35
|
+
|
36
|
+
|
37
|
+
### Fixed
|
38
|
+
|
39
|
+
- Warning about redefined `Setting#value` is gone (@solnic)
|
40
|
+
|
41
|
+
|
42
|
+
[Compare v0.11.1...v0.11.2](https://github.com/dry-rb/dry-configurable/compare/v0.11.1...v0.11.2)
|
43
|
+
|
44
|
+
## 0.11.1 2020-02-18
|
45
|
+
|
46
|
+
|
47
|
+
### Fixed
|
48
|
+
|
49
|
+
- You can use `:settings` as a config key again (issue #80) (@solnic)
|
50
|
+
- Setting value is lazy-evaluated now, which fixes some cases where a constructor could crash with a `nil` value (@solnic)
|
51
|
+
|
52
|
+
|
53
|
+
[Compare v0.11.0...v0.11.1](https://github.com/dry-rb/dry-configurable/compare/v0.11.0...v0.11.1)
|
54
|
+
|
55
|
+
## 0.11.0 2020-02-15
|
2
56
|
|
3
57
|
Complete rewrite of the library while keeping the public API intact. See #78 for a detailed overview.
|
4
58
|
|
@@ -8,7 +62,7 @@ Complete rewrite of the library while keeping the public API intact. See #78 for
|
|
8
62
|
- (internal) New low-level Setting and Config API (@solnic)
|
9
63
|
- (internal) `config` objects use method_missing now (@solnic)
|
10
64
|
|
11
|
-
[Compare v0.10.0...
|
65
|
+
[Compare v0.10.0...v0.11.0](https://github.com/dry-rb/dry-configurable/compare/v0.10.0...v0.11.0)
|
12
66
|
|
13
67
|
## 0.10.0 2020-01-31
|
14
68
|
|
@@ -16,7 +16,7 @@ module Dry
|
|
16
16
|
def inherited(klass)
|
17
17
|
super
|
18
18
|
|
19
|
-
parent_settings = (respond_to?(:config) ? config.
|
19
|
+
parent_settings = (respond_to?(:config) ? config._settings : _settings)
|
20
20
|
|
21
21
|
klass.instance_variable_set('@_settings', parent_settings)
|
22
22
|
end
|
@@ -16,15 +16,15 @@ module Dry
|
|
16
16
|
include Dry::Equalizer(:values)
|
17
17
|
|
18
18
|
# @api private
|
19
|
-
attr_reader :
|
19
|
+
attr_reader :_settings
|
20
20
|
|
21
21
|
# @api private
|
22
|
-
attr_reader :
|
22
|
+
attr_reader :_resolved
|
23
23
|
|
24
24
|
# @api private
|
25
25
|
def initialize(settings)
|
26
|
-
@
|
27
|
-
@
|
26
|
+
@_settings = settings.dup
|
27
|
+
@_resolved = Concurrent::Map.new
|
28
28
|
end
|
29
29
|
|
30
30
|
# Get config value by a key
|
@@ -33,9 +33,10 @@ module Dry
|
|
33
33
|
#
|
34
34
|
# @return Config value
|
35
35
|
def [](name)
|
36
|
-
|
36
|
+
name = name.to_sym
|
37
|
+
raise ArgumentError, "+#{name}+ is not a setting name" unless _settings.key?(name)
|
37
38
|
|
38
|
-
|
39
|
+
_settings[name].value
|
39
40
|
end
|
40
41
|
|
41
42
|
# Set config value.
|
@@ -49,7 +50,7 @@ module Dry
|
|
49
50
|
|
50
51
|
# Update config with new values
|
51
52
|
#
|
52
|
-
# @param [Hash] A hash with new values
|
53
|
+
# @param values [Hash] A hash with new values
|
53
54
|
#
|
54
55
|
# @return [Config]
|
55
56
|
#
|
@@ -63,6 +64,7 @@ module Dry
|
|
63
64
|
self[key] = value
|
64
65
|
end
|
65
66
|
end
|
67
|
+
self
|
66
68
|
end
|
67
69
|
|
68
70
|
# Dump config into a hash
|
@@ -71,7 +73,7 @@ module Dry
|
|
71
73
|
#
|
72
74
|
# @api public
|
73
75
|
def values
|
74
|
-
|
76
|
+
_settings
|
75
77
|
.map { |setting| [setting.name, setting.value] }
|
76
78
|
.map { |key, value| [key, value.is_a?(self.class) ? value.to_h : value] }
|
77
79
|
.to_h
|
@@ -81,32 +83,32 @@ module Dry
|
|
81
83
|
|
82
84
|
# @api private
|
83
85
|
def finalize!
|
84
|
-
|
86
|
+
_settings.freeze
|
85
87
|
freeze
|
86
88
|
end
|
87
89
|
|
88
90
|
# @api private
|
89
91
|
def pristine
|
90
|
-
self.class.new(
|
92
|
+
self.class.new(_settings.pristine)
|
91
93
|
end
|
92
94
|
|
93
95
|
# @api private
|
94
96
|
def respond_to_missing?(meth, include_private = false)
|
95
|
-
super ||
|
97
|
+
super || _settings.key?(resolve(meth))
|
96
98
|
end
|
97
99
|
|
98
100
|
private
|
99
101
|
|
100
102
|
# @api private
|
101
103
|
def method_missing(meth, *args)
|
102
|
-
setting =
|
104
|
+
setting = _settings[resolve(meth)]
|
103
105
|
|
104
106
|
super unless setting
|
105
107
|
|
106
108
|
if setting.writer?(meth)
|
107
109
|
raise FrozenConfig, 'Cannot modify frozen config' if frozen?
|
108
110
|
|
109
|
-
|
111
|
+
_settings << setting.with(input: args[0])
|
110
112
|
else
|
111
113
|
setting.value
|
112
114
|
end
|
@@ -114,13 +116,13 @@ module Dry
|
|
114
116
|
|
115
117
|
# @api private
|
116
118
|
def resolve(meth)
|
117
|
-
|
119
|
+
_resolved.fetch(meth) { _resolved[meth] = meth.to_s.tr('=', '').to_sym }
|
118
120
|
end
|
119
121
|
|
120
122
|
# @api private
|
121
123
|
def initialize_copy(source)
|
122
124
|
super
|
123
|
-
@
|
125
|
+
@_settings = source._settings.dup
|
124
126
|
end
|
125
127
|
end
|
126
128
|
end
|
data/lib/dry/configurable/dsl.rb
CHANGED
@@ -13,7 +13,7 @@ module Dry
|
|
13
13
|
#
|
14
14
|
# @api private
|
15
15
|
class Setting
|
16
|
-
include Dry::Equalizer(:name, :value, :options)
|
16
|
+
include Dry::Equalizer(:name, :value, :options, inspect: false)
|
17
17
|
|
18
18
|
OPTIONS = %i[input default reader constructor settings].freeze
|
19
19
|
|
@@ -33,9 +33,6 @@ module Dry
|
|
33
33
|
# @api private
|
34
34
|
attr_reader :default
|
35
35
|
|
36
|
-
# @api private
|
37
|
-
attr_reader :value
|
38
|
-
|
39
36
|
# @api private
|
40
37
|
attr_reader :options
|
41
38
|
|
@@ -63,7 +60,21 @@ module Dry
|
|
63
60
|
@input = input.equal?(Undefined) ? default : input
|
64
61
|
@default = default
|
65
62
|
@options = options
|
66
|
-
|
63
|
+
end
|
64
|
+
|
65
|
+
# @api private
|
66
|
+
def input_defined?
|
67
|
+
!input.equal?(Undefined)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @api private
|
71
|
+
def value
|
72
|
+
@value ||= evaluate
|
73
|
+
end
|
74
|
+
|
75
|
+
# @api private
|
76
|
+
def evaluated?
|
77
|
+
instance_variable_defined?(:@value)
|
67
78
|
end
|
68
79
|
|
69
80
|
# @api private
|
@@ -106,12 +117,12 @@ module Dry
|
|
106
117
|
# @api private
|
107
118
|
def initialize_copy(source)
|
108
119
|
super
|
109
|
-
@value = source.value.dup if source.clonable_value?
|
120
|
+
@value = source.value.dup if source.input_defined? && source.clonable_value?
|
110
121
|
@options = source.options.dup
|
111
122
|
end
|
112
123
|
|
113
124
|
# @api private
|
114
|
-
def
|
125
|
+
def evaluate
|
115
126
|
@value = constructor[input.equal?(Undefined) ? nil : input]
|
116
127
|
end
|
117
128
|
end
|
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.11.
|
4
|
+
version: 0.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Holland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|