google_maps_service 0.4.0 → 0.4.1

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.
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