google_maps_service 0.4.0 → 0.4.1

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
  SHA1:
3
- metadata.gz: fb00f53441211719da0e59680a1186a109615495
4
- data.tar.gz: 6075646a6a52b3cd64abce441479b1f80e967cbc
3
+ metadata.gz: 49c25953305b497d054ac7ae74894e1dbb904d1f
4
+ data.tar.gz: 749c75ddf3ca5b13fac1c5eb24cc403661edfc04
5
5
  SHA512:
6
- metadata.gz: a0007fe257d673c7011097aefc8436664e3a450c7cb9a26d772b5ef72b6818ac52342614572fcf014f5f433ee0ef6ee17a7c2fed98b307d685d3b1807ca8662e
7
- data.tar.gz: 24a6947fc3683cd5e58886376bc293a3c3c395952cb021435e001b2c2c4dab3131cace9191c99b999a353fd391667e92cda0b053b4b2dd06d73125a38790acda
6
+ metadata.gz: 38e4aa2429aecaeca3852c527cb256f10160a46984b449752846a8f1f3da3ef6fae1ec5eb2f4b0c816506ae00d7ed270570b7b6986e82d25447e21c3b88e87ec
7
+ data.tar.gz: 3f667efd574b1e5a200dfdc0f2a58b5976e46ae808d75cd34bc3daf5686ce9220f639ca464888255ef4f265ec53502019745b18148ecf26352252f3d722b939e
data/.travis.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - ruby-head
3
4
  - 2.2
4
5
  - 2.1
5
- - 2.0.0
6
+ - 2.0.0
7
+ - jruby-head
8
+ - jruby-9000
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1
4
+
5
+ * Support JRuby 9.0.0.0
6
+ * Refactoring and more test coverage
7
+
3
8
  ## 0.4.0
4
9
 
5
10
  * Use required positional and optional named parameters (_breaking changes_)
data/Gemfile CHANGED
@@ -2,3 +2,23 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in google_maps_service.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'bundler', '~> 1.6'
8
+ gem 'rake', '~> 10.0'
9
+ gem 'rspec', '~> 3.3'
10
+ gem 'simplecov', '~> 0.10'
11
+ gem 'coveralls', '~> 0.8.2'
12
+ gem 'webmock', '~> 1.21'
13
+ end
14
+
15
+ platforms :ruby do
16
+ group :development do
17
+ gem 'yard', '~> 0.8'
18
+ gem 'redcarpet', '~> 3.2'
19
+ end
20
+ end
21
+
22
+ if ENV['RAILS_VERSION']
23
+ gem 'rails', ENV['RAILS_VERSION']
24
+ end
data/Rakefile CHANGED
@@ -1,12 +1,15 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- require "yard"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
4
3
 
5
4
  RSpec::Core::RakeTask.new
6
5
 
7
6
  task :default => :spec
8
7
  task :test => :spec
9
8
 
10
- YARD::Rake::YardocTask.new do |t|
11
- t.files = ['lib/**/*.rb']
9
+ unless defined?(JRUBY_VERSION)
10
+ require 'yard'
11
+
12
+ YARD::Rake::YardocTask.new do |t|
13
+ t.files = ['lib/**/*.rb']
14
+ end
12
15
  end
@@ -20,13 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency 'multi_json', '~> 1.11'
22
22
  spec.add_runtime_dependency 'hurley', '~> 0.1'
23
- spec.add_runtime_dependency 'retriable', '~> 2.0', '>= 2.0.2'
24
- spec.add_development_dependency 'bundler', '~> 1.7'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'yard', '~> 0.8.7.6'
27
- spec.add_development_dependency 'redcarpet', '~> 3.3'
28
- spec.add_development_dependency 'rspec', '~> 3.3'
29
- spec.add_development_dependency 'simplecov', '~> 0.10.0'
30
- spec.add_development_dependency 'coveralls', '~> 0.8.2'
31
- spec.add_development_dependency 'webmock', '~> 1.21', '>= 1.21.0'
23
+ spec.add_runtime_dependency 'retriable', '~> 2.0'
32
24
  end
@@ -42,6 +42,8 @@ module GoogleMapsService
42
42
  # @return [Object]
43
43
  attr_accessor :connection
44
44
 
45
+ # Configure global parameters.
46
+ # @yield [config]
45
47
  def configure
46
48
  yield self
47
49
  true
@@ -126,7 +126,7 @@ module GoogleMapsService::Apis
126
126
 
