mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Add property value validation to ThemeSettingsObjectValidator (#25718)
Why this change? This change adds property value validation to `ThemeSettingsObjectValidator` for the following types: "string", "integer", "float", "boolean", "enum". Note that this class is not being used anywhere yet and is still in development.
This commit is contained in:
committed by
GitHub
parent
bdd91b3928
commit
a64f558f32
@@ -9,7 +9,7 @@ class ThemeSettingsObjectValidator
|
||||
end
|
||||
|
||||
def validate
|
||||
validate_required_properties
|
||||
validate_properties
|
||||
|
||||
@properties.each do |property_name, property_attributes|
|
||||
if property_attributes[:type] == "objects"
|
||||
@@ -28,12 +28,56 @@ class ThemeSettingsObjectValidator
|
||||
|
||||
private
|
||||
|
||||
def validate_required_properties
|
||||
def validate_properties
|
||||
@properties.each do |property_name, property_attributes|
|
||||
if property_attributes[:required] && @object[property_name].nil?
|
||||
@errors[property_name] ||= []
|
||||
@errors[property_name] << I18n.t("themes.settings_errors.objects.required")
|
||||
end
|
||||
next if property_attributes[:required] && validate_required_property(property_name)
|
||||
validate_property_type(property_attributes, property_name)
|
||||
end
|
||||
end
|
||||
|
||||
def validate_property_type(property_attributes, property_name)
|
||||
value = @object[property_name]
|
||||
type = property_attributes[:type]
|
||||
|
||||
return if (value.nil? && type != "enum")
|
||||
return if type == "objects"
|
||||
|
||||
is_value_valid =
|
||||
case type
|
||||
when "string"
|
||||
value.is_a?(String)
|
||||
when "integer"
|
||||
value.is_a?(Integer)
|
||||
when "float"
|
||||
value.is_a?(Float) || value.is_a?(Integer)
|
||||
when "boolean"
|
||||
[true, false].include?(value)
|
||||
when "enum"
|
||||
property_attributes[:choices].include?(value)
|
||||
else
|
||||
add_error(property_name, I18n.t("themes.settings_errors.objects.invalid_type", type:))
|
||||
return
|
||||
end
|
||||
|
||||
if !is_value_valid
|
||||
add_error(
|
||||
property_name,
|
||||
I18n.t("themes.settings_errors.objects.not_valid_#{type}_value", property_attributes),
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def validate_required_property(property_name)
|
||||
if @object[property_name].nil?
|
||||
add_error(property_name, I18n.t("themes.settings_errors.objects.required"))
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def add_error(property_name, error)
|
||||
@errors[property_name] ||= []
|
||||
@errors[property_name] << error
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user