Make sure all lines in a MultiLineString are valid

Note we're starting to use hashes in tests because the objects here are
complex and using hashes makes the tests easier to read.
This commit is contained in:
Javi Martín
2024-12-02 12:38:28 +01:00
parent 9ef68f863a
commit c3bda443a6
2 changed files with 70 additions and 3 deletions

View File

@@ -80,10 +80,14 @@ class GeojsonFormatValidator < ActiveModel::EachValidator
when "Point"
valid_wgs84_coordinates?(coordinates)
when "LineString"
coordinates.many? && valid_coordinates_array?(coordinates)
valid_linestring_coordinates?(coordinates)
when "MultiPoint"
valid_coordinates_array?(coordinates)
when "Polygon", "MultiLineString"
when "MultiLineString"
coordinates.all? do |linestring_coordinates|
valid_linestring_coordinates?(linestring_coordinates)
end
when "Polygon"
valid_polygon_coordinates?(coordinates)
when "MultiPolygon"
coordinates.all? do |polygon_coordinates|
@@ -102,7 +106,12 @@ class GeojsonFormatValidator < ActiveModel::EachValidator
end
def valid_coordinates_array?(coordinates_array)
coordinates_array.all? { |coordinates| valid_wgs84_coordinates?(coordinates) }
coordinates_array.is_a?(Array) &&
coordinates_array.all? { |coordinates| valid_wgs84_coordinates?(coordinates) }
end
def valid_linestring_coordinates?(coordinates)
valid_coordinates_array?(coordinates) && coordinates.many?
end
def valid_polygon_coordinates?(polygon_coordinates)