gmaps_geocoding 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e0eb2ba63ab2f125d3002741bcb198fe93d5f880
4
+ data.tar.gz: df00924a0a27c88b2976db2f03d09611aa8b6190
5
+ SHA512:
6
+ metadata.gz: 79a5ff100b66ecb148e30babe4a8003e09746603a225ffcdb0b0bae4481e23171d76f7e3336503922ccf69e26d041df618b387f4f76ba27e3686dcf57a13e1d2
7
+ data.tar.gz: 1bcb5295f1e08aac1a9778b998cddadb1f2c3c4cc191e92ba28848b06f3267cb41c86105a371307cc215544bbc3add7ec99740620edb589f00ca62b94d9b90b3
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-1.9.3-p392@gmaps_geocoding
1
+ ruby-2.0.0@gmaps_geocoding
data/.versions.conf CHANGED
@@ -1,4 +1,4 @@
1
- ruby=ruby-1.9.3-p392
1
+ ruby=ruby-2.0.0
2
2
  ruby-gemset=gmaps_geocoding
3
3
  #ruby-gem-install=bundler rake
4
4
  #ruby-bundle-install=true
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --main README.md
2
+ --no-private
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in gmaps_geocoding.gemspec
4
4
  gemspec
5
+
6
+ gem 'simplecov', :require => false, :group => :test
data/README.md CHANGED
@@ -11,11 +11,11 @@ Add this line to your application's Gemfile:
11
11
 
12
12
  And then execute:
13
13
 
14
- $ bundle
14
+ bundle
15
15
 
16
16
  Or install it yourself as:
17
17
 
18
- $ gem install gmaps_geocoding
18
+ gem install gmaps_geocoding
19
19
 
20
20
  ## Usage
21
21
  ### Global information
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'bundler/gem_tasks'
3
3
  require 'rake/testtask'
4
+ require 'yard'
4
5
 
5
6
  lib = File.expand_path('../lib/', __FILE__)
6
7
  $:.unshift lib unless $:.include?(lib)
@@ -24,8 +25,14 @@ end
24
25
 
25
26
  Rake::TestTask.new do |t|
26
27
  t.libs << 'lib/gmaps_geocoding'
27
- t.test_files = FileList['test/*_test.rb']
28
+ t.test_files = FileList['test/**/*_test.rb']
28
29
  t.verbose = true
29
30
  end
30
31
 
32
+ desc 'Generate documentation'
33
+ YARD::Rake::YardocTask.new do |t|
34
+ t.files = ['lib/**/*.rb', '-', 'LICENSE.txt']
35
+ t.options = ['--main', 'README.md', '--no-private']
36
+ end
37
+
31
38
  task default: :test
@@ -23,8 +23,9 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_runtime_dependency 'rest-client', '~> 1.6.7'
25
25
  s.add_runtime_dependency 'yajl-ruby', '~> 1.1.0'
26
- s.add_runtime_dependency 'nori', '~> 2.0.4'
27
- s.add_runtime_dependency 'nokogiri', '>= 1.4.0'
28
- s.add_development_dependency 'bundler', '~> 1.3'
26
+ s.add_runtime_dependency 'nori', '~> 2.2.0'
27
+ s.add_runtime_dependency 'nokogiri', '~> 1.6.0'
28
+ s.add_development_dependency 'bundler', '~> 1.3.5'
29
29
  s.add_development_dependency 'rake'
30
+ s.add_development_dependency 'yard'
30
31
  end
@@ -1,6 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module GmapsGeocoding
4
+ # Google Maps Geocoding Service abstraction class
5
+ #
6
+ # @example
7
+ # opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
8
+ # api = GmapsGeocoding::Api.new(opts)
9
+ #
4
10
  class Api
5
11
  attr_reader :config
6
12
 
@@ -8,12 +14,21 @@ module GmapsGeocoding
8
14
  @config = Config.new(opts)
9
15
  end
10
16
 