127
127
  # Check response body for error status.
128
128
  #
129
- # @param [Hurley::Response] body Response object.
129
+ # @param [Hurley::Response] response Response object.
130
130
  # @param [Hash] body Response body.
131
131
  def check_roads_body_error(response, body)
132
132
  error = body[:error]
@@ -94,8 +94,6 @@ module GoogleMapsService
94
94
  # connection: Hurley::HttpCache.new(HurleyExcon::Connection.new)
95
95
  # )
96
96
  #
97
- #
98
- #
99
97
  # @option options [String] :key Secret key for accessing Google Maps Web Service.
100
98
  # Can be obtained at https://developers.google.com/maps/documentation/geocoding/get-api-key#key.
101
99
  # @option options [String] :client_id Client id for using Maps API for Work services.
@@ -111,17 +109,13 @@ module GoogleMapsService
111
109
  # By default, the default Hurley's HTTP client connection (Net::Http) will be used.
112
110
  # See https://github.com/lostisland/hurley/blob/master/README.md#connections.
113
111
  def initialize(**options)
114
- @key = options[:key] || GoogleMapsService.key
115
- @client_id = options[:client_id] || GoogleMapsService.client_id
116
- @client_secret = options[:client_secret] || GoogleMapsService.client_secret
117
- @retry_timeout = options[:retry_timeout] || GoogleMapsService.retry_timeout || 60
118
- @queries_per_second = options[:queries_per_second] || GoogleMapsService.queries_per_second
119
- @request_options = options[:request_options] || GoogleMapsService.request_options
120
- @ssl_options = options[:ssl_options] || GoogleMapsService.ssl_options
121
- @connection = options[:connection] || GoogleMapsService.connection
122
-
123
- #
124
- initialize_qps if @queries_per_second
112
+ [:key, :client_id, :client_secret,
113
+ :retry_timeout, :queries_per_second,
114
+ :request_options, :ssl_options, :connection].each do |key|
115
+ self.instance_variable_set("@#{key}".to_sym, options[key] || GoogleMapsService.instance_variable_get("@#{key}"))
116
+ end
117
+
118
+ initialize_query_tickets
125
119
  end
126
120
 
127
121
  # Get the current HTTP client.
@@ -133,10 +127,12 @@ module GoogleMapsService
133
127
  protected
134
128
 
135
129
  # Initialize QPS queue. QPS queue is a "tickets" for calling API
136
- def initialize_qps
137
- @qps_queue = SizedQueue.new @queries_per_second
138
- @queries_per_second.times do
139
- @qps_queue << 0
130
+ def initialize_query_tickets
131
+ if @queries_per_second
132
+ @qps_queue = SizedQueue.new @queries_per_second
133
+ @queries_per_second.times do
134
+ @qps_queue << 0
135
+ end
140
136
  end
141
137
  end
142
138
 
@@ -144,13 +140,14 @@ module GoogleMapsService
144
140
  # @return [Hurley::Client]
145
141
  def new_client
146
142
  client = Hurley::Client.new
143
+ client.request_options.query_class = Hurley::Query::Flat
144
+ client.request_options.redirection_limit = 0
145
+ client.header[:user_agent] = user_agent
147
146
 
148
147
  client.connection = @connection if @connection
149
148
  @request_options.each_pair {|key, value| client.request_options[key] = value } if @request_options
150
149
  @ssl_options.each_pair {|key, value| client.ssl_options[key] = value } if @ssl_options
151
150
 
152
- client.request_options.query_class = Hurley::Query::Flat
153
- client.header[:user_agent] = user_agent
154
151
  client
155
152
  end
156
153
 
@@ -175,18 +172,11 @@ module GoogleMapsService
175
172
  url = base_url + generate_auth_url(path, params, accepts_client_id)
176
173
 
177
174
  Retriable.retriable timeout: @retry_timeout, on: RETRIABLE_ERRORS do |try|
178
- # Get/wait the request "ticket" if QPS is configured
179
- # Check for previous request time, it must be more than a second ago before calling new request
180
- if @qps_queue
181
- elapsed_since_earliest = Time.now - @qps_queue.pop
182
- sleep(1 - elapsed_since_earliest) if elapsed_since_earliest.to_f < 1
183
- end
184
-
185
175
  begin
176
+ request_query_ticket
186
177
  response = client.get url
187
178
  ensure
