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:
Alan Guo Xiang Tan
2024-02-19 13:19:35 +08:00
committed by GitHub
parent bdd91b3928
commit a64f558f32
3 changed files with 165 additions and 7 deletions

View File

@@ -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