<feed xmlns='http://www.w3.org/2005/Atom'>
<title>chouette-core/spec/lib/tom_tom, branch ie-fixes</title>
<subtitle>Chouette manage transport static data</subtitle>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/'/>
<entry>
<title>TomTom::Matrix: Serialize `BigDecimal` as float</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-27T13:24:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=c17665c0cc064c8a14af812dedd645977d110388'/>
<id>c17665c0cc064c8a14af812dedd645977d110388</id>
<content type='text'>
Rails serialises `BigDecimal`s as JSON strings to prevent loss of
precision. The `latitude` and `longitude` columns in `StopArea` are
stored as `BigDecimal`s. The trouble is that TomTom's API requires the
latitude &amp; longitude values to be JSON floats, not strings.

Make a new JSON serialiser that converts the `BigDecimal` coordinates to
float to allow the values to be correctly interpreted by the API.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rails serialises `BigDecimal`s as JSON strings to prevent loss of
precision. The `latitude` and `longitude` columns in `StopArea` are
stored as `BigDecimal`s. The trouble is that TomTom's API requires the
latitude &amp; longitude values to be JSON floats, not strings.

Make a new JSON serialiser that converts the `BigDecimal` coordinates to
float to allow the values to be correctly interpreted by the API.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Matrix#points_from_way_costs: Use array instead of set</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-26T13:52:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=ebd46f068fbf11ea8793e9f7982b3a5291e21398'/>
<id>ebd46f068fbf11ea8793e9f7982b3a5291e21398</id>
<content type='text'>
Using a set ended up not working out. I needed to be able to index into
the list in `#extract_costs_to_way_costs!`, and sets aren't indexable.
This is because they're supposed to be unordered, though modern Ruby
implements `Set` with `Hash` under the hood, which is ordered in Ruby.

I like the idea of having a data structure that automatically eliminates
duplicates, but it wasn't meant to be, because for the extraction to
`WayCost`s, I need an ordered list. Rather than create a new
`OrderedSet` type, I just went the simple route and used an Array,
eliminating the duplicates manually because I know when duplicates are
supposed to occur due to the nature of the data set.

Remove the `#eql?` and `#hash` methods from `TomTom::Matrix::Point`.
Because we're not longer using `Set`, these methods don't need to be
implemented.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Using a set ended up not working out. I needed to be able to index into
the list in `#extract_costs_to_way_costs!`, and sets aren't indexable.
This is because they're supposed to be unordered, though modern Ruby
implements `Set` with `Hash` under the hood, which is ordered in Ruby.

I like the idea of having a data structure that automatically eliminates
duplicates, but it wasn't meant to be, because for the extraction to
`WayCost`s, I need an ordered list. Rather than create a new
`OrderedSet` type, I just went the simple route and used an Array,
eliminating the duplicates manually because I know when duplicates are
supposed to occur due to the nature of the data set.

Remove the `#eql?` and `#hash` methods from `TomTom::Matrix::Point`.
Because we're not longer using `Set`, these methods don't need to be
implemented.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Matrix#extract_costs_to_way_costs!: Try to include stop IDs</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-26T09:49:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=ddfc41f75cb52f02511e2acd6429270bc9c0ab19'/>
<id>ddfc41f75cb52f02511e2acd6429270bc9c0ab19</id>
<content type='text'>
Change this code to get stop IDs based on the change in
be3e1effcdea87909a181c7e9b12cf6867b1839d. It should use these IDs to
construct new `WayCost`s with the combination of stop IDs from departure
and arrival stops.

This doesn't work currently because the method has code that tries to
index the `points` collection, but it's a `Set`, and sets don't support
indexing and aren't ordered, so this code errors. Need to change the
`Set` to something else that will work here.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change this code to get stop IDs based on the change in
be3e1effcdea87909a181c7e9b12cf6867b1839d. It should use these IDs to
construct new `WayCost`s with the combination of stop IDs from departure
and arrival stops.