188
- # Release request "ticket"
189
- @qps_queue << Time.now if @qps_queue
179
+ release_query_ticket
190
180
  end
191
181
 
192
182
  return custom_response_decoder.call(response) if custom_response_decoder
@@ -194,11 +184,30 @@ module GoogleMapsService
194
184
  end
195
185
  end
196
186
 
187
+ # Get/wait the request "ticket" if QPS is configured.
188
+ # Check for previous request time, it must be more than a second ago before calling new request.
189
+ #
190
+ # @return [void]
191
+ def request_query_ticket
192
+ if @qps_queue
193
+ elapsed_since_earliest = Time.now - @qps_queue.pop
194
+ sleep(1 - elapsed_since_earliest) if elapsed_since_earliest.to_f < 1
195
+ end
196
+ end
197
+
198
+ # Release request "ticket".
199
+ #
200
+ # @return [void]
201
+ def release_query_ticket
202
+ @qps_queue << Time.now if @qps_queue
203
+ end
204
+
197
205
  # Returns the path and query string portion of the request URL,
198
206
  # first adding any necessary parameters.
199
207
  #
200
208
  # @param [String] path The path portion of the URL.
201
209
  # @param [Hash] params URL parameters.
210
+ # @param [Boolean] accepts_client_id Sign the request using API {#keys} instead of {#client_id}.
202
211
  #
203
212
  # @return [String]
204
213
  def generate_auth_url(path, params, accepts_client_id)
@@ -253,15 +262,15 @@ module GoogleMapsService
253
262
  raise GoogleMapsService::Error::ClientError.new(response), 'Invalid request'
254
263
  when 500..600
255
264
  raise GoogleMapsService::Error::ServerError.new(response), 'Server error'
256
- else
257
- raise ArgumentError, 'Invalid response status code'
258
265
  end
259
266
  end
260
267
 
261
268
  # Check response body for error status.
262
269
  #
263
- # @param [Hurley::Response] body Response object.
270
+ # @param [Hurley::Response] response Response object.
264
271
  # @param [Hash] body Response body.
272
+ #
273
+ # @return [void]
265
274
  def check_body_error(response, body)
266
275
  case body[:status]
267
276
  when 'OK', 'ZERO_RESULTS'
@@ -7,6 +7,9 @@ module GoogleMapsService
7
7
  # @return [Hurley::Response]
8
8
  attr_reader :response
9
9
 
10
+ # Initialize error
11
+ #
12
+ # @param [Hurley::Response] response HTTP response.
10
13
  def initialize(response = nil)
11
14
  @response = response
12
15
  end
@@ -1,6 +1,6 @@
1
1
  module GoogleMapsService
2
2
  # GoogleMapsService gem version
3
- VERSION = '0.4.0'
3
+ VERSION = '0.4.1'
4
4
 
5
5
  # Current operating system
6
6
  # @private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_maps_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edward Samuel Pasaribu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-22 00:00:00.000000000 Z
11
+ date: 2015-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -45,9 +45,6 @@ dependencies:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.0'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 2.0.2
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -55,127 +52,6 @@ dependencies:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
54
  version: '2.0'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 2.0.2
61
- - !ruby/object:Gem::Dependency
62
- name: bundler
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1.7'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1.7'
75
- - !ruby/object:Gem::Dependency
76
- name: rake
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '10.0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '10.0'
89
- - !ruby/object:Gem::Dependency
90
- name: yard
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: 0.8.7.6
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: 0.8.7.6
103
- - !ruby/object:Gem::Dependency
104
- name: redcarpet
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '3.3'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '3.3'
117
- - !ruby/object:Gem::Dependency
118
- name: rspec
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '3.3'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '3.3'
131
- - !ruby/object:Gem::Dependency
132
- name: simplecov
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: 0.10.0
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: 0.10.0
145
- - !ruby/object:Gem::Dependency
146
- name: coveralls
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: 0.8.2
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: 0.8.2
159
- - !ruby/object:Gem::Dependency
160
- name: webmock
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '1.21'
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- version: 1.21.0
169
- type: :development
170
- prerelease: false
171
- version_requirements: !ruby/object:Gem::Requirement
172
- requirements:
173
- - - "~>"
174
- - !ruby/object:Gem::Version
175
- version: '1.21'
176
- - - ">="
177
- - !ruby/object:Gem::Version
178
- version: 1.21.0
179
55
  description:
180
56
  email:
181
57
  - edwardsamuel92@gmail.com