Skip to content

Commit

Permalink
Switch to the Try monade - Massive refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
xavierguihot committed Jan 1, 2018
1 parent 99bae9f commit 6afa9ec
Show file tree
Hide file tree
Showing 14 changed files with 999 additions and 2,204 deletions.
24 changes: 15 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
## Overview


Version: 1.0.4
Version: 1.1.0

API Scaladoc: [GeoBase](http://xavierguihot.com/geobase/#com.geobase.GeoBase)

Expand Down Expand Up @@ -46,22 +46,28 @@ import com.geobase.GeoBase

val geoBase = new GeoBase()

assert(geoBase.getCityForAirport("CDG") == "PAR")
assert(geoBase.getCountryForAirline("AF") == "FR")
assert(geoBase.getCountryForAirport("CDG") == "FR")
assert(geoBase.getCurrencyForCity("NYC") == "USD")
assert(geoBase.getDistanceBetween("PAR", "NCE") == 686)
assert(geoBase.getTripDurationFromLocalDates("20160606_1627", "CDG", "20160606_1757", "JFK") == 7.5d)
assert(geoBase.getNearbyAirportsWithDetails("CDG", 50) == List("LBG", "ORY", "VIY", "POX"))
assert(geoBase.getCityFor("CDG").get == "PAR")
assert(geoBase.getCountryFor("CDG").get == "FR")
assert(geoBase.getCountryForAirline("AF").get == "FR")
assert(geoBase.getCurrencyFor("NYC").get == "USD")
assert(geoBase.getDistanceBetween("PAR", "NCE").get == 686)
assert(geoBase.getTripDurationFromLocalDates("20160606_1627", "CDG", "20160606_1757", "JFK").get == 7.5d)
assert(geoBase.getNearbyAirports("CDG", 50).get == List("LBG", "ORY", "VIY", "POX"))
```

Getters all have a return type embedded within the Try monade. Throwing
exceptions when one might request mappings for non existing locations, isn't
realy the idiomatic of scala, and simply embedding the result in the Option
monad doesn't give the user the possibility to understand what went wrong.
Thus the usage of the Try monade.


## Including geobase to your dependencies:


With sbt, just add this one line to your build.sbt:

libraryDependencies += "geobase" % "geobase" % "1.0.4" from "https://github.com/xavierguihot/geobase/releases/download/v1.0.4/geobase-1.0.4.jar"
libraryDependencies += "geobase" % "geobase" % "1.1.0" from "https://github.com/xavierguihot/geobase/releases/download/v1.1.0/geobase-1.1.0.jar"


## Building the project:
Expand Down
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name := "geobase"

version := "1.0.4"
version := "1.1.0"

scalaVersion := "2.11.8"

Expand Down
1,054 changes: 181 additions & 873 deletions docs/com/geobase/GeoBase.html

Large diffs are not rendered by default.

24 changes: 14 additions & 10 deletions docs/com/geobase/package.html
Original file line number Diff line number Diff line change
Expand Up @@ -90,19 +90,23 @@ <h4 class="signature">

<span class="kw">val</span> geoBase = <span class="kw">new</span> GeoBase()

assert(geoBase.getCityForAirport(<span class="lit">"CDG"</span>) == <span class="lit">"PAR"</span>)
assert(geoBase.getCountryForAirline(<span class="lit">"AF"</span>) == <span class="lit">"FR"</span>)
assert(geoBase.getCountryForAirport(<span class="lit">"CDG"</span>) == <span class="lit">"FR"</span>)
assert(geoBase.getCurrencyForCity(<span class="lit">"NYC"</span>) == <span class="lit">"USD"</span>)
assert(geoBase.getDistanceBetween(<span class="lit">"PAR"</span>, <span class="lit">"NCE"</span>) == <span class="num">686</span>)
assert(geoBase.getTripDurationFromLocalDates(<span class="lit">"20160606_1627"</span>, <span class="lit">"CDG"</span>, <span class="lit">"20160606_1757"</span>, <span class="lit">"JFK"</span>) == <span class="num">7.5</span>d)
assert(geoBase.getNearbyAirportsWithDetails(<span class="lit">"CDG"</span>, <span class="num">50</span>) == <span class="std">List</span>(<span class="lit">"LBG"</span>, <span class="lit">"ORY"</span>, <span class="lit">"VIY"</span>, <span class="lit">"POX"</span>))</pre><p>The GeoBase object can be used within Spark jobs (in this case, don't forget
to <b>broadcast GeoBase</b>).</p><p>Opentraveldata is an accurate and maintained source of various travel
assert(geoBase.getCityFor(<span class="lit">"CDG"</span>).get == <span class="lit">"PAR"</span>)
assert(geoBase.getCountry(<span class="lit">"CDG"</span>).get == <span class="lit">"FR"</span>)
assert(geoBase.getCurrencyFor(<span class="lit">"NYC"</span>).get == <span class="lit">"USD"</span>)
assert(geoBase.getCountryForAirline(<span class="lit">"AF"</span>).get == <span class="lit">"FR"</span>)
assert(geoBase.getDistanceBetween(<span class="lit">"PAR"</span>, <span class="lit">"NCE"</span>).get == <span class="num">686</span>)
assert(geoBase.getTripDurationFromLocalDates(<span class="lit">"20160606_1627"</span>, <span class="lit">"CDG"</span>, <span class="lit">"20160606_1757"</span>, <span class="lit">"JFK"</span>).get == <span class="num">7.5</span>d)
assert(geoBase.getNearbyAirports(<span class="lit">"CDG"</span>, <span class="num">50</span>).get == <span class="std">List</span>(<span class="lit">"LBG"</span>, <span class="lit">"ORY"</span>, <span class="lit">"VIY"</span>, <span class="lit">"POX"</span>))</pre><p>The GeoBase object can be used within Spark jobs (in this case, don't forget
the possibility to <b>broadcast GeoBase</b>).</p><p>Opentraveldata is an accurate and maintained source of various travel
mappings. This scala wrapper around opentraveldata mostly uses this
file: <a href="https://github.com/opentraveldata/opentraveldata/tree/master/opentraveldata/optd_por_public.csv">
optd_por_public.csv</a>.</p><p>Source <a href="https://github.com/XavierGuihot/geobase/blob/master/src/main/scala/com/geobase/GeoBase.scala">
optd_por_public.csv</a>.</p><p>Getters all have a return type embedded within the Try monade. Throwing
exceptions as is when one might request mappings for non existing locations,
isn't realy the scala way, and simply embedding the result in the Option
monad doesn't give the user the possibility to understand what went wrong.
Thus the usage of the Try monade.</p><p>Source <a href="https://github.com/XavierGuihot/geobase/blob/master/src/main/scala/com/geobase/GeoBase.scala">
GeoBase</a>
</p></div><dl class="attributes block"> <dt>Since</dt><dd><p>2016-05</p></dd><dt>To do</dt><dd><span class="cmt"><p>use memoization?</p></span></dd></dl></div>
</p></div><dl class="attributes block"> <dt>Since</dt><dd><p>2016-05</p></dd></dl></div>
</li></ol>
</div>

Expand Down
90 changes: 6 additions & 84 deletions docs/index/index-g.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,109 +23,31 @@
<div class="name">geobase</div>
<div class="occurrences"><a href="../com/package.html" class="extype" name="com">com</a> </div>
</div><div class="entry">
<div class="name">getCitiesForAirport</div>
<div class="name">getCitiesFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCitiesForAirportOrElse</div>
<div class="name">getCityFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCityForAirport</div>
<div class="name">getContinentFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCityForAirportOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForAirport</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForAirportOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForCity</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForCityOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForCountry</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForCountryOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForLocation</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getContinentForLocationOrElse</div>
<div class="name">getCountryFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForAirline</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForAirlineOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForAirport</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForAirportOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForCity</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCountryForCityOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCurrencyForCity</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCurrencyForCityOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCurrencyForCountry</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getCurrencyForCountryOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getDayOfWeek</div>
<div class="name">getCurrencyFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getDistanceBetween</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getDistanceBetweenOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getEFTfromLocalDates</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getGeoType</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForAirport</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForAirportOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForCity</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForCityOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForCountry</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForCountryOrElse</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForLocation</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getIataZoneForLocationOrElse</div>
<div class="name">getIataZoneFor</div>
<div class="occurrences"><a href="../com/geobase/GeoBase.html" class="extype" name="com.geobase.GeoBase">GeoBase</a> </div>
</div><div class="entry">
<div class="name">getNearbyAirports</div>
Expand Down
Loading

0 comments on commit 6afa9ec

Please sign in to comment.