Skip to content

Commit 916363e

Browse files
committed
Add validation for options/lb_algo
1 parent 429e90b commit 916363e

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

app/controllers/v3/routes_controller.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ def create
7878

7979
space = Space.find(guid: message.space_guid)
8080
domain = Domain.find(guid: message.domain_guid)
81-
options = message.
8281

8382
unprocessable_space! unless space
8483
unprocessable_domain! unless domain

app/messages/route_create_message.rb

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class RouteCreateMessage < MetadataBaseMessage
5757

5858
validates_with NoAdditionalKeysValidator
5959
validates_with RelationshipValidator
60+
validates_with OptionsValidator
6061

6162
delegate :space_guid, to: :relationships_message
6263
delegate :domain_guid, to: :relationships_message
@@ -66,6 +67,10 @@ def relationships_message
6667
@relationships_message ||= Relationships.new(relationships&.deep_symbolize_keys)
6768
end
6869

70+
def options_message
71+
@options_message ||= RouteOptions.new(options&.deep_symbolize_keys)
72+
end
73+
6974
def wildcard?
7075
host == '*'
7176
end
@@ -86,11 +91,13 @@ def domain_guid
8691
end
8792
end
8893

89-
# class RouteOptions < BaseMessage
90-
# register_allowed_keys %i[loadbalancing-algorithm]
91-
# validates_with NoAdditionalKeysValidator
92-
# validates :loadbalancing-algorithm, to_one_relationship: true
93-
# end
94-
94+
class RouteOptions < BaseMessage
95+
register_allowed_keys %i[lb_algo]
96+
validates_with NoAdditionalKeysValidator
97+
validates :lb_algo,
98+
inclusion: { in: %w[least-connections round-robin], message: 'must be \'least-connections\' or \'round-robin\'' },
99+
presence: true,
100+
allow_nil: true
101+
end
95102
end
96103
end

app/messages/validators.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,28 @@ def validate(record)
240240
end
241241
end
242242

243+
class OptionsValidator < ActiveModel::Validator
244+
def validate(record)
245+
unless record.options.is_a?(Hash)
246+
record.errors.add(:options, message: "'options' is not an object")
247+
return
248+
end
249+
250+
if record.options.empty?
251+
record.errors.add(:options, message: "'options' must include one or more valid options")
252+
return
253+
end
254+
255+
opt = record.options_message
256+
257+
return if opt.valid?
258+
259+
opt.errors.full_messages.each do |message|
260+
record.errors.add(:options, message:)
261+
end
262+
end
263+
end
264+
243265
class ToOneRelationshipValidator < ActiveModel::EachValidator
244266
def validate_each(record, attribute, relationship)
245267
if has_correct_structure?(relationship)

0 commit comments

Comments
 (0)