17
+ # Return a Ruby Hash object of the Google Maps Geocoding Service response
18
+ #
19
+ # {https://developers.google.com/maps/documentation/geocoding/ Google Maps Geocoding Service documentation}.
20
+ #
21
+ # @example
22
+ # # json output example
23
+ # opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
24
+ # api = GmapsGeocoding::Api.new(opts)
25
+ # result = api.get_location
26
+ # # xml output example
27
+ # opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
28
+ # api = GmapsGeocoding::Api.new(opts)
29
+ # result = api.get_location
30
+ #
11
31
  def get_location
12
- get_gmaps_data
13
- end
14
-
15
- private
16
- def get_gmaps_data
17
32
  begin
18
33
  if @config.valid?
19
34
  rest_client = retrieve_geocoding_data
@@ -21,7 +36,6 @@ module GmapsGeocoding
21
36
  when true
22
37
  GmapsGeocoding.from_json(rest_client.to_s)
23
38
  else
24
- # Xml parser
25
39
  GmapsGeocoding.from_xml(rest_client.to_s)
26
40
  end
27
41
  return result
@@ -32,6 +46,44 @@ module GmapsGeocoding
32
46
  nil
33
47
  end
34
48
 
49
+ # Get the best latlng for an address based on Google Maps Geocoder "location_type"
50
+ #
51
+ # location_type stores additional data about the specified location. The following values are currently supported:
52
+ # google.maps.GeocoderLocationType.ROOFTOP indicates that the returned result reflects a precise geocode.
53
+ # google.maps.GeocoderLocationType.RANGE_INTERPOLATED indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.
54
+ # google.maps.GeocoderLocationType.GEOMETRIC_CENTER indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region).
55
+ # google.maps.GeocoderLocationType.APPROXIMATE indicates that the returned result is approximate.
56
+ #
57
+ # @example
58
+ # # json output example
59
+ # opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
60
+ # api = GmapsGeocoding::Api.new(opts)
61
+ # data = api.get_location
62
+ # if data.include?('status') && data['status'].eql?('OK') # or more simple : if data.include?('results')
63
+ # return get_finest_latlng(data['results']) # output : [2.291018, 48.857269]
64
+ # end
65
+ #
66
+ # @param data_result [Array] The json#results or xml#result array from {#get_location} method
67
+ # @return [Array] array contains latitude and longitude of the location
68
+ def get_finest_latlng(data_result)
69
+ tmp_result = {}
70
+ data = data_result
71
+ data.each do |d|
72
+ tmp_result["#{d['geometry']['location_type']}"] = {lng: d['geometry']['location']['lng'].to_f,
73
+ lat: d['geometry']['location']['lat'].to_f}
74
+ end
75
+ if tmp_result.include?('ROOFTOP')
76
+ [tmp_result['ROOFTOP'][:lng], tmp_result['ROOFTOP'][:lat]]
77
+ elsif tmp_result.include?('RANGE_INTERPOLATED')
78
+ [tmp_result['RANGE_INTERPOLATED'][:lng], tmp_result['RANGE_INTERPOLATED'][:lat]]
79
+ elsif tmp_result.include?('GEOMETRIC_CENTER')
80
+ [tmp_result['GEOMETRIC_CENTER'][:lng], tmp_result['GEOMETRIC_CENTER'][:lat]]
81
+ else
82
+ [tmp_result['APPROXIMATE'][:lng], tmp_result['APPROXIMATE'][:lat]]
83
+ end
84
+ end
85
+
86
+ private
35
87
  def build_url_query
36
88
  query = {}
37
89
  query[:address] = @config.address if @config.address
@@ -47,24 +99,25 @@ module GmapsGeocoding
47
99
 
48
100
  def retrieve_geocoding_data
49
101
  require 'rest-client'
50
- data = build_url_query
102
+ data = build_url_query()
51
103
  RestClient.get data[:url], params: data[:query]
52
104
  end
53
105
  end
54
106
 
