@@ -8,14 +8,9 @@ class ManifestRoutesUpdateMessage < BaseMessage
88
99 class ManifestRoutesYAMLValidator < ActiveModel ::Validator
1010 def validate ( record )
11- if is_not_array? ( record . routes ) || contains_non_route_hash_values? ( record . routes )
12- record . errors . add ( :routes , message : 'must be a list of route objects' )
13- return
14- end
11+ return unless is_not_array? ( record . routes ) || contains_non_route_hash_values? ( record . routes )
1512
16- contains_invalid_route_options? ( record )
17- contains_invalid_lb_algo? ( record )
18- nil
13+ record . errors . add ( :routes , message : 'must be a list of route objects' )
1914 end
2015
2116 def is_not_array? ( routes )
@@ -25,43 +20,14 @@ def is_not_array?(routes)
2520 def contains_non_route_hash_values? ( routes )
2621 routes . any? { |r | !( r . is_a? ( Hash ) && r [ :route ] . present? ) }
2722 end
28-
29- def contains_invalid_route_options? ( record )
30- routes = record . routes
31- routes . any? do |r |
32- next unless r [ :options ]
33-
34- return true unless r [ :options ] . is_a? ( Hash )
35-
36- return false if r [ :options ] . empty?
37-
38- r [ :options ] . each_key do |key |
39- RouteOptionsMessage ::VALID_MANIFEST_ROUTE_OPTIONS . exclude? ( key ) &&
40- record . errors . add ( :base ,
41- message : "Route '#{ r [ :route ] } ' contains invalid route option '#{ key } '. \
42- Valid keys: '#{ RouteOptionsMessage ::VALID_MANIFEST_ROUTE_OPTIONS . join ( ', ' ) } '")
43- end
44- end
45- end
46-
47- def contains_invalid_lb_algo? ( record )
48- routes = record . routes
49- routes . each do |r |
50- next unless r [ :options ] && r [ :options ] [ :'loadbalancing-algorithm' ]
51-
52- lb_algo = r [ :options ] [ :'loadbalancing-algorithm' ]
53- RouteOptionsMessage ::VALID_LOADBALANCING_ALGORITHMS . exclude? ( lb_algo ) &&
54- record . errors . add ( :base ,
55- message : "Route '#{ r [ :route ] } ' contains invalid load-balancing algorithm '#{ lb_algo } '. \
56- Valid algorithms: '#{ RouteOptionsMessage ::VALID_LOADBALANCING_ALGORITHMS . join ( ', ' ) } '")
57- end
58- end
5923 end
6024
6125 validates_with NoAdditionalKeysValidator
6226 validates_with ManifestRoutesYAMLValidator , if : proc { |record | record . requested? ( :routes ) }
6327 validate :routes_are_uris , if : proc { |record | record . requested? ( :routes ) }
6428 validate :route_protocols_are_valid , if : proc { |record | record . requested? ( :routes ) }
29+ validate :route_options_are_valid , if : proc { |record | record . requested? ( :routes ) }
30+ validate :lb_algos_are_valid , if : proc { |record | record . requested? ( :routes ) }
6531 validate :no_route_is_boolean
6632 validate :default_route_is_boolean
6733 validate :random_route_is_boolean
@@ -80,6 +46,39 @@ def manifest_route_mappings
8046
8147 private
8248
49+ def route_options_are_valid
50+ return if errors [ :routes ] . present?
51+
52+ routes . any? do |r |
53+ next unless r [ :options ]
54+
55+ return true unless r [ :options ] . is_a? ( Hash )
56+
57+ return false if r [ :options ] . empty?
58+
59+ r [ :options ] . each_key do |key |
60+ RouteOptionsMessage ::VALID_MANIFEST_ROUTE_OPTIONS . exclude? ( key ) &&
61+ errors . add ( :base ,
62+ message : "Route '#{ r [ :route ] } ' contains invalid route option '#{ key } '. \
63+ Valid keys: '#{ RouteOptionsMessage ::VALID_MANIFEST_ROUTE_OPTIONS . join ( ', ' ) } '")
64+ end
65+ end
66+ end
67+
68+ def lb_algos_are_valid
69+ return if errors [ :routes ] . present?
70+
71+ routes . each do |r |
72+ next unless r [ :options ] && r [ :options ] [ :'loadbalancing-algorithm' ]
73+
74+ lb_algo = r [ :options ] [ :'loadbalancing-algorithm' ]
75+ RouteOptionsMessage ::VALID_LOADBALANCING_ALGORITHMS . exclude? ( lb_algo ) &&
76+ errors . add ( :base ,
77+ message : "Route '#{ r [ :route ] } ' contains invalid load-balancing algorithm '#{ lb_algo } '. \
78+ Valid algorithms: '#{ RouteOptionsMessage ::VALID_LOADBALANCING_ALGORITHMS . join ( ', ' ) } '")
79+ end
80+ end
81+
8382 def routes_are_uris
8483 return if errors [ :routes ] . present?
8584
0 commit comments