This doesn't work currently because the method has code that tries to
index the `points` collection, but it's a `Set`, and sets don't support
indexing and aren't ordered, so this code errors. Need to change the
`Set` to something else that will work here.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Matrix#points_as_params: Use `TomTom::Matrix::Point`s</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-23T17:05:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=0a45ba811eefebb97bdc75f5e70da2be13186c28'/>
<id>0a45ba811eefebb97bdc75f5e70da2be13186c28</id>
<content type='text'>
Rewrite this method to accept `TomTom::Matrix::Point`s instead of plain
`Geokit::LatLng` coordinates. Do this because this method needs to take
the result of `#points_from_way_costs` as input, and that method now
returns a `Set` of `Point`s.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rewrite this method to accept `TomTom::Matrix::Point`s instead of plain
`Geokit::LatLng` coordinates. Do this because this method needs to take
the result of `#points_from_way_costs` as input, and that method now
returns a `Set` of `Point`s.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Matrix#points_from_way_costs: Include stop IDs with points</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-23T16:01:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=e2cbcdb4dc32db05e2c6d7a7bb57952e1da6dab3'/>
<id>e2cbcdb4dc32db05e2c6d7a7bb57952e1da6dab3</id>
<content type='text'>
We need to persist stop IDs in order to properly construct `WayCost`
objects from the costs returned from the TomTom matrix API.

In order to persist stop IDs, my idea here is to group together a point
and its corresponding ID into a bucket. When we later
`#extract_costs_to_way_costs!`, we'll be able to grab the correct ID for
a given coordinate to create a `WayCost` from it.

