-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
Summary
If we use methods like validate_with and configure with nested deep setting structure and custom validation methods, validation methods gets old settings payload and always returns true
Code
class FlatConfig < Qonfig::DataSet
expose_yaml Rails.root.join('tmp/flat_config.yml'), via: :env_key, env: :default
validate by: :some_validation_method
def some_validation_method
puts "try to validate settings.some_key = #{settings.some_key}"
settings.some_key != 'bad'
end
end
class NestedDeepConfig < Qonfig::DataSet
expose_yaml Rails.root.join('tmp/deep_config.yml'), via: :env_key, env: :default
validate by: :some_validation_method
def some_validation_method
puts "try to validate settings.some_key.some_key2 = #{settings.some_key.some_key2}"
settings.some_key.some_key2 != 'bad' # HERE we have settings.some_key.some_key2 = good
end
end
endexample 1 (flat)
config = FlatConfig.new
invalid_payload = {
some_key: 'bad',
}
puts "valid_with? = #{config.valid_with?(invalid_payload)}"
begin
puts 'config.configure(invalid_payload)'
config.configure(invalid_payload)
puts 'Hello invalid config =('
puts config.settings.some_key.to_s
rescue StandardError => error
puts error
endexample 2 (nested)
config = NestedDeepConfig.new
invalid_payload = {
some_key: {
some_key2: 'bad',
},
}
puts "valid_with? = #{config.valid_with?(invalid_payload)}"
begin
puts 'config.configure(invalid_payload)'
config.configure(invalid_payload)
puts 'Hello invalid config =('
puts config.settings.some_key.some_key2.to_s
rescue StandardError => error
puts error
endtmp/flat_config.yml
default:
some_key: 'good'tmp/deep_config.yml
default:
some_key:
some_key2: 'good'Expected behavior
- example 1 (flat)
valid_with?= falseconfigure(invalid_payload)- raises error
- example 2 (nested)
valid_with?= falseconfigure(invalid_payload)- raises error
Current behavior
- example 1 (flat)
valid_with?= falseconfigure(invalid_payload)- raises error
- example 2 (nested)
valid_with?= trueconfigure(invalid_payload)- no error raises =(
Metadata
Metadata
Assignees
Labels
No labels