55
- def self.from_json(json)
56
- require 'yajl/json_gem'
57
- Yajl::Parser.parse(json)
58
- end
107
+ class << self
108
+ def from_json(json)
109
+ require 'yajl/json_gem'
110
+ Yajl::Parser.parse(json)
111
+ end
59
112
 
60
- def self.from_xml(xml)
61
- require 'nori'
62
- n = Nori.new(parser: :nokogiri).parse(xml)
63
- if n.include?('GeocodeResponse')
64
- n = n['GeocodeResponse']
65
- else
66
- n = {'status' => 'UNKNOWN_ERROR'}
113
+ def from_xml(xml)
114
+ require 'nori'
115
+ result = Nori.new(parser: :nokogiri).parse(xml)
116
+ if result.include?('GeocodeResponse')
117
+ result['GeocodeResponse']
118
+ else
119
+ {status: 'UNKNOWN_ERROR'}
120
+ end
67
121
  end
68
- n
69
122
  end
70
123
  end
@@ -1,9 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module GmapsGeocoding
4
+ # Configuration class for GmapsGeocoding API.
4
5
  class Config
5
- attr_reader :options
6
-
7
6
  def initialize(opts = {})
8
7
  @options = {url: 'https://maps.googleapis.com/maps/api/geocode'}
9
8
  @options[:output] = ENV['GOOGLE_MAPS_GEOCODING_OUTPUT'] || opts[:output] || 'json'
@@ -17,61 +16,108 @@ module GmapsGeocoding
17
16
  @options.merge!(opts).reject!{|_, v| v.to_s.length == 0 }
18
17
  end
19
18
 
19
+ # URL of the Google Maps Geocoding Service
20
+ #
21
+ # @return [String] URL of the Google Maps Geocoding Service
20
22
  def url
21
23
  @options[:url]
22
24
  end
23
25
 
26
+ # Output format of the Google Maps Geocoding Service
27
+ #
28
+ # @return [String] Output format of the Google Maps Geocoding Service. Only _xml_ or _json_ formats are available
24
29
  def output
25
30
  @options[:output]
26
31
  end
27
32
 
33
+ # The address that you want to geocode
34
+ #
35
+ # @return [String] The address that you want to geocode.
28
36
  def address
29
37
  @options[:address]
30
38
  end
31
39
 
40
+ # The textual latitude/longitude value for which you wish to obtain the closest, human-readable address
41
+ #
42
+ # @example
43
+ # "40.714224,-73.961452"
44
+ #
45
+ # @return [String] The textual latitude/longitude value for which you wish to obtain the closest, human-readable address
32
46
  def latlng
33
47
  @options[:latlng]
34
48
  end
35
-
49
+ # A component filter for which you wish to obtain a geocode
50
+ #
51
+ # {https://developers.google.com/maps/documentation/geocoding/#ComponentFiltering}
52
+ # @return [String] A component filter for which you wish to obtain a geocode
36
53
  def components
37
54
  @options[:components]
38
55
  end
39
56
 
57
+ # Indicates whether or not the geocoding request comes from a device with a location sensor.
58
+ #
59
+ # @return [String] Indicates whether or not the geocoding request comes from a device with a location sensor. Must be either "true" or "false".
40
60
  def sensor
41
61
  @options[:sensor]
42
62
  end
43
63
 
64
+ # The bounding box of the viewport within which to bias geocode results more prominently
65
+ #
66
+ # {https://developers.google.com/maps/documentation/geocoding/#Viewports}
67
+ # @return [String] The bounding box of the viewport within which to bias geocode results more prominently
44
68
  def bounds
45
69
  @options[:bounds]
46
70
  end
47
71
 
72
+ # The language in which to return results
73
+ #
74
+ # @return [String] The language in which to return results. {https://developers.google.com/maps/faq#languagesupport Supported languages}.
48
75
  def language
49
76
  @options[:language]
50
77
  end
51
78
 
