diff options
| -rw-r--r-- | lib/tom_tom.rb | 36 | ||||
| -rw-r--r-- | spec/lib/tom_tom_spec.rb | 19 | 
2 files changed, 55 insertions, 0 deletions
| diff --git a/lib/tom_tom.rb b/lib/tom_tom.rb index 4a6a58df0..a2ebeb1a8 100644 --- a/lib/tom_tom.rb +++ b/lib/tom_tom.rb @@ -14,6 +14,19 @@ class TomTom      end    end +  def calculate_route(way_costs) +    params = URI.encode_www_form({ +      travelMode: 'bus', +      routeType: 'shortest' +    }) +    locations = convert_way_costs_for_calculate_route(way_costs) + +    response = @connection.post do |req| +      req.url "/routing/1/calculateRoute/#{locations}/json?#{params}" +      req.headers['Content-Type'] = 'application/json' +    end +  end +    def batch(way_costs)      params = URI.encode_www_form({        travelMode: 'bus', @@ -32,6 +45,16 @@ class TomTom          batchItems: batch_items        }.to_json      end + +    response = JSON.parse(response.body) + +    calculated_routes = response['batchItems'] + +    calculated_routes.each do |route| +      next if route['statusCode'] != 200 + +      distance = route['response']['routes'] +    end    end    def convert_way_costs_for_batch(way_costs) @@ -40,4 +63,17 @@ class TomTom        ":#{way_cost.arrival.lat},#{way_cost.arrival.lng}"      end    end + +  def convert_way_costs_for_calculate_route(way_costs) +    coordinates = [] + +    way_costs.map do |way_cost| +      coordinates << "#{way_cost.departure.lat},#{way_cost.departure.lng}" +      coordinates << "#{way_cost.arrival.lat},#{way_cost.arrival.lng}" +    end + +    coordinates +      .uniq +      .join(':') +  end  end diff --git a/spec/lib/tom_tom_spec.rb b/spec/lib/tom_tom_spec.rb index 57f22d26a..c6d387b9f 100644 --- a/spec/lib/tom_tom_spec.rb +++ b/spec/lib/tom_tom_spec.rb @@ -22,4 +22,23 @@ RSpec.describe TomTom do        ])      end    end + +  describe "#convert_way_costs_for_calculate_route" do +    it "turns WayCost points into a string of colon-separated coordinates" do +      way_costs = [ +        WayCost.new( +          departure: Geokit::LatLng.new(48, 2), +          arrival: Geokit::LatLng.new(46, 3) +        ), +        WayCost.new( +          departure: Geokit::LatLng.new(46, 3), +          arrival: Geokit::LatLng.new(47.2, 3.9) +        ) +      ] + +      expect( +        tomtom.convert_way_costs_for_calculate_route(way_costs) +      ).to eq('48,2:46,3:47.2,3.9') +    end +  end  end | 
