mirror of
https://github.com/discourse/discourse.git
synced 2025-01-30 06:28:03 +08:00
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:
parent
afb0adf48d
commit
54a1fea74e
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue
Block a user