Skip to content

Commit 346d744

Browse files
committed
Allow Hash as a possible config value
1 parent 94f67fa commit 346d744

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lib/dry/configurable/config.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ def []=(name, value)
5757
# @api public
5858
def update(values)
5959
values.each do |key, value|
60-
case value
61-
when Hash
60+
if value.is_a?(Hash) && self[key].is_a?(self.class)
6261
self[key].update(value)
6362
else
6463
self[key] = value

spec/integration/dry/configurable/config_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@
3535
expect(klass.config.db.user).to eql("jane")
3636
expect(klass.config.db.pass).to eql("supersecret")
3737
end
38+
39+
it 'runs constructors' do
40+
klass.setting :db do
41+
setting :user, default: "root", constructor: ->(v) { v.upcase }
42+
setting :sslcert, constructor: ->(v) { v&.values_at(:pem, :pass)&.join }
43+
end
44+
45+
klass.config.update(db: {user: "jane", sslcert: {pem: "cert", pass: "qwerty"}})
46+
47+
expect(klass.config.db.user).to eql("JANE")
48+
expect(klass.config.db.sslcert).to eql("certqwerty")
49+
end
3850
end
3951

4052
describe "#to_h" do

0 commit comments

Comments
 (0)