mapbox-sdk 2.2.0 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 206fa6c2df10182a6dec5a95110961dd3688eb42181af8d3ff8d9264410cb69c
4
- data.tar.gz: 8e9771a4339e26319e665d665f7f1abdfc3c5a45daca881846e9f4a9f698fe6c
3
+ metadata.gz: 485c58289f4baee1dc8d98e0c63642a77abc2b9290bda6f15afb20e8d8157bc3
4
+ data.tar.gz: 4aab789f653d516d1ae88811f598fd8190c7bfa6e6e3122b558eaa442144e677
5
5
  SHA512:
6
- metadata.gz: 9708d334fe1a76f02886d8a8da17d862f192a2c1a6705ee90588145c3a7e9d56a4f068d8a5193bf811fd489fc3a7543e07415e516c9adbb2e024dc7bb3361b0b
7
- data.tar.gz: 8789e29b94f27a624d3d8eb89c809cdb710a8262b72abb5017a125662d2299fc2d08fc2df7cc0d30e35ae6343cd2b6a0e877f08f655d16ba63a61a7f4b2c5f41
6
+ metadata.gz: 33e2264dda2cdc27b191b1efe999db0596da3d5e861d6de00ab576e400764a2b0d23f9efed98a38cce292aa39ce0b73e4f837fb6c155cf6f54ca7a285078c51e
7
+ data.tar.gz: ebec6b814a78b45bb9517e3e66ae2c0edea63d91cae279ac328fd2de49b0cf5760c0b6e5f697095b9b563094a554777ad53072689a62bfe97b1377ac3243d3a8
data/CHANGELOG.md CHANGED
@@ -4,7 +4,29 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [2.1.0] - 2018-12-14
7
+ ## [2.3.3] - 2021-09-08
8
+ ### Changed
9
+ - See https://github.com/mapbox/mapbox-sdk-rb/pull/55 / https://github.com/mapbox/mapbox-sdk-rb/issues/54
10
+
11
+ ## [2.3.2] - 2020-11-23
12
+ ### Changed
13
+ - Fixed URI.encode obsolete warnings in Ruby 2.7
14
+
15
+ ## [2.3.1] - 2020-11-07
16
+ ### Changed
17
+ - Update to restclient 2.1.0
18
+
19
+ ## [2.3.0] - 2019-01-16
20
+ ### Added
21
+ - Matrix endpoint, docs, and tests
22
+ - Map Matching endpoint, docs, and tests
23
+ - Optimization endpoint, docs, and tests
24
+
25
+ ### Changed
26
+
27
+ ### Removed
28
+
29
+ ## [2.2.0] - 2018-12-14
8
30
  ### Added
9
31
  - Selection of directions profiles
10
32
  - Isochrone endpoint
data/Gemfile CHANGED
@@ -3,11 +3,11 @@ gemspec
3
3
 
4
4
  if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('1.9.3')
5
5
  gem 'i18n', '< 0.7'
6
- gem 'rest-client', '~> 2.0.1'
6
+ gem 'rest-client', '~> 2.1.0'
7
7
  gem "activesupport", ">= 4.1.11"
8
8
  gem 'rake', '10.1.0'
9
9
  end
10
10
 
11
11
  group :development, :test do
12
12
  gem "coveralls", :require => false
13
- end
13
+ end
data/README.md CHANGED
@@ -12,17 +12,29 @@ gem install mapbox-sdk
12
12
 
13
13
  ## Services
14
14
 
