app/services/geojson_serializer.rb

Summary

Maintainability
A
25 mins
Test Coverage
class GeojsonSerializer
  def self.to_geojson(geometry)
    result = {}
    features = []
    geometry.each do |item|
      features << {
        type: "Feature",
        geometry: item.respond_to?('polygon') ? item.polygon : item.point,
        properties: { 
          id: item.id,
          name: item.name,
          color: (item.color if item.respond_to?('color')),
          water_rights: water_rights_for_item(item.water_rights)
        }.delete_if{ |k,v| v.nil? }
      }
    end
    result["type"] = "FeatureCollection"
    result["features"] = features
    ActiveSupport::JSON.encode(result)
  end

private

  def self.water_rights_for_item(water_rights)
    result = []
    water_rights.each do |water_right|
      result << {
        number: water_right.number,
        flow_cfs: water_right.flow_cfs,
        flow_ac_ft: water_right.flow_ac_ft,
        uses: water_right.uses,
        change_application_number: water_right.change_application_number,
        proof_due_date: water_right.proof_due_date,
        priority_date: water_right.priority_date,
        comments: water_right.comments,
        external_link: water_right.external_link,
        view_link_text: water_right.view_link_text
      }
    end
    result
  end
end