Here, we create a new `TomTom::Matrix::Point` class that encapsulates a
coordinate and an ID, and build a `Set` of those. I needed an `#eql?`
and `#hash` method on `Point` as described in the `Set` documentation
(https://ruby-doc.org/stdlib-1.9.3/libdoc/set/rdoc/Set.html) in order to
properly maintain a unique set.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We need to persist stop IDs in order to properly construct `WayCost`
objects from the costs returned from the TomTom matrix API.

In order to persist stop IDs, my idea here is to group together a point
and its corresponding ID into a bucket. When we later
`#extract_costs_to_way_costs!`, we'll be able to grab the correct ID for
a given coordinate to create a `WayCost` from it.

Here, we create a new `TomTom::Matrix::Point` class that encapsulates a
coordinate and an ID, and build a `Set` of those. I needed an `#eql?`
and `#hash` method on `Point` as described in the `Set` documentation
(https://ruby-doc.org/stdlib-1.9.3/libdoc/set/rdoc/Set.html) in order to
properly maintain a unique set.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>Add `TomTom::Matrix`</title>
<updated>2018-03-27T14:46:18+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-23T11:26:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=4bc33f14a148feb4056db1a2839303b07c67a6b3'/>
<id>4bc33f14a148feb4056db1a2839303b07c67a6b3</id>
<content type='text'>
A new component to the `TomTom` module that asks TomTom's Matrix API
endpoint
(https://developer.tomtom.com/online-routing/online-routing-documentation/matrix-routing)
to compute `WayCost`s. The matrix API will give us all costs between
each pair of coordinates. This will enable us to provide costs for any
combination of points in a journey pattern.

Given a list of `WayCost`s, it will send all points from those costs to
the matrix API and return a list of all non-zero `WayCost`s between all
pairs of coordinates.

`points_from_way_costs()` extracts unique coordinates from the
`WayCost`s.

`points_as_params()` builds a list of points in the format expected by
the matrix API.

The response from the matrix API is formatted as a two-dimensional array
consisting of rows and columns that pair each "origin" point with each
"destination" point. We loop through this matrix and construct new
`WayCost` objects for each pair of coordinates.

At the moment, I haven't figured out how I want to save `WayCost` IDs
when creating the new pairs. Leaving that for later.

Refs #6222
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A new component to the `TomTom` module that asks TomTom's Matrix API
endpoint
(https://developer.tomtom.com/online-routing/online-routing-documentation/matrix-routing)
to compute `WayCost`s. The matrix API will give us all costs between
each pair of coordinates. This will enable us to provide costs for any
combination of points in a journey pattern.

Given a list of `WayCost`s, it will send all points from those costs to
the matrix API and return a list of all non-zero `WayCost`s between all
pairs of coordinates.

`points_from_way_costs()` extracts unique coordinates from the
`WayCost`s.

`points_as_params()` builds a list of points in the format expected by
the matrix API.

The response from the matrix API is formatted as a two-dimensional array
consisting of rows and columns that pair each "origin" point with each
"destination" point. We loop through this matrix and construct new
`WayCost` objects for each pair of coordinates.

At the moment, I haven't figured out how I want to save `WayCost` IDs
when creating the new pairs. Leaving that for later.

Refs #6222
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Batch: Extract code to `#extract_costs_to_way_costs!`</title>
<updated>2018-03-14T15:38:40+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-12T14:25:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=33c2dad6ba2483a4c71d7248979bf9d82a65f234'/>
<id>33c2dad6ba2483a4c71d7248979bf9d82a65f234</id>
<content type='text'>
Extract some code from `#batch` to allow us to test the part that takes
distance and time values from the response JSON and put fill them into
`WayCost`s.

In order for the test to work, had to add an `#==` method to `WayCost`
and make `distance` and `time` accessors.

The JSON file fixture is a copy of a response from the TomTom `/batch`
API. The file is pretty big. I'm not sure if maybe I should condense it
for the sake of test performance.

Refs #6095
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Extract some code from `#batch` to allow us to test the part that takes
distance and time values from the response JSON and put fill them into
`WayCost`s.

In order for the test to work, had to add an `#==` method to `WayCost`
and make `distance` and `time` accessors.

The JSON file fixture is a copy of a response from the TomTom `/batch`
API. The file is pretty big. I'm not sure if maybe I should condense it
for the sake of test performance.

Refs #6095
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom::Batch: Rename `#convert_way_costs_for_batch`</title>
<updated>2018-03-14T15:38:40+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-12T11:52:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=e558625cd5e3cad60757a537320eb15f1c045cd0'/>
<id>e558625cd5e3cad60757a537320eb15f1c045cd0</id>
<content type='text'>
Rename to `#convert_way_costs` since this method now lives inside the
`TomTom::Batch` class, so that part of the name became redundant.

Refs #6095
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rename to `#convert_way_costs` since this method now lives inside the
`TomTom::Batch` class, so that part of the name became redundant.

Refs #6095
</pre>
</div>
</content>
</entry>
<entry>
<title>TomTom: Provide `TomTom.batch(...)` method</title>
<updated>2018-03-14T15:38:40+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-12T11:50:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=05d2014dff30901feba5c9aab3e066d89d3771ca'/>
<id>05d2014dff30901feba5c9aab3e066d89d3771ca</id>
<content type='text'>
This change enables us to call `TomTom.batch(...)` instead of
`TomTom.new.batch(...)` a couple commits ago. This is nice because the
initialisation was kind of unnecessary for users of the class.

Refs #6095
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change enables us to call `TomTom.batch(...)` instead of
`TomTom.new.batch(...)` a couple commits ago. This is nice because the
initialisation was kind of unnecessary for users of the class.

Refs #6095
</pre>
</div>
</content>
</entry>
<entry>
<title>Move `lib/tom_tom.rb` to `lib/tom_tom/batch.rb`</title>
<updated>2018-03-14T15:38:39+00:00</updated>
<author>
<name>Teddy Wing</name>
</author>
<published>2018-03-12T11:41:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.teddywing.com/fork/chouette-core/commit/?id=f04a89b3af581c8956add61e4a05edc0ae9405f5'/>
<id>f04a89b3af581c8956add61e4a05edc0ae9405f5</id>
<content type='text'>
Separate the functionality a little better by moving the `/batch`
endpoint code into a new class. The goal here is also to lay the
foundation for being able to call `TomTom.batch()` instead of
`TomTom.new.batch()`.

Refs #6095
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Separate the functionality a little better by moving the `/batch`
endpoint code into a new class. The goal here is also to lay the
foundation for being able to call `TomTom.batch()` instead of
`TomTom.new.batch()`.

Refs #6095
</pre>
</div>
</content>
</entry>
</feed>