15
- * [Geocoding](https://www.mapbox.com/api-documentation/#geocoding) [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/geocoding.md)]
15
+ * [Geocoding](https://docs.mapbox.com/api/search/) [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/geocoding.md)]
16
16
  * Forward (place names ⇢ longitude, latitude)
17
17
  * Reverse (longitude, latitude ⇢ place names)
18
- * [Directions](https://www.mapbox.com/api-documentation/#directions): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/directions.md)]
19
- * Profiles for driving, walking, and cycling
20
- * [Tilequery](https://www.mapbox.com/api-documentation/#tilequery): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/tilequery.md)]
21
- * [Isochrone](https://www.mapbox.com/api-documentation/#isochrone): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/masterdocs/isochrone.md)]
18
+ * [Directions](https://docs.mapbox.com/api/navigation/#directions): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/directions.md)]
19
+ * Profiles for driving, driving-traffic, walking, and cycling
20
+ * [Tilequery](https://docs.mapbox.com/api/maps/#tilequery): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/tilequery.md)]
21
+ * [Isochrone](https://docs.mapbox.com/api/navigation/#isochrone): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/isochrone.md)]
22
22
  * Profiles for driving, walking, and cycling
23
+ * [Matrix](https://docs.mapbox.com/api/navigation/#matrix): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/matrix.md)]
24
+ * Profiles for driving, driving-traffic, walking, and cycling
25
+ * [Map Matching](https://docs.mapbox.com/api/navigation/#map-matching): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/mapmatching.md)]
26
+ * Profiles for driving, driving-traffic, walking, and cycling
27
+ * [Optimization](https://docs.mapbox.com/api/navigation/#optimization): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/optimization.md)]
28
+ * Profiles for driving, driving-traffic, walking, and cycling
23
29
 
24
30
  ## Testing
25
31
 
26
- Run `bundle exec ruby -Itest test/all_tests.rb` or individual tests as needed.
32
+ You'll need to [create an access token](https://account.mapbox.com/access-tokens/create) in order to run tests.
33
+
34
+ Then you can run the entire test suite with the following command:
35
+
36
+ ```
37
+ MapboxAccessToken=<YOUR_ACCESS_TOKEN> bundle exec ruby -Itest test/all_tests.rb
38
+ ```
27
39
 
28
40
  Heavily influenced by Stripe's Ruby client, and includes its MIT license.
data/docs/directions.md CHANGED
@@ -13,7 +13,7 @@ drivingDirections = Mapbox::Directions.directions([{
13
13
  "latitude" => 38
14
14
  }], "driving")
15
15
 
16
- # To provide query parameters to the Directions API, such as `geometries`, `language` or `steps`, add those in a Hash as third parameter (find the full list of parameters (here)[https://www.mapbox.com/api-documentation/#retrieve-directions]).
16
+ # To provide query parameters to the Directions API, such as `geometries`, `language` or `steps`, add those in a Hash as third parameter (find the full list of parameters (here)[https://www.mapbox.com/api-documentation/navigation/#retrieve-directions]).
17
17
 
18
18
  # For instance, to use the `geometries` and `voice_instructions` parameter:
19
19
  drivingDirections = Mapbox::Directions.directions([{
@@ -26,6 +26,6 @@ drivingDirections = Mapbox::Directions.directions([{
26
26
  geometries: "geojson",
27
27
  voice_instructions: true
28
28
  })
29
-
30
- # In the above example, you can substitute `driving` for `driving-traffic`, `cycling` or `walking`. For more, [check out the documentation](https://www.mapbox.com/api-documentation/#directions).
31
- ```
29
+
30
+ # In the above example, you can substitute `driving` for `driving-traffic`, `cycling` or `walking`. For more, [check out the documentation](https://www.mapbox.com/api-documentation/navigation/#directions).
31
+ ```
@@ -0,0 +1,43 @@
1
+ # Map Matching
2
+
3
+ ```rb
4
+ require "mapbox-sdk"
5
+ Mapbox.access_token = "YOUR_ACCESS_TOKEN"
6
+
7
+ # Snap fuzzy, inaccurate GPS or phone traces to the road and path network with required profile parameter.
8
+ matching = Mapbox::MapMatching.map_matching([{
9
+ "longitude" => -117.17282,
10
+ "latitude" => 32.71204
11
+ }, {
12
+ "longitude" => -117.17288,
13
+ "latitude" => 32.71225
14
+ }, {
15
+ "longitude" => -117.17293,
16
+ "latitude" => 32.71244
17
+ },{
18
+ "longitude" => -117.17292,
19
+ "latitude" => 32.71256
20
+ }], "driving")
21
+
22
+ # To provide query parameters to the Matrix API, such as `annotations`, `approaches` or `sources`, add those in a Hash as third parameter (find the full list of parameters (here)[https://www.mapbox.com/api-documentation/navigation/#matrix]).
23
+
24
+ # For instance, to use the `geometries` and `voice_instructions` parameter:
25
+ matching = Mapbox::MapMatching.map_matching([{
26
+ "longitude" => -117.17282,
27
+ "latitude" => 32.71204
28
+ }, {
29
+ "longitude" => -117.17288,
30
+ "latitude" => 32.71225
31
+ }, {
32
+ "longitude" => -117.17293,
33
+ "latitude" => 32.71244
34
+ },{
35
+ "longitude" => -117.17292,
36
+ "latitude" => 32.71256
37
+ }], "driving", {
38
+ annotations: ["duration", "distance", "speed"],
39
+ approaches: ["curb","curb","curb","curb"]
40
+ })
41
+
42
+ # In the above example, you can substitute `driving` for `driving-traffic`, `cycling` or `walking`. For more, [check out the documentation](https://docs.mapbox.com/api/navigation/#map-matching).
43
+ ```
data/docs/matrix.md ADDED
@@ -0,0 +1,38 @@
1
+ # Matrix
2
+
3
+ ```rb
4
+ require "mapbox-sdk"
5
+ Mapbox.access_token = "YOUR_ACCESS_TOKEN"
6
+
7
+ # Return travel times between many points, passing in the required profile parameter.
8
+ matrix = Mapbox::Matrix.matrix([{
9
+ "longitude" => -122.42,
10
+ "latitude" => 37.78
11
+ }, {
12
+ "longitude" => -122.45,
13
+ "latitude" => 37.91
14
+ }, {
15
+ "longitude" => -122.48,
16
+ "latitude" => 37.73
17
+ }], "walking")
18
+
19
+ # To provide query parameters to the Matrix API, such as `annotations`, `approaches` or `sources`, add those in a Hash as third parameter (find the full list of parameters (here)[https://www.mapbox.com/api-documentation/navigation/#matrix]).
20
+
21
+ # For instance, to use the `annotations`, `approaches`, and `destinations` parameters:
22
+ matrix = Mapbox::Matrix.matrix([{
23
+ "longitude" => -122.42,
24
+ "latitude" => 37.78
25
+ }, {
26
+ "longitude" => -122.45,
27
+ "latitude" => 37.91
28
+ }, {
29
+ "longitude" => -122.48,
30
+ "latitude" => 37.73
31
+ }], "cycling", {
32
+ annotations: ["duration", "distance"],
33
+ approaches: ["curb","","curb"],
34
+ destinations: [0,1]
35
+ })
36
+
37
+ # In the above example, you can substitute `driving` for `driving-traffic`, `cycling` or `walking`. For more, [check out the documentation](https://www.mapbox.com/api-documentation/navigation/#matrix).
38
+ ```
@@ -0,0 +1,52 @@
1
+ # Optimization
2
+
3
+ ```rb
4
+ require "mapbox-sdk"
5
+ Mapbox.access_token = "YOUR_ACCESS_TOKEN"
6
+
7
+ # Returns a duration-optimized route between coordinates with required profile parameter.
8
+ optimization = Mapbox::Optimization.optimization([{
9
+ "longitude" => -122.42,
10
+ "latitude" => 37.78
11
+ }, {
12
+ "longitude" => -122.45,
13
+ "latitude" => 37.91
14
+ }, {
15
+ "longitude" => -122.48,
16
+ "latitude" => 37.73
17
+ }], "walking")
18
+
19
+ # To provide query parameters to the Matrix API, such as `annotations`, `approaches` or `sources`, add those in a Hash as third parameter (find the full list of parameters (here)[https://www.mapbox.com/api-documentation/navigation/#matrix]).
20
+
21
+ # For instance, to use the `annotations`, `approaches`, and `overview` parameters:
22
+ optimization = Mapbox::Optimization.optimization([{
23
+ "longitude" => -122.42,
24
+ "latitude" => 37.78
25
+ }, {
26
+ "longitude" => -122.45,
27
+ "latitude" => 37.91
28
+ }, {
29
+ "longitude" => -122.48,
30
+ "latitude" => 37.73
31
+ }], "cycling", {
32
+ annotations: ["duration", "distance"],
33
+ approaches: ["curb","curb","curb"],
34
+ overview: "false"
35
+ })
36
+
37
+ # The bearings param works a bit differently. Here's an example, leaving the second bearing blank with an additional `;` character (you must include the same number of bearings as waypoints, per the docs):
38
+ optimization = Mapbox::Optimization.optimization([{
39
+ "longitude" => -122.42,
40
+ "latitude" => 37.78
41
+ }, {
42
+ "longitude" => -122.45,
43
+ "latitude" => 37.91
44
+ }, {
45
+ "longitude" => -122.48,
46
+ "latitude" => 37.73
47
+ }], "driving", {
48
+ bearings: "45,90;;90,1"
49
+ })
50
+
51
+ # In the above example, you can substitute `driving` for `driving-traffic`, `cycling` or `walking`. For more, [check out the documentation](https://docs.mapbox.com/api/navigation/#optimization).
52
+ ```
@@ -39,7 +39,7 @@ module Mapbox
39
39
 
40
40
  return request(
41
41
  :get,
42
- "/geocoding/v5/#{dataset}/#{URI.escape(query)}.json#{params}",
42
+ "/geocoding/v5/#{dataset}/#{URI.encode_www_form_component(query)}.json#{params}",
43
43
  nil)
44
44
  end
45
45
 
@@ -0,0 +1,57 @@
1
+ module Mapbox
2
+ class MapMatching
3
+ include Mapbox::APIOperations::Request
4
+ extend Mapbox::HashUtils
5
+
6
+ def self.assemble_params(options={})
7
+ annotations = options[:annotations]
8
+ approaches = options[:approaches]
9
+ radiuses = options[:radiuses]
10
+ timestamps = options[:timestamps]
11
+ waypoint_names = options[:waypoint_names]
12
+ waypoints = options[:waypoints]
13
+
14
+ params = ''
15
+ opts = options.select { |key, value| key != :annotations && key != :approaches && key != :radiuses && key != :timestamps && key != :waypoint_names && key != :waypoints }
16
+ if opts.length > 0
17
+ params += "#{params.length > 0 ? '&' : '?'}#{URI.encode_www_form(opts)}"
18
+ end
19
+
20
+ if annotations then
21
+ params += "#{params.length > 0 ? '&' : '?'}annotations=#{annotations.join(',')}"
22
+ end
23
+
24
+ if approaches then
25
+ params += "#{params.length > 0 ? '&' : '?'}approaches=#{approaches.join(';')}"
26
+ end
27
+
28
+ if radiuses then
29
+ params += "#{params.length > 0 ? '&' : '?'}radiuses=#{radiuses.join ';'}"
30
+ end
31
+
32
+ if timestamps then
33
+ params += "#{params.length > 0 ? '&' : '?'}timestamps=#{timestamps.join ';'}"
34
+ end
35
+
36
+ if waypoint_names then
37
+ params += "#{params.length > 0 ? '&' : '?'}waypoint_names=#{waypoint_names.join ';'}"
38
+ end
39
+
40
+ if waypoints then
41
+ params += "#{params.length > 0 ? '&' : '?'}waypoints=#{waypoints.join ';'}"
42
+ end
43
+
44
+ return params
45
+ end
46
+
47
+ def self.map_matching(waypoints, profile, options={})
48
+ formatted_waypoints = waypoints.map {|p| xy_from_hash(p).join ','}.join ';'
49
+ params = self.assemble_params(options)
50
+
51
+ return request(
52
+ :get,
53
+ "/matching/v5/mapbox/#{profile}/#{formatted_waypoints}.json#{params}",
54
+ nil)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,32 @@
1
+ module Mapbox
2
+ class Matrix
3
+ include Mapbox::APIOperations::Request
4
+ extend Mapbox::HashUtils
5
+
6
+ def self.assemble_params(options={})
7
+ opts = options.dup
8
+
9
+ self.joinArrayParam(opts, :destinations)
10
+ self.joinArrayParam(opts, :annotations, ',')
11
+ self.joinArrayParam(opts, :approaches)
12
+ self.joinArrayParam(opts, :sources)
13
+
14
+ return "?#{URI.encode_www_form(opts)}"
15
+ end
16
+
17
+ def self.joinArrayParam(opts, name, joinSymbol = ';')
18
+ if opts[name].kind_of?(Array)
19
+ opts[name] = opts[name].join(joinSymbol)
20
+ end
21
+ end
22
+
23
+ def self.matrix(waypoints, profile, options={})
24
+ formatted_waypoints = waypoints.map {|p| xy_from_hash(p).join ','}.join ';'
25
+ params = self.assemble_params(options)
26
+ return request(
27
+ :get,
28
+ "/directions-matrix/v1/mapbox/#{profile}/#{formatted_waypoints}.json#{params}",
29
+ nil)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,47 @@
1
+ module Mapbox
2
+ class Optimization
3
+ include Mapbox::APIOperations::Request
4
+ extend Mapbox::HashUtils
5
+
6
+ def self.assemble_params(options={})
7
+ annotations = options[:annotations]
8
+ approaches = options[:approaches]
9
+ distributions = options[:distributions]
10
+ radiuses = options[:radiuses]
11
+
12
+ params = ''
13
+ opts = options.select { |key, value| key != :annotations && key != :approaches && key != :distributions && key != :radiuses }
14
+ if opts.length > 0
15
+ params += "#{params.length > 0 ? '&' : '?'}#{URI.encode_www_form(opts)}"
16
+ end
17
+
18
+ if annotations then
19
+ params += "#{params.length > 0 ? '&' : '?'}annotations=#{annotations.join(',')}"
20
+ end
21
+
22
+ if approaches then
23
+ params += "#{params.length > 0 ? '&' : '?'}approaches=#{approaches.join(';')}"
24
+ end
25
+
26
+ if distributions then
27
+ params += "#{params.length > 0 ? '&' : '?'}distributions=#{distributions.join(';')}"
28
+ end
29
+
30
+ if radiuses then
31
+ params += "#{params.length > 0 ? '&' : '?'}radiuses=#{radiuses.join(';')}"
32
+ end
33
+
34
+ return params
35
+ end
36
+
37
+ def self.optimization(waypoints, profile, options={})
38
+ formatted_waypoints = waypoints.map {|p| xy_from_hash(p).join ','}.join ';'
39
+ params = self.assemble_params(options)
40
+
41
+ return request(
42
+ :get,
43
+ "/optimized-trips/v1/mapbox/#{profile}/#{formatted_waypoints}.json#{params}",
44
+ nil)
45
+ end
46
+ end
47
+ end
data/lib/mapbox.rb CHANGED
@@ -11,7 +11,7 @@ module Mapbox
11
11
  LONGITUDE_KEY = 'longitude'.freeze
12
12
 
13
13
  class << self
14
- attr_accessor :access_token, :api_base, :request_opts
14
+ attr_accessor :access_token, :api_base, :request_opts, :request_timeout, :request_open_timeout
15
15
  end
16
16
 
17
17
  def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)
@@ -33,7 +33,7 @@ module Mapbox
33
33
  case method.to_s.downcase.to_sym
34
34
  when :get, :head, :delete
35
35
  # Make params into GET parameters
36
- url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
36
+ url += "#{URI.parse(url).query ? '&' : '?'}#{URI.encode_www_form(params)}" if params && params.any?
37
37
  payload = nil
38
38
  end
39
39
 
@@ -42,10 +42,10 @@ module Mapbox
42
42
 
43
43
  @request_opts.update(
44
44
  :method => method,
45
- :open_timeout => 30,
45
+ :open_timeout => @request_open_timeout || 30,
46
46
  :payload => payload,
47
47
  :url => url,
48
- :timeout => 80)
48
+ :timeout => @request_timeout || 80)
49
49
 
50
50
  begin
51
51
  response = execute_request(@request_opts)
@@ -78,7 +78,7 @@ module Mapbox
78
78
  end
79
79
 
80
80
  def self.url_encode(key)
81
- URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
81
+ URI.encode_www_form_component(key.to_s)
82
82
  end
83
83
 
84
84
  def self.execute_request(opts)
@@ -181,4 +181,7 @@ end
181
181
  require 'mapbox/geocoder'
182
182
  require 'mapbox/directions'
183
183
  require 'mapbox/tilequery'
184
- require 'mapbox/isochrone'
184
+ require 'mapbox/isochrone'
185
+ require 'mapbox/matrix'
186
+ require 'mapbox/map_matching'
187
+ require 'mapbox/optimization'
data/mapbox-sdk.gemspec CHANGED
@@ -2,7 +2,7 @@ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
2
 
3
3
  spec = Gem::Specification.new do |s|
4
4
  s.name = 'mapbox-sdk'
5
- s.version = '2.2.0'
5
+ s.version = '2.3.3'
6
6
  s.summary = 'Ruby bindings for the Mapbox API'
7
7
  s.description = ''
8
8
  s.authors = ['Tom MacWright']
@@ -10,7 +10,7 @@ spec = Gem::Specification.new do |s|
10
10
  s.homepage = 'https://mapbox.com/developers'
11
11
  s.license = 'MIT'
12
12
 
13
- s.add_dependency('rest-client', '~> 2.0.1')
13
+ s.add_dependency('rest-client', '~> 2.1.0')
14
14
 
15
15
  s.add_development_dependency('mocha', '~> 0.13.2')
16
16
  s.add_development_dependency('shoulda', '~> 3.4.0')
@@ -5,49 +5,58 @@ require 'shoulda'
5
5
 
6
6
  module Mapbox
7
7
  class GeocodingTest < Test::Unit::TestCase
8
- should "#geocode_forward" do
8
+
9
+ def setup
9
10
  Mapbox.access_token = ENV["MapboxAccessToken"]
11
+ end
12
+
13
+ def teardown
14
+ Mapbox.request_open_timeout = nil
15
+ Mapbox.request_timeout = nil
16
+ end
17
+
18
+ should "#geocode_forward" do
10
19
  result = Mapbox::Geocoder.geocode_forward("Chester, NJ")
11
20
  assert result
12
21
  end
13
22
 
23
+ should "set_default_timeouts" do
24
+ result = Mapbox::Geocoder.geocode_forward("Chester, NJ")
25
+ assert Mapbox.request_opts[:timeout] = 80
26
+ assert Mapbox.request_opts[:open_timeout] = 30
27
+ end
28
+
14
29
  should "#geocode_forward (rounded proximity to 3 decimal places)" do
15
- Mapbox.access_token = ENV["MapboxAccessToken"]
16
30
  result = Mapbox::Geocoder.geocode_forward("Chester, NJ", {:proximity => {:longitude => 0.1234567, :latitude => -10.987654}})
17
31
  assert result
18
32
  assert Mapbox.request_opts[:url].include? '?proximity=0.123%2C-10.988&'
19
33
  end
20
34
 
21
35
  should "#geocode_forward (include bbox param)" do
22
- Mapbox.access_token = ENV["MapboxAccessToken"]
23
36
  result = Mapbox::Geocoder.geocode_forward("Washington", {:bbox => [-78.3284,38.6039,-78.0428,38.7841]})
24
37
  assert result
25
38
  assert Mapbox.request_opts[:url].include? '?bbox=-78.3284%2C38.6039%2C-78.0428%2C38.7841';
26
39
  end
27
40
 
28
41
  should "#geocode_forward (include extra param)" do
29
- Mapbox.access_token = ENV["MapboxAccessToken"]
30
42
  result = Mapbox::Geocoder.geocode_forward("Washington", {:bbox => [-78.3284,38.6039,-78.0428,38.7841], :foo_key => "foo_val", :bar_key => "bar_val"})
31
43
  assert result
32
44
  assert Mapbox.request_opts[:url].include? '?foo_key=foo_val&bar_key=bar_val';
33
45
  end
34
46
 
35
47
  should "#geocode_forward (include country param)" do
36
- Mapbox.access_token = ENV["MapboxAccessToken"]
37
48
  result = Mapbox::Geocoder.geocode_forward("Washington", {:country => "ca"})
38
49
  assert result
39
50
  assert Mapbox.request_opts[:url].include? '?country=ca';
40
51
  end
41
52
 
42
53
  should "#geocode_forward (include types param)" do
43
- Mapbox.access_token = ENV["MapboxAccessToken"]
44
54
  result = Mapbox::Geocoder.geocode_forward("Washington", {:types => ['poi.landmark', 'address'], :foo_key => "foo_val", :bar_key => "bar_val"})
45
55
  assert result
46
56
  assert Mapbox.request_opts[:url].include? '?foo_key=foo_val&bar_key=bar_val&types=poi.landmark%2Caddress';
47
57
  end
48
58
 
49
59
  should "#geocode_reverse" do
50
- Mapbox.access_token = ENV["MapboxAccessToken"]
51
60
  result = Mapbox::Geocoder.geocode_reverse({
52
61
  :latitude => 38,
53
62
  :longitude => -100
@@ -56,7 +65,6 @@ module Mapbox
56
65
  end
57
66
 
58
67
  should "#geocode_reverse (rounded coordinates to 5 decimal places)" do
59
- Mapbox.access_token = ENV["MapboxAccessToken"]
60
68
  result = Mapbox::Geocoder.geocode_reverse({
61
69
  :latitude => 1.23456789,
62
70
  :longitude => -99.8765432
@@ -66,5 +74,12 @@ module Mapbox
66
74
  end
67
75
  end
68
76
 
77
+ should "set_custom_timeouts" do
78
+ Mapbox.request_timeout = 10
79
+ Mapbox.request_open_timeout = 5
80
+ result = Mapbox::Geocoder.geocode_forward("Chester, NJ", {:proximity => {:longitude => 0.1234567, :latitude => -10.987654}})
81
+ assert Mapbox.request_opts[:timeout] == 10
82
+ assert Mapbox.request_opts[:open_timeout] == 5
83
+ end
69
84
  end
70
85
  end
@@ -0,0 +1,46 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class MapMatchingTest < Test::Unit::TestCase
8
+ should "#map match with just coordinates and profile" do
9
+ Mapbox.access_token = ENV["MapboxAccessToken"]
10
+ result = Mapbox::MapMatching.map_matching([{
11
+ "longitude" => -117.17282,
12
+ "latitude" => 32.71204
13
+ }, {
14
+ "longitude" => -117.17288,
15
+ "latitude" => 32.71225
16
+ }, {
17
+ "longitude" => -117.17293,
18
+ "latitude" => 32.71244
19
+ },{
20
+ "longitude" => -117.17292,
21
+ "latitude" => 32.71256
22
+ }], "driving")
23
+ assert result
24
+ end
25
+ should "#map match with optional params" do
26
+ Mapbox.access_token = ENV["MapboxAccessToken"]
27
+ result = Mapbox::MapMatching.map_matching([{
28
+ "longitude" => -117.17282,
29
+ "latitude" => 32.71204
30
+ }, {
31
+ "longitude" => -117.17288,
32
+ "latitude" => 32.71225
33
+ }, {
34
+ "longitude" => -117.17293,
35
+ "latitude" => 32.71244
36
+ }, {
37
+ "longitude" => -117.17292,
38
+ "latitude" => 32.71256
39
+ }], "driving", {
40
+ annotations: ["duration", "distance", "speed"],
41
+ approaches: ["curb","curb","curb","curb"]
42
+ })
43
+ assert result
44
+ end
45
+ end
46
+ end
data/test/mapbox_test.rb CHANGED
@@ -14,6 +14,14 @@ module Mapbox
14
14
  should "allow access token to be set" do
15
15
  Mapbox.access_token = "foo"
16
16
  end
17
+
18
+ should "allow request_timeout to be set" do
19
+ Mapbox.request_timeout = 5
20
+ end
21
+
22
+ should "allow request_open_timeout to be set" do
23
+ Mapbox.request_open_timeout = 5
24
+ end
17
25
  end
18
26
 
19
27
  class HashUtilTest < Test::Unit::TestCase
@@ -0,0 +1,40 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class MatrixTest < Test::Unit::TestCase
8
+ should "#matrix with just coordinates and profile" do
9
+ Mapbox.access_token = ENV["MapboxAccessToken"]
10
+ result = Mapbox::Matrix.matrix([{
11
+ "longitude" => -122.42,
12
+ "latitude" => 37.78
13
+ }, {
14
+ "longitude" => -122.45,
15
+ "latitude" => 37.91
16
+ }, {
17
+ "longitude" => -122.48,
18
+ "latitude" => 37.73
19
+ }], "driving")
20
+ assert result
21
+ end
22
+ should "#matrix with optional params" do
23
+ Mapbox.access_token = ENV["MapboxAccessToken"]
24
+ result = Mapbox::Matrix.matrix([{
25
+ "longitude" => -122.42,
26
+ "latitude" => 37.78
27
+ }, {
28
+ "longitude" => -122.45,
29
+ "latitude" => 37.91
30
+ }, {
31
+ "longitude" => -122.48,
32
+ "latitude" => 37.73
33
+ }], "cycling", {
34
+ annotations: ["duration", "distance"],
35
+ approaches: ["curb","curb","curb"]
36
+ })
37
+ assert result
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,56 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class MatrixTest < Test::Unit::TestCase
8
+ should "#optimization with just coordinates and profile" do
9
+ Mapbox.access_token = ENV["MapboxAccessToken"]
10
+ result = Mapbox::Optimization.optimization([{
11
+ "longitude" => -122.42,
12
+ "latitude" => 37.78
13
+ }, {
14
+ "longitude" => -122.45,
15
+ "latitude" => 37.91
16
+ }, {
17
+ "longitude" => -122.48,
18
+ "latitude" => 37.73
19
+ }], "walking")
20
+ assert result
21
+ end
22
+ should "#optimization with optional params" do
23
+ Mapbox.access_token = ENV["MapboxAccessToken"]
24
+ result = Mapbox::Optimization.optimization([{
25
+ "longitude" => -122.42,
26
+ "latitude" => 37.78
27
+ }, {
28
+ "longitude" => -122.45,
29
+ "latitude" => 37.91
30
+ }, {
31
+ "longitude" => -122.48,
32
+ "latitude" => 37.73
33
+ }], "cycling", {
34
+ annotations: ["duration", "distance"],
35
+ approaches: ["curb","curb","curb"]
36
+ })
37
+ assert result
38
+ end
39
+ should "#optimization with an empty bearing" do
40
+ Mapbox.access_token = ENV["MapboxAccessToken"]
41
+ result = Mapbox::Optimization.optimization([{
42
+ "longitude" => -122.42,
43
+ "latitude" => 37.78
44
+ }, {
45
+ "longitude" => -122.45,
46
+ "latitude" => 37.91
47
+ }, {
48
+ "longitude" => -122.48,
49
+ "latitude" => 37.73
50
+ }], "driving", {
51
+ bearings: "45,90;;90,1"
52
+ })
53
+ assert result
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mapbox-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom MacWright
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-14 00:00:00.000000000 Z
11
+ date: 2021-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.1
19
+ version: 2.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.1
26
+ version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mocha
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -97,6 +97,9 @@ files:
97
97
  - docs/directions.md
98
98
  - docs/geocoding.md
99
99
  - docs/isochrone.md
100
+ - docs/mapmatching.md
101
+ - docs/matrix.md
102
+ - docs/optimization.md
100
103
  - docs/tilequery.md
101
104
  - lib/mapbox-sdk.rb
102
105
  - lib/mapbox.rb
@@ -105,13 +108,19 @@ files:
105
108
  - lib/mapbox/directions.rb
106
109
  - lib/mapbox/geocoder.rb
107
110
  - lib/mapbox/isochrone.rb
111
+ - lib/mapbox/map_matching.rb
112
+ - lib/mapbox/matrix.rb
113
+ - lib/mapbox/optimization.rb
108
114
  - lib/mapbox/tilequery.rb
109
115
  - mapbox-sdk.gemspec
110
116
  - test/all_tests.rb
111
117
  - test/directions_test.rb
112
118
  - test/geocoding_test.rb
113
119
  - test/isochrone_test.rb
120
+ - test/map_matching_test.rb
114
121
  - test/mapbox_test.rb
122
+ - test/matrix_test.rb
123
+ - test/optimization_test.rb
115
124
  - test/tilequery_test.rb
116
125
  homepage: https://mapbox.com/developers
117
126
  licenses:
@@ -132,8 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
141
  - !ruby/object:Gem::Version
133
142
  version: '0'
134
143
  requirements: []
135
- rubyforge_project:
136
- rubygems_version: 2.7.8
144
+ rubygems_version: 3.2.25
137
145
  signing_key:
138
146
  specification_version: 4
139
147
  summary: Ruby bindings for the Mapbox API
@@ -142,5 +150,8 @@ test_files:
142
150
  - test/directions_test.rb
143
151
  - test/geocoding_test.rb
144
152
  - test/isochrone_test.rb
153
+ - test/map_matching_test.rb
145
154
  - test/mapbox_test.rb
155
+ - test/matrix_test.rb
156
+ - test/optimization_test.rb
146
157
  - test/tilequery_test.rb