mapbox-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5ada80d6e1cbf4bce52c8963bdcd9eb0d6c7ad93
4
+ data.tar.gz: 4c58511165153eca7a4bb787ae979f75ebf277d7
5
+ SHA512:
6
+ metadata.gz: 0f8ddaff0bb1a510dba43c5b7b4a5ff9b13d230b390a9d734df095279cffbefa61d86ef04c220e53973241419dc9daafdd4fd7d47bf1bfa23b016e22ea7783d1
7
+ data.tar.gz: 6c92af8cd540921a908634beba3cbb784e4bb2205d71889a758ee31992359f3c21e099b56b0434f814d84b20bc4ae5bc56994cf557c5dcc082a194652f94500a
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('1.9.3')
5
+ gem 'i18n', '< 0.7'
6
+ gem 'rest-client', '~> 1.6.8'
7
+ gem 'activesupport', '~> 3.2'
8
+ gem 'rake', '10.1.0'
9
+ end
@@ -0,0 +1,64 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mapbox (1.0.0)
5
+ json (~> 1.8.1)
6
+ rest-client (~> 1.4)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (4.2.3)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
17
+ bourne (1.5.0)
18
+ mocha (>= 0.13.2, < 0.15)
19
+ domain_name (0.5.24)
20
+ unf (>= 0.0.5, < 1.0.0)
21
+ http-cookie (1.0.2)
22
+ domain_name (~> 0.5)
23
+ i18n (0.7.0)
24
+ json (1.8.3)
25
+ metaclass (0.0.4)
26
+ mime-types (2.6.1)
27
+ minitest (5.7.0)
28
+ mocha (0.13.3)
29
+ metaclass (~> 0.0.1)
30
+ netrc (0.10.3)
31
+ power_assert (0.2.4)
32
+ rake (10.4.2)
33
+ rest-client (1.8.0)
34
+ http-cookie (>= 1.0.2, < 2.0)
35
+ mime-types (>= 1.16, < 3.0)
36
+ netrc (~> 0.7)
37
+ shoulda (3.4.0)
38
+ shoulda-context (~> 1.0, >= 1.0.1)
39
+ shoulda-matchers (~> 1.0, >= 1.4.1)
40
+ shoulda-context (1.2.1)
41
+ shoulda-matchers (1.5.6)
42
+ activesupport (>= 3.0.0)
43
+ bourne (~> 1.3)
44
+ test-unit (3.1.2)
45
+ power_assert
46
+ thread_safe (0.3.5)
47
+ tzinfo (1.2.2)
48
+ thread_safe (~> 0.1)
49
+ unf (0.1.4)
50
+ unf_ext
51
+ unf_ext (0.0.7.1)
52
+
53
+ PLATFORMS
54
+ ruby
55
+
56
+ DEPENDENCIES
57
+ mapbox!
58
+ mocha (~> 0.13.2)
59
+ rake
60
+ shoulda (~> 3.4.0)
61
+ test-unit
62
+
63
+ BUNDLED WITH
64
+ 1.10.6
data/LICENSE ADDED
@@ -0,0 +1,37 @@
1
+ Copyright (c) 2015, Mapbox
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ ---
16
+
17
+ The MIT License
18
+
19
+ Copyright (c) 2011- Stripe, Inc. (https://stripe.com)
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining a copy
22
+ of this software and associated documentation files (the "Software"), to deal
23
+ in the Software without restriction, including without limitation the rights
24
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25
+ copies of the Software, and to permit persons to whom the Software is
26
+ furnished to do so, subject to the following conditions:
27
+
28
+ The above copyright notice and this permission notice shall be included in
29
+ all copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37
+ THE SOFTWARE.
@@ -0,0 +1,38 @@
1
+ # mapbox-sdk-ruby
2
+
3
+ The `mapbox-sdk` gem. A ruby interface to [Mapbox APIs](https://www.mapbox.com/developers/api/).
4
+
5
+ ## Services
6
+
7
+ * [Geocoding](https://www.mapbox.com/developers/api/geocoding/)
8
+ * Forward (place names ⇢ longitude, latitude)
9
+ * Reverse (longitude, latitude ⇢ place names)
10
+ * [Directions](https://www.mapbox.com/developers/api/directions/)
11
+ * Profiles for driving, walking, and cycling
12
+
13
+ ## Example
14
+
15
+ ```rb
16
+ require "mapbox-sdk"
17
+ Mapbox.access_token = "YOUR_ACCESS_TOKEN"
18
+
19
+ # Reverse geocoding
20
+ placenames = Mapbox::Geocoder.geocode_reverse({
21
+ "latitude" => 38,
22
+ "longitude" => -100
23
+ })
24
+
25
+ # Forward geocoding
26
+ places = Mapbox::Geocoder.geocode_forward("Chester, NJ")
27
+
28
+ # Directions
29
+ drivingDirections = Mapbox::Directions.directions([{
30
+ "longitude" => -100,
31
+ "latitude" => 38
32
+ }, {
33
+ "longitude" => -90,
34
+ "latitude" => 38
35
+ }])
36
+ ```
37
+
38
+ Heavily influenced by Stripe's Ruby client, and includes its MIT license.
@@ -0,0 +1,7 @@
1
+ require 'rake/testtask'
2
+
3
+ task :default => [:test]
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = './test/**/*_test.rb'
7
+ end
@@ -0,0 +1,171 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+ require 'mapbox/api_operations'
4
+ require 'mapbox/authentication_error'
5
+
6
+ # services
7
+ require 'mapbox/geocoder'
8
+ require 'mapbox/directions'
9
+
10
+ module Mapbox
11
+ @api_base = 'https://api.mapbox.com'
12
+
13
+ class << self
14
+ attr_accessor :access_token, :api_base
15
+ end
16
+
17
+ def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)
18
+ api_base_url = api_base_url || @api_base
19
+ params = params || {}
20
+
21
+ unless access_token ||= @access_token
22
+ raise AuthenticationError.new('No API key provided. ' \
23
+ 'Set your API key using "Mapbox.access_token = <access_token>". ' \
24
+ 'You can generate API keys from the Mapbox web interface. ' \
25
+ 'See https://mapbox.com/developers for details, or email help@mapbox.com ' \
26
+ 'if you have any questions.')
27
+ end
28
+
29
+ url = api_base_url + url
30
+
31
+ params['access_token'] = access_token
32
+
33
+ case method.to_s.downcase.to_sym
34
+ when :get, :head, :delete
35
+ # Make params into GET parameters
36
+ url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
37
+ payload = nil
38
+ end
39
+
40
+ request_opts = {:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
41
+ :ssl_ca_file => @ssl_bundle_path}
42
+
43
+ request_opts.update(
44
+ :method => method,
45
+ :open_timeout => 30,
46
+ :payload => payload,
47
+ :url => url,
48
+ :timeout => 80)
49
+
50
+ begin
51
+ response = execute_request(request_opts)
52
+ rescue SocketError => e
53
+ handle_restclient_error(e, api_base_url)
54
+ rescue NoMethodError => e
55
+ # Work around RestClient bug
56
+ if e.message =~ /\WRequestFailed\W/
57
+ e = StandardError.new('Unexpected HTTP response code')
58
+ handle_restclient_error(e, api_base_url)
59
+ else
60
+ raise
61
+ end
62
+ rescue RestClient::ExceptionWithResponse => e
63
+ if e.response
64
+ handle_api_error(e, e.response)
65
+ else
66
+ handle_restclient_error(e, api_base_url)
67
+ end
68
+ rescue RestClient::Exception, Errno::ECONNREFUSED => e
69
+ handle_restclient_error(e, api_base_url)
70
+ end
71
+
72
+ [parse(response), api_key]
73
+ end
74
+
75
+ def self.uri_encode(params)
76
+ params.
77
+ map { |k,v| "#{k}=#{url_encode(v)}" }.join('&')
78
+ end
79
+
80
+ def self.url_encode(key)
81
+ URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
82
+ end
83
+
84
+ def self.execute_request(opts)
85
+ RestClient::Request.execute(opts)
86
+ end
87
+
88
+ def self.parse(response)
89
+ begin
90
+ # Would use :symbolize_names => true, but apparently there is
91
+ # some library out there that makes symbolize_names not work.
92
+ response = JSON.parse(response.body)
93
+ rescue JSON::ParserError
94
+ raise general_api_error(response.code, response.body)
95
+ end
96
+
97
+ response
98
+ end
99
+
100
+ def self.general_api_error(rcode, rbody)
101
+ StandardError.new("Invalid response object from API: #{rbody.inspect} " +
102
+ "(HTTP response code was #{rcode})")
103
+ end
104
+
105
+ def self.handle_api_error(rcode, rbody)
106
+ begin
107
+ error_obj = JSON.parse(rbody)
108
+ error = error_obj[:error] or raise StandardError.new # escape from parsing
109
+
110
+ rescue JSON::ParserError, StandardError
111
+ raise general_api_error(rcode, rbody)
112
+ end
113
+
114
+ case rcode
115
+ when 400, 404
116
+ raise invalid_request_error error, rcode, rbody, error_obj
117
+ when 401
118
+ raise authentication_error error, rcode, rbody, error_obj
119
+ else
120
+ raise api_error error, rcode, rbody, error_obj
121
+ end
122
+
123
+ end
124
+
125
+ def self.invalid_request_error(error, rcode, rbody, error_obj)
126
+ StandardError.new(error[:message], error[:param], rcode,
127
+ rbody, error_obj)
128
+ end
129
+
130
+ def self.authentication_error(error, rcode, rbody, error_obj)
131
+ AuthenticationError.new(error[:message], rcode, rbody, error_obj)
132
+ end
133
+
134
+ def self.api_error(error, rcode, rbody, error_obj)
135
+ StandardError.new(error[:message], rcode, rbody, error_obj)
136
+ end
137
+
138
+ def self.handle_restclient_error(e, api_base_url=nil)
139
+ api_base_url = @api_base unless api_base_url
140
+ connection_message = "Please check your internet connection and try again. " \
141
+ "If this problem persists, you should check Mapbox's service status at " \
142
+ "https://status.mapbox.com/, or let us know at help@mapbox.com."
143
+
144
+ case e
145
+ when RestClient::RequestTimeout
146
+ message = "Could not connect to Mapbox (#{api_base_url}). #{connection_message}"
147
+
148
+ when RestClient::ServerBrokeConnection
149
+ message = "The connection to the server (#{api_base_url}) broke before the " \
150
+ "request completed. #{connection_message}"
151
+
152
+ when RestClient::SSLCertificateNotVerified
153
+ message = "Could not verify Mapbox's SSL certificate. " \
154
+ "Please make sure that your network is not intercepting certificates. " \
155
+ "(Try going to https://api.mapbox.com/ in your browser.) " \
156
+ "If this problem persists, let us know at help@mapbox.com."
157
+
158
+ when SocketError
159
+ message = "Unexpected error communicating when trying to connect to Mapbox. " \
160
+ "You may be seeing this message because your DNS is not working. " \
161
+ "To check, try running 'host mapbox.com' from the command line."
162
+
163
+ else
164
+ message = "Unexpected error communicating with Mapbox. " \
165
+ "If this problem persists, let us know at help@mapbox.com."
166
+
167
+ end
168
+
169
+ raise StandardError.new(message + "\n\n(Network error: #{e.message})")
170
+ end
171
+ end
@@ -0,0 +1,39 @@
1
+ module Mapbox
2
+ module APIOperations
3
+ module Request
4
+ module ClassMethods
5
+ OPTS_KEYS_TO_PERSIST = Set[:access_token, :api_base]
6
+
7
+ def request(method, url, params={}, opts={})
8
+ headers = opts.clone
9
+ access_token = headers.delete(:access_token)
10
+ api_base = headers.delete(:api_base)
11
+ # Assume all remaining opts must be headers
12
+
13
+ response, opts[:api_key] = Mapbox.request(method, url, access_token, params, headers, api_base)
14
+
15
+ # Hash#select returns an array before 1.9
16
+ opts_to_persist = {}
17
+ opts.each do |k, v|
18
+ if OPTS_KEYS_TO_PERSIST.include?(k)
19
+ opts_to_persist[k] = v
20
+ end
21
+ end
22
+
23
+ [response, opts_to_persist]
24
+ end
25
+ end
26
+
27
+ def self.included(base)
28
+ base.extend(ClassMethods)
29
+ end
30
+
31
+ protected
32
+
33
+ def request(method, url, params={}, opts={})
34
+ opts = @opts.merge(opts)
35
+ self.class.request(method, url, params, opts)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ module Mapbox
2
+ class MapboxError < StandardError
3
+ end
4
+
5
+ class AuthenticationError < MapboxError
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ module Mapbox
5
+ class Directions
6
+ include Mapbox::APIOperations::Request
7
+ def self.directions(waypoints, profile='mapbox.driving')
8
+ formatted_waypoints = waypoints.map { |point|
9
+ "#{point['longitude']},#{point['latitude']}"
10
+ }.join(';')
11
+ return request(
12
+ :get,
13
+ "/v4/directions/#{profile}/#{formatted_waypoints}.json",
14
+ nil)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ module Mapbox
5
+ class Geocoder
6
+ include Mapbox::APIOperations::Request
7
+ def self.geocode_forward(query, proximity=nil, dataset='mapbox.places')
8
+ return request(
9
+ :get,
10
+ "/v4/geocode/#{dataset}/#{URI.escape(query)}.json",
11
+ nil)
12
+ end
13
+
14
+ def self.geocode_reverse(location, dataset='mapbox.places')
15
+ return request(
16
+ :get,
17
+ "/v4/geocode/#{dataset}/#{location["longitude"]},#{location["latitude"]}.json",
18
+ nil)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ spec = Gem::Specification.new do |s|
4
+ s.name = 'mapbox-sdk'
5
+ s.version = '1.0.0'
6
+ s.summary = 'Ruby bindings for the Mapbox API'
7
+ s.description = ''
8
+ s.authors = ['Tom MacWright']
9
+ s.email = ['tom@mapbox.org']
10
+ s.homepage = 'https://mapbox.com/developers'
11
+ s.license = 'MIT'
12
+
13
+ s.add_dependency('rest-client', '~> 1.4')
14
+ s.add_dependency('json', '~> 1.8.1')
15
+
16
+ s.add_development_dependency('mocha', '~> 0.13.2')
17
+ s.add_development_dependency('shoulda', '~> 3.4.0')
18
+ s.add_development_dependency('test-unit')
19
+ s.add_development_dependency('rake')
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- test/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ['lib']
25
+ end
@@ -0,0 +1,23 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class DirectionsTest < Test::Unit::TestCase
8
+ should "#directions" do
9
+ Mapbox.access_token = ENV["MapboxAccessToken"]
10
+ result = Mapbox::Directions.directions([
11
+ {
12
+ "longitude" => -100,
13
+ "latitude" => 38
14
+ },
15
+ {
16
+ "longitude" => -90,
17
+ "latitude" => 38
18
+ }
19
+ ])
20
+ assert result
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class GeocodingTest < Test::Unit::TestCase
8
+ should "#geocode_forward" do
9
+ Mapbox.access_token = ENV["MapboxAccessToken"]
10
+ result = Mapbox::Geocoder.geocode_forward("Chester, NJ")
11
+ assert result
12
+ end
13
+
14
+ should "#geocode_reverse" do
15
+ Mapbox.access_token = ENV["MapboxAccessToken"]
16
+ result = Mapbox::Geocoder.geocode_reverse({
17
+ "latitude" => 38,
18
+ "longitude" => -100
19
+ })
20
+ assert result
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ require 'mapbox'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'shoulda'
5
+
6
+ module Mapbox
7
+ class ModuleTest < Test::Unit::TestCase
8
+ should "throw if access_token is not defined" do
9
+ assert_raise {
10
+ Mapbox.request()
11
+ }
12
+ end
13
+
14
+ should "allow access token to be set" do
15
+ Mapbox.access_token = "foo"
16
+ end
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mapbox-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tom MacWright
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.13.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.13.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: shoulda
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.4.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 3.4.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: ''
98
+ email:
99
+ - tom@mapbox.org
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - Gemfile
105
+ - Gemfile.lock
106
+ - LICENSE
107
+ - README.md
108
+ - Rakefile
109
+ - lib/mapbox.rb
110
+ - lib/mapbox/api_operations.rb
111
+ - lib/mapbox/authentication_error.rb
112
+ - lib/mapbox/directions.rb
113
+ - lib/mapbox/geocoder.rb
114
+ - mapbox-sdk.gemspec
115
+ - test/directions_test.rb
116
+ - test/geocoding_test.rb
117
+ - test/mapbox_test.rb
118
+ homepage: https://mapbox.com/developers
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.0.14
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Ruby bindings for the Mapbox API
142
+ test_files:
143
+ - test/directions_test.rb
144
+ - test/geocoding_test.rb
145
+ - test/mapbox_test.rb