79
+ # The region code, specified as a ccTLD ("top-level domain") two-character value
80
+ #
81
+ # {https://developers.google.com/maps/documentation/geocoding/#RegionCodes}
82
+ # @return [String] The region code, specified as a ccTLD ("top-level domain") two-character value
52
83
  def region
53
84
  @options[:region]
54
85
  end
55
86
 
87
+ # Check if the configuration object is valid
88
+ #
89
+ # @return [true, false] Return _true_ or _false_
56
90
  def valid?
57
- return is_query_valid? &&
58
- is_output_param_valid?
91
+ is_query_valid? && is_output_param_valid?
59
92
  end
60
93
 
94
+ # Check if the output format of the query is set to _json_
95
+ #
96
+ # @return [true, false] Return _true_ or _false_
61
97
  def is_json_format?
62
98
  'json'.eql?(output)
63
99
  end
64
100
 
101
+ # Check if the output format of the query is set to _xml_
102
+ #
103
+ # @return [true, false] Return _true_ or _false_
65
104
  def is_xml_format?
66
105
  'xml'.eql?(output)
67
106
  end
68
107
 
69
108
  private
109
+ # Check if the query is valid
110
+ #
111
+ # According to the specifications: {https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests}
70
112
  def is_query_valid?
71
113
  (@options[:address].to_s.length > 0 && @options[:latlng].to_s.length == 0) ||
72
- (@options[:address].to_s.length == 0 && @options[:latlng].to_s.length > 0)
114
+ (@options[:address].to_s.length == 0 && @options[:latlng].to_s.length > 0) ||
115
+ (@options[:components].to_s.length > 0)
73
116
  end
74
117
 
118
+ # Check if the output format is valid
119
+ #
120
+ # According to the specifications: {https://developers.google.com/maps/documentation/geocoding/#GeocodingResponses}
75
121
  def is_output_param_valid?
76
122
  ['json', 'xml'].include?(output)
77
123
  end
@@ -1,3 +1,3 @@
1
1
  module GmapsGeocoding
2
- VERSION = '0.0.4'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'test/unit'
3
+ require_relative 'test_helper'
3
4
  require 'gmaps_geocoding'
4
5
 
5
6
  class GmapsGeocodingTest < Test::Unit::TestCase
@@ -7,45 +8,58 @@ class GmapsGeocodingTest < Test::Unit::TestCase
7
8
  config = GmapsGeocoding::Config.new
8
9
  assert_not_nil config
9
10
  assert_equal false, config.valid?
10
- assert_equal 3, config.options.length
11
11
  end
12
12
 
13
13
  def test_config_address_set
14
14
  config = GmapsGeocoding::Config.new({address: 'Tour Eiffel, IDF, Paris, France'})
15
15
  assert_not_nil config
16
16
  assert_equal true, config.valid?
17
- assert_equal 4, config.options.length
18
17
  end
19
18
 
20
19
  def test_config_latlng_set
21
20
  config = GmapsGeocoding::Config.new({latlng: '40.714224,-73.961452'})
22
21
  assert_not_nil config
23
22
  assert_equal true, config.valid?
24
- assert_equal 4, config.options.length
25
23
  end
26
24
 
27
25
  def test_config_address_latlng_set
28
26
  config = GmapsGeocoding::Config.new({address: 'Tour Eiffel, IDF, Paris, France', latlng: '40.714224,-73.961452'})
29
27
  assert_not_nil config
30
28
  assert_equal false, config.valid?
31
- assert_equal 5, config.options.length
29
+ end
30
+
31
+ def test_config_url
32
+ config = GmapsGeocoding::Config.new({url: 'http://fakeurl.com'})
33
+ assert_equal 'http://fakeurl.com', config.url
32
34
  end
33
35
 
34
36
  def test_api_json_set
35
37
  opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
36
38
  api = GmapsGeocoding::Api.new(opts)
37
- result = api.get_location
38
39
  assert_not_nil api
