DEV: Refactor `ThemeSettingsObjectValidator#validate` (#25904)

What does this change do?

1. Reduce an additional loop through all the properties
2. Extract the validation of child objects into a dedicate method
This commit is contained in:
Alan Guo Xiang Tan 2024-02-28 10:44:46 +08:00 committed by GitHub
parent afb0adf48d
commit 54a1fea74e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 27 additions and 20 deletions

View File

@ -70,22 +70,15 @@ class ThemeSettingsObjectValidator
end
def validate
validate_properties
@properties.each do |property_name, property_attributes|
if property_attributes[:type] == "objects"
@object[property_name]&.each_with_index do |child_object, index|
self
.class
.new(
schema: property_attributes[:schema],
object: child_object,
json_pointer_prefix: "#{@json_pointer_prefix}#{property_name}/#{index}/",
valid_ids_lookup:,
errors: @errors,
)
.validate
end
validate_child_objects(
@object[property_name],
property_name:,
schema: property_attributes[:schema],
)
else
validate_property(property_name, property_attributes)
end
end
@ -94,15 +87,29 @@ class ThemeSettingsObjectValidator
private
def validate_properties
@properties.each do |property_name, property_attributes|
next if property_attributes[:type] == "objects"
next if property_attributes[:required] && !is_property_present?(property_name)
next if !has_valid_property_value_type?(property_attributes, property_name)
next if !has_valid_property_value?(property_attributes, property_name)
def validate_child_objects(objects, property_name:, schema:)
return if objects.blank?
objects.each_with_index do |object, index|
self
.class
.new(
schema:,
object:,
valid_ids_lookup:,
json_pointer_prefix: "#{@json_pointer_prefix}#{property_name}/#{index}/",
errors: @errors,
)
.validate
end
end
def validate_property(property_name, property_attributes)
return if property_attributes[:required] && !is_property_present?(property_name)
return if !has_valid_property_value_type?(property_attributes, property_name)
!has_valid_property_value?(property_attributes, property_name)
end
def has_valid_property_value_type?(property_attributes, property_name)
value = @object[property_name]
type = property_attributes[:type]