39
- assert_not_nil result
40
- assert_equal 4, api.config.options.length
40
+
41
+ result_location = api.get_location
42
+ assert_not_nil result_location
43
+ assert_kind_of Hash, result_location
44
+ assert_include result_location, 'results'
45
+
46
+ result_latlng = api.get_finest_latlng(result_location['results'])
47
+ assert_not_nil result_latlng
48
+ assert_instance_of Array, result_latlng
41
49
  end
42
50
 
43
51
  def test_api_xml_set
44
52
  opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
45
53
  api = GmapsGeocoding::Api.new(opts)
46
- result = api.get_location
47
54
  assert_not_nil api
48
- assert_not_nil result
49
- assert_equal 4, api.config.options.length
55
+
56
+ result_location = api.get_location
57
+ assert_not_nil result_location
58
+ assert_kind_of Hash, result_location
59
+ assert_include result_location, 'result'
60
+
61
+ result_latlng = api.get_finest_latlng(result_location['result'])
62
+ assert_not_nil result_latlng
63
+ assert_instance_of Array, result_latlng
50
64
  end
51
65
  end
@@ -0,0 +1,6 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start do
4
+ add_filter 'test'
5
+ end
6
+ SimpleCov.command_name 'Unit Tests'
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmaps_geocoding
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christian Kakesa
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-17 00:00:00.000000000 Z
11
+ date: 2013-07-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rest-client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: yajl-ruby
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,68 +41,74 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: nori
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: 2.0.4
47
+ version: 2.2.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: 2.0.4
54
+ version: 2.2.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: nokogiri
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: 1.4.0
61
+ version: 1.6.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: 1.4.0
68
+ version: 1.6.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: bundler
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
85
- version: '1.3'
75
+ version: 1.3.5
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
93
- version: '1.3'
82
+ version: 1.3.5
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rake
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
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
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
- description: ! "\n A simple Ruby gem for Google Maps Geocoding API.\n This gem
111
+ description: "\n A simple Ruby gem for Google Maps Geocoding API.\n This gem
111
112
  return a Ruby Hash object of the result.\n "
112
113
  email:
113
114
  - christian.kakesa@gmail.com
@@ -119,6 +120,7 @@ files:
119
120
  - .ruby-version
120
121
  - .travis.yml
121
122
  - .versions.conf
123
+ - .yardopts
122
124
  - Gemfile
123
125
  - LICENSE.txt
124
126
  - README.md
@@ -129,36 +131,32 @@ files:
129
131
  - lib/gmaps_geocoding/config.rb
130
132
  - lib/gmaps_geocoding/version.rb
131
133
  - test/gmaps_geocoding_test.rb
134
+ - test/test_helper.rb
132
135
  homepage: https://github.com/fenicks/gmaps_geocoding
133
136
  licenses:
134
137
  - MIT
138
+ metadata: {}
135
139
  post_install_message:
136
140
  rdoc_options: []
137
141
  require_paths:
138
142
  - lib
139
143
  required_ruby_version: !ruby/object:Gem::Requirement
140
- none: false
141
144
  requirements:
142
- - - ! '>='
145
+ - - '>='
143
146
  - !ruby/object:Gem::Version
144
147
  version: '0'
145
- segments:
146
- - 0
147
- hash: 2934266397705908237
148
148
  required_rubygems_version: !ruby/object:Gem::Requirement
149
- none: false
150
149
  requirements:
151
- - - ! '>='
150
+ - - '>='
152
151
  - !ruby/object:Gem::Version
153
152
  version: '0'
154
- segments:
155
- - 0
156
- hash: 2934266397705908237
157
153
  requirements: []
158
154
  rubyforge_project:
159
- rubygems_version: 1.8.25
155
+ rubygems_version: 2.0.3
160
156
  signing_key:
161
- specification_version: 3
157
+ specification_version: 4
162
158
  summary: Use Google Geocoding API from Ruby.
163
159
  test_files:
164
160
  - test/gmaps_geocoding_test.rb
161
+ - test/test_helper.rb
162
+ has_rdoc: