gmaps_geocoding 0.1.4 → 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.
- checksums.yaml +4 -4
- data/.rubocop.yml +11 -0
- data/.travis.yml +2 -3
- data/.versions.conf +1 -1
- data/Gemfile +6 -2
- data/README.md +13 -11
- data/Rakefile +11 -9
- data/gmaps_geocoding.gemspec +14 -15
- data/lib/gmaps_geocoding.rb +0 -2
- data/lib/gmaps_geocoding/api.rb +52 -61
- data/lib/gmaps_geocoding/config.rb +31 -20
- data/lib/gmaps_geocoding/version.rb +3 -1
- data/test/gmaps_geocoding_api_test.rb +36 -0
- data/test/gmaps_geocoding_config_test.rb +57 -0
- data/test/test_helper.rb +2 -5
- metadata +21 -17
- data/test/gmaps_geocoding_test.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f019fb274f185c52576b9ca9ec1be88841e5284
|
4
|
+
data.tar.gz: 9a39437c2ccd8803efef2a4e43a45339866c0be1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eae47d13d97a317fbc51dca0844e9069a210ac67f4e9328118e12330e96f54758804c9839711ba2826ad40b7af26ca7005e2490aaa4ae302b0b3f11ca313a8e
|
7
|
+
data.tar.gz: 478e7fd679a880eda910d489596b88d72cd93812dc2fcc3214e2169bdc477ea259c315ccc1925b035b4ff6fc99c2eae17a4c281fca50782928ab6ef52fec56cd
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# Reference here: https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
|
2
|
+
|
3
|
+
Metrics/LineLength:
|
4
|
+
Description: 'Limit lines to 310 characters.'
|
5
|
+
Enabled: true
|
6
|
+
Max: 310
|
7
|
+
|
8
|
+
Metrics/MethodLength:
|
9
|
+
Description: 'Try to avoid methods longer than 50 lines of code.'
|
10
|
+
Enabled: true
|
11
|
+
Max: 50
|
data/.travis.yml
CHANGED
data/.versions.conf
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -37,15 +37,15 @@ All options could be overriden with corresponding environment variable:
|
|
37
37
|
|
38
38
|
opts = {address: 'Tour Eiffel, Paris, IDF, France'}
|
39
39
|
api = GmapsGeocoding::Api.new(opts)
|
40
|
-
data = api.
|
41
|
-
loc = api.
|
40
|
+
data = api.location
|
41
|
+
loc = api.finest_latlng(data['results']) if data.include?('status') && data['status'].eql?('OK')
|
42
42
|
|
43
43
|
_Return a location array_
|
44
44
|
|
45
45
|
* `loc[0] is the longitude float value`
|
46
46
|
* `loc[1] is the latitude float value`
|
47
47
|
|
48
|
-
`
|
48
|
+
`finest_latlng` retrieve the best address in this order:
|
49
49
|
|
50
50
|
* _ROOFTOP_
|
51
51
|
* _RANGE_INTERPOLATED_
|
@@ -57,7 +57,16 @@ _Return a location array_
|
|
57
57
|
# json output example
|
58
58
|
opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
|
59
59
|
api = GmapsGeocoding::Api.new(opts)
|
60
|
-
result = api.
|
60
|
+
result = api.location
|
61
|
+
|
62
|
+
### XML example
|
63
|
+
|
64
|
+
# xml output example
|
65
|
+
opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
|
66
|
+
api = GmapsGeocoding::Api.new(opts)
|
67
|
+
result = api.location
|
68
|
+
|
69
|
+
# JSON and XML output
|
61
70
|
|
62
71
|
**Ruby Hash object from json output**
|
63
72
|
|
@@ -146,13 +155,6 @@ _Return a location array_
|
|
146
155
|
"types"=>[]}],
|
147
156
|
"status"=>"OK"}
|
148
157
|
|
149
|
-
### XML example
|
150
|
-
|
151
|
-
# xml output example
|
152
|
-
opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
|
153
|
-
api = GmapsGeocoding::Api.new(opts)
|
154
|
-
result = api.get_location
|
155
|
-
|
156
158
|
**Ruby Hash object from xml output**
|
157
159
|
|
158
160
|
{"status"=>"OK",
|
data/Rakefile
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'bundler/gem_tasks'
|
3
2
|
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
4
4
|
require 'yard'
|
5
5
|
|
6
|
-
|
7
|
-
$:.unshift lib unless $:.include?(lib)
|
8
|
-
require('gmaps_geocoding/version')
|
6
|
+
require_relative 'lib/gmaps_geocoding/version'
|
9
7
|
|
10
8
|
task gem: :build
|
11
9
|
task :build do
|
@@ -20,7 +18,7 @@ task release: :build do
|
|
20
18
|
system "git tag -a v#{GmapsGeocoding::VERSION} -m 'Tagging #{GmapsGeocoding::VERSION}'"
|
21
19
|
system 'git push --tags'
|
22
20
|
system "gem push gmaps_geocoding-#{GmapsGeocoding::VERSION}.gem"
|
23
|
-
|
21
|
+
system "rm gmaps_geocoding-#{GmapsGeocoding::VERSION}.gem"
|
24
22
|
end
|
25
23
|
|
26
24
|
Rake::TestTask.new do |t|
|
@@ -28,11 +26,15 @@ Rake::TestTask.new do |t|
|
|
28
26
|
t.test_files = FileList['test/**/*_test.rb']
|
29
27
|
t.verbose = true
|
30
28
|
end
|
29
|
+
task default: [:test, :rubocop]
|
30
|
+
|
31
|
+
RuboCop::RakeTask.new do |task|
|
32
|
+
task.formatters = ['simple']
|
33
|
+
task.fail_on_error = false
|
34
|
+
end
|
31
35
|
|
32
36
|
desc 'Generate documentation'
|
33
37
|
YARD::Rake::YardocTask.new do |t|
|
34
|
-
t.files =
|
35
|
-
t.options =
|
38
|
+
t.files = %w(lib/**/*.rb - LICENSE.txt)
|
39
|
+
t.options = %w(--main README.md --no-private)
|
36
40
|
end
|
37
|
-
|
38
|
-
task default: :test
|
data/gmaps_geocoding.gemspec
CHANGED
@@ -1,31 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require 'gmaps_geocoding/version'
|
1
|
+
require 'English'
|
2
|
+
|
3
|
+
require_relative 'lib/gmaps_geocoding/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
6
|
s.name = 'gmaps_geocoding'
|
8
7
|
s.version = GmapsGeocoding::VERSION
|
9
8
|
s.authors = ['Christian Kakesa']
|
10
9
|
s.email = ['christian.kakesa@gmail.com']
|
11
|
-
s.description =
|
10
|
+
s.description = <<-END
|
12
11
|
A simple Ruby gem for Google Maps Geocoding API.
|
13
12
|
This gem return a Ruby Hash object of the result.
|
14
|
-
|
15
|
-
s.summary =
|
13
|
+
END
|
14
|
+
s.summary = 'Use Google Geocoding API from Ruby.'
|
16
15
|
s.homepage = 'https://github.com/fenicks/gmaps_geocoding'
|
17
16
|
s.license = 'MIT'
|
18
17
|
|
19
|
-
s.files = `git ls-files`.split(
|
20
|
-
s.executables = s.files.grep(%r{^bin
|
21
|
-
s.test_files = s.files.grep(%r{^(test|spec|features)
|
18
|
+
s.files = `git ls-files`.split($RS)
|
19
|
+
s.executables = s.files.grep(%r{^bin\/}) { |f| File.basename(f) }
|
20
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)\/})
|
22
21
|
s.require_paths = ['lib']
|
23
22
|
|
24
|
-
s.add_runtime_dependency 'rest-client', '~> 1.
|
25
|
-
s.add_runtime_dependency 'yajl-ruby', '~> 1.2.
|
26
|
-
s.add_runtime_dependency 'nori', '~> 2.
|
27
|
-
s.add_runtime_dependency 'nokogiri', '~> 1.6.
|
28
|
-
s.add_development_dependency 'bundler', '>= 1.
|
23
|
+
s.add_runtime_dependency 'rest-client', '~> 1.8.0'
|
24
|
+
s.add_runtime_dependency 'yajl-ruby', '~> 1.2.1'
|
25
|
+
s.add_runtime_dependency 'nori', '~> 2.5.0'
|
26
|
+
s.add_runtime_dependency 'nokogiri', '~> 1.6.6'
|
27
|
+
s.add_development_dependency 'bundler', '>= 1.8.4'
|
29
28
|
s.add_development_dependency 'rake'
|
30
29
|
s.add_development_dependency 'yard'
|
31
30
|
end
|
data/lib/gmaps_geocoding.rb
CHANGED
data/lib/gmaps_geocoding/api.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'logger'
|
2
|
+
require 'rest-client'
|
3
|
+
require 'yajl/json_gem'
|
4
|
+
require 'nori'
|
3
5
|
|
6
|
+
# Gmaps geocoding module
|
4
7
|
module GmapsGeocoding
|
5
8
|
# Google Maps Geocoding Service abstraction class
|
6
9
|
#
|
@@ -12,9 +15,12 @@ module GmapsGeocoding
|
|
12
15
|
attr_reader :config
|
13
16
|
|
14
17
|
def initialize(opts = {})
|
15
|
-
@logger = opts.delete(:logger)
|
16
|
-
|
17
|
-
|
18
|
+
@logger = opts.delete(:logger)
|
19
|
+
unless @logger
|
20
|
+
@logger = Logger.new(STDERR) do |l|
|
21
|
+
l.progname = 'gmaps_geocoding'.freeze
|
22
|
+
l.level = $DEBUG ? Logger::DEBUG : Logger::INFO
|
23
|
+
end
|
18
24
|
end
|
19
25
|
@config = GmapsGeocoding::Config.new(opts)
|
20
26
|
end
|
@@ -27,26 +33,31 @@ module GmapsGeocoding
|
|
27
33
|
# # json output example
|
28
34
|
# opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
|
29
35
|
# api = GmapsGeocoding::Api.new(opts)
|
30
|
-
# result = api.
|
36
|
+
# result = api.location
|
31
37
|
# # xml output example
|
32
38
|
# opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
|
33
39
|
# api = GmapsGeocoding::Api.new(opts)
|
34
|
-
# result = api.
|
40
|
+
# result = api.location
|
35
41
|
#
|
36
|
-
def
|
42
|
+
def location
|
37
43
|
begin
|
38
44
|
if @config.valid?
|
39
45
|
rest_client = retrieve_geocoding_data
|
40
|
-
result = case @config.
|
46
|
+
result = case @config.json_format?
|
41
47
|
when true
|
42
|
-
|
48
|
+
Yajl::Parser.parse(rest_client)
|
43
49
|
else
|
44
|
-
|
50
|
+
r = Nori.new.parse(rest_client)
|
51
|
+
if r.include?('GeocodeResponse')
|
52
|
+
r['GeocodeResponse']
|
53
|
+
else
|
54
|
+
{ status: 'UNKNOWN_ERROR' }
|
55
|
+
end
|
45
56
|
end
|
46
57
|
return result
|
47
58
|
end
|
48
59
|
rescue => e
|
49
|
-
@logger.error e
|
60
|
+
@logger.error e
|
50
61
|
end
|
51
62
|
nil
|
52
63
|
end
|
@@ -63,71 +74,51 @@ module GmapsGeocoding
|
|
63
74
|
# # json output example
|
64
75
|
# opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
|
65
76
|
# api = GmapsGeocoding::Api.new(opts)
|
66
|
-
# data = api.
|
77
|
+
# data = api.location
|
67
78
|
# if data.include?('status') && data['status'].eql?('OK') # or more simple : if data.include?('results')
|
68
|
-
# return
|
79
|
+
# return finest_latlng(data['results']) # output : [2.291018, 48.857269]
|
69
80
|
# end
|
70
81
|
#
|
71
|
-
# @param
|
82
|
+
# @param data [Array] The json#results or xml#result array from {#location} method
|
72
83
|
# @return [Array] array contains latitude and longitude of the location
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
if
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
tmp_result["#{data['geometry']['location_type']}"] = { lng: data['geometry']['location']['lng'].to_f,
|
83
|
-
lat: data['geometry']['location']['lat'].to_f }
|
84
|
-
end
|
85
|
-
if tmp_result.include?('ROOFTOP')
|
86
|
-
[tmp_result['ROOFTOP'][:lng], tmp_result['ROOFTOP'][:lat]]
|
87
|
-
elsif tmp_result.include?('RANGE_INTERPOLATED')
|
88
|
-
[tmp_result['RANGE_INTERPOLATED'][:lng], tmp_result['RANGE_INTERPOLATED'][:lat]]
|
89
|
-
elsif tmp_result.include?('GEOMETRIC_CENTER')
|
90
|
-
[tmp_result['GEOMETRIC_CENTER'][:lng], tmp_result['GEOMETRIC_CENTER'][:lat]]
|
91
|
-
else
|
92
|
-
[tmp_result['APPROXIMATE'][:lng], tmp_result['APPROXIMATE'][:lat]]
|
93
|
-
end
|
84
|
+
# rubocop:disable Metrics/AbcSize
|
85
|
+
def finest_latlng(data)
|
86
|
+
result = retrieve_finest_location(data)
|
87
|
+
return [result['ROOFTOP'][:lng], result['ROOFTOP'][:lat]] if result.include?('ROOFTOP')
|
88
|
+
return [result['RANGE_INTERPOLATED'][:lng], result['RANGE_INTERPOLATED'][:lat]] if result.include?('RANGE_INTERPOLATED')
|
89
|
+
return [result['GEOMETRIC_CENTER'][:lng], result['GEOMETRIC_CENTER'][:lat]] if result.include?('GEOMETRIC_CENTER')
|
90
|
+
[result['APPROXIMATE'][:lng], result['APPROXIMATE'][:lat]]
|
91
|
+
rescue
|
92
|
+
[0.0, 0.0]
|
94
93
|
end
|
94
|
+
# rubocop:enable Metrics/AbcSize
|
95
95
|
|
96
96
|
private
|
97
|
+
|
98
|
+
def retrieve_finest_location(data)
|
99
|
+
result = {}
|
100
|
+
tmp_data = data
|
101
|
+
tmp_data = [tmp_data] unless tmp_data.is_a?(Array)
|
102
|
+
tmp_data.each do |d|
|
103
|
+
result["#{d['geometry']['location_type']}"] = { lng: d['geometry']['location']['lng'].to_f,
|
104
|
+
lat: d['geometry']['location']['lat'].to_f }
|
105
|
+
end
|
106
|
+
result
|
107
|
+
end
|
108
|
+
|
97
109
|
def build_url_query
|
98
110
|
query = {}
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
query[:bounds] = @config.bounds if @config.bounds
|
104
|
-
query[:language] = @config.language if @config.language
|
105
|
-
query[:region] = @config.region if @config.region
|
111
|
+
[:address, :latlng, :components, :sensor, :bounds, :language, :region].each do |k|
|
112
|
+
val = @config.send(k)
|
113
|
+
query[k] = val if val
|
114
|
+
end
|
106
115
|
url = "#{@config.url}/#{@config.output}"
|
107
|
-
{ url: url, query: query }
|
116
|
+
{ url: url, query: query }.freeze
|
108
117
|
end
|
109
118
|
|
110
119
|
def retrieve_geocoding_data
|
111
|
-
require 'rest-client'
|
112
120
|
data = build_url_query
|
113
121
|
RestClient.get data[:url], params: data[:query]
|
114
122
|
end
|
115
123
|
end
|
116
|
-
|
117
|
-
class << self
|
118
|
-
def from_json(json)
|
119
|
-
require 'yajl/json_gem'
|
120
|
-
Yajl::Parser.parse(json)
|
121
|
-
end
|
122
|
-
|
123
|
-
def from_xml(xml)
|
124
|
-
require 'nori'
|
125
|
-
result = Nori.new.parse(xml)
|
126
|
-
if result.include?('GeocodeResponse')
|
127
|
-
result['GeocodeResponse']
|
128
|
-
else
|
129
|
-
{ status: 'UNKNOWN_ERROR' }
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
124
|
end
|
@@ -1,19 +1,29 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# Gmaps geocoding module
|
3
2
|
module GmapsGeocoding
|
4
3
|
# Configuration class for GmapsGeocoding API.
|
5
4
|
class Config
|
5
|
+
# Configuration valid keys
|
6
|
+
VALID_KEYS = [:url, :output, :address, :latlng, :components, :sensor, :bounds, :language, :region].freeze
|
7
|
+
|
8
|
+
# Default configuration values
|
9
|
+
DEFAULT_CONFIG = {
|
10
|
+
url: 'https://maps.googleapis.com/maps/api/geocode',
|
11
|
+
output: 'json',
|
12
|
+
sensor: 'false'
|
13
|
+
}.freeze
|
14
|
+
|
6
15
|
def initialize(opts = {})
|
7
|
-
@options = {
|
8
|
-
@options
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
@options = {}
|
17
|
+
@options.merge!(DEFAULT_CONFIG)
|
18
|
+
opts.each do |k, _|
|
19
|
+
next unless VALID_KEYS.include?(k)
|
20
|
+
val = if k.eql?(:url)
|
21
|
+
opts.delete(k)
|
22
|
+
else
|
23
|
+
ENV["GOOGLE_MAPS_GEOCODING_#{k.to_s.upcase}"] || opts.delete(k)
|
24
|
+
end
|
25
|
+
@options[k] = val if val
|
26
|
+
end
|
17
27
|
end
|
18
28
|
|
19
29
|
# URL of the Google Maps Geocoding Service
|
@@ -89,37 +99,38 @@ module GmapsGeocoding
|
|
89
99
|
#
|
90
100
|
# @return [true, false] Return _true_ or _false_
|
91
101
|
def valid?
|
92
|
-
|
102
|
+
query_valid? && output_param_valid?
|
93
103
|
end
|
94
104
|
|
95
105
|
# Check if the output format of the query is set to _json_
|
96
106
|
#
|
97
107
|
# @return [true, false] Return _true_ or _false_
|
98
|
-
def
|
108
|
+
def json_format?
|
99
109
|
'json'.eql?(output)
|
100
110
|
end
|
101
111
|
|
102
112
|
# Check if the output format of the query is set to _xml_
|
103
113
|
#
|
104
114
|
# @return [true, false] Return _true_ or _false_
|
105
|
-
def
|
115
|
+
def xml_format?
|
106
116
|
'xml'.eql?(output)
|
107
117
|
end
|
108
118
|
|
109
119
|
private
|
120
|
+
|
110
121
|
# Check if the query is valid
|
111
122
|
#
|
112
123
|
# According to the specifications: {https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests}
|
113
|
-
def
|
114
|
-
(@options
|
115
|
-
|
116
|
-
|
124
|
+
def query_valid?
|
125
|
+
(@options.include?(:address) && !@options.include?(:latlng)) ||
|
126
|
+
(!@options.include?(:address) && @options.include?(:latlng)) ||
|
127
|
+
@options.include?(:components)
|
117
128
|
end
|
118
129
|
|
119
130
|
# Check if the output format is valid
|
120
131
|
#
|
121
132
|
# According to the specifications: {https://developers.google.com/maps/documentation/geocoding/#GeocodingResponses}
|
122
|
-
def
|
133
|
+
def output_param_valid?
|
123
134
|
%w(json xml).include?(output)
|
124
135
|
end
|
125
136
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
require_relative '../lib/gmaps_geocoding'
|
3
|
+
require_relative 'test_helper'
|
4
|
+
|
5
|
+
# Main test class
|
6
|
+
class GmapsGeocodingApiTest < Test::Unit::TestCase
|
7
|
+
def test_api_json_set
|
8
|
+
opts = { address: 'Tour Eiffel, Paris, IDF, France', output: 'json' }
|
9
|
+
api = GmapsGeocoding::Api.new(opts)
|
10
|
+
assert_not_nil api
|
11
|
+
|
12
|
+
result_location = api.location
|
13
|
+
assert_not_nil result_location
|
14
|
+
assert_kind_of Hash, result_location
|
15
|
+
assert_include result_location, 'results'
|
16
|
+
|
17
|
+
result_latlng = api.finest_latlng(result_location['results'])
|
18
|
+
assert_not_nil result_latlng
|
19
|
+
assert_instance_of Array, result_latlng
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_api_xml_set
|
23
|
+
opts = { address: 'Tour Eiffel, Paris, IDF, France', output: 'xml' }
|
24
|
+
api = GmapsGeocoding::Api.new(opts)
|
25
|
+
assert_not_nil api
|
26
|
+
|
27
|
+
result_location = api.location
|
28
|
+
assert_not_nil result_location
|
29
|
+
assert_kind_of Hash, result_location
|
30
|
+
assert_include result_location, 'result'
|
31
|
+
|
32
|
+
result_latlng = api.finest_latlng(result_location['result'])
|
33
|
+
assert_not_nil result_latlng
|
34
|
+
assert_instance_of Array, result_latlng
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative '../lib/gmaps_geocoding'
|
2
|
+
require_relative 'test_helper'
|
3
|
+
|
4
|
+
# Main test class
|
5
|
+
class GmapsGeocodingConfigTest < Test::Unit::TestCase
|
6
|
+
def test_config_default
|
7
|
+
config = GmapsGeocoding::Config.new
|
8
|
+
assert_not_nil config
|
9
|
+
|
10
|
+
assert_equal false, config.valid?
|
11
|
+
assert_equal true, config.json_format?
|
12
|
+
assert_equal false, config.xml_format?
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_config_default_address
|
16
|
+
config = GmapsGeocoding::Config.new
|
17
|
+
assert_not_nil config
|
18
|
+
|
19
|
+
assert_equal true, config.url.size > 0
|
20
|
+
assert_equal 'json', config.output
|
21
|
+
assert_nil config.address
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_config_default_optional
|
25
|
+
config = GmapsGeocoding::Config.new
|
26
|
+
assert_not_nil config
|
27
|
+
assert_nil config.latlng
|
28
|
+
assert_nil config.components
|
29
|
+
assert_equal 'false', config.sensor
|
30
|
+
assert_nil config.bounds
|
31
|
+
assert_nil config.language
|
32
|
+
assert_nil config.region
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_config_address_set
|
36
|
+
config = GmapsGeocoding::Config.new(address: 'Tour Eiffel, IDF, Paris, France')
|
37
|
+
assert_not_nil config
|
38
|
+
assert_equal true, config.valid?
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_config_latlng_set
|
42
|
+
config = GmapsGeocoding::Config.new(latlng: '40.714224,-73.961452')
|
43
|
+
assert_not_nil config
|
44
|
+
assert_equal true, config.valid?
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_config_address_latlng_set
|
48
|
+
config = GmapsGeocoding::Config.new(address: 'Tour Eiffel, IDF, Paris, France', latlng: '40.714224,-73.961452')
|
49
|
+
assert_not_nil config
|
50
|
+
assert_equal false, config.valid?
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_config_url
|
54
|
+
config = GmapsGeocoding::Config.new(url: 'http://fakeurl.com')
|
55
|
+
assert_equal 'http://fakeurl.com', config.url
|
56
|
+
end
|
57
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmaps_geocoding
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Kakesa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -16,70 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.8.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: 1.
|
26
|
+
version: 1.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: yajl-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.2.
|
33
|
+
version: 1.2.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.2.
|
40
|
+
version: 1.2.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nori
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.
|
47
|
+
version: 2.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
54
|
+
version: 2.5.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: nokogiri
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.6.
|
61
|
+
version: 1.6.6
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.6.
|
68
|
+
version: 1.6.6
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: 1.8.4
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.8.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,8 +108,9 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description:
|
112
|
-
|
111
|
+
description: |2
|
112
|
+
A simple Ruby gem for Google Maps Geocoding API.
|
113
|
+
This gem return a Ruby Hash object of the result.
|
113
114
|
email:
|
114
115
|
- christian.kakesa@gmail.com
|
115
116
|
executables: []
|
@@ -117,6 +118,7 @@ extensions: []
|
|
117
118
|
extra_rdoc_files: []
|
118
119
|
files:
|
119
120
|
- ".gitignore"
|
121
|
+
- ".rubocop.yml"
|
120
122
|
- ".travis.yml"
|
121
123
|
- ".versions.conf"
|
122
124
|
- ".yardopts"
|
@@ -129,7 +131,8 @@ files:
|
|
129
131
|
- lib/gmaps_geocoding/api.rb
|
130
132
|
- lib/gmaps_geocoding/config.rb
|
131
133
|
- lib/gmaps_geocoding/version.rb
|
132
|
-
- test/
|
134
|
+
- test/gmaps_geocoding_api_test.rb
|
135
|
+
- test/gmaps_geocoding_config_test.rb
|
133
136
|
- test/test_helper.rb
|
134
137
|
homepage: https://github.com/fenicks/gmaps_geocoding
|
135
138
|
licenses:
|
@@ -151,11 +154,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
154
|
version: '0'
|
152
155
|
requirements: []
|
153
156
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
157
|
+
rubygems_version: 2.4.6
|
155
158
|
signing_key:
|
156
159
|
specification_version: 4
|
157
160
|
summary: Use Google Geocoding API from Ruby.
|
158
161
|
test_files:
|
159
|
-
- test/
|
162
|
+
- test/gmaps_geocoding_api_test.rb
|
163
|
+
- test/gmaps_geocoding_config_test.rb
|
160
164
|
- test/test_helper.rb
|
161
165
|
has_rdoc:
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'test/unit'
|
3
|
-
require_relative 'test_helper'
|
4
|
-
require 'gmaps_geocoding'
|
5
|
-
|
6
|
-
# Main test class
|
7
|
-
class GmapsGeocodingTest < Test::Unit::TestCase
|
8
|
-
def test_config_default
|
9
|
-
config = GmapsGeocoding::Config.new
|
10
|
-
assert_not_nil config
|
11
|
-
assert_equal false, config.valid?
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_config_address_set
|
15
|
-
config = GmapsGeocoding::Config.new({ address: 'Tour Eiffel, IDF, Paris, France' })
|
16
|
-
assert_not_nil config
|
17
|
-
assert_equal true, config.valid?
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_config_latlng_set
|
21
|
-
config = GmapsGeocoding::Config.new({ latlng: '40.714224,-73.961452' })
|
22
|
-
assert_not_nil config
|
23
|
-
assert_equal true, config.valid?
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_config_address_latlng_set
|
27
|
-
config = GmapsGeocoding::Config.new({ address: 'Tour Eiffel, IDF, Paris, France', latlng: '40.714224,-73.961452' })
|
28
|
-
assert_not_nil config
|
29
|
-
assert_equal false, config.valid?
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_config_url
|
33
|
-
config = GmapsGeocoding::Config.new({ url: 'http://fakeurl.com' })
|
34
|
-
assert_equal 'http://fakeurl.com', config.url
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_api_json_set
|
38
|
-
opts = { address: 'Tour Eiffel, Paris, IDF, France', output: 'json' }
|
39
|
-
api = GmapsGeocoding::Api.new(opts)
|
40
|
-
assert_not_nil api
|
41
|
-
|
42
|
-
result_location = api.get_location
|
43
|
-
assert_not_nil result_location
|
44
|
-
assert_kind_of Hash, result_location
|
45
|
-
assert_include result_location, 'results'
|
46
|
-
|
47
|
-
result_latlng = api.get_finest_latlng(result_location['results'])
|
48
|
-
assert_not_nil result_latlng
|
49
|
-
assert_instance_of Array, result_latlng
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_api_xml_set
|
53
|
-
opts = { address: 'Tour Eiffel, Paris, IDF, France', output: 'xml' }
|
54
|
-
api = GmapsGeocoding::Api.new(opts)
|
55
|
-
assert_not_nil api
|
56
|
-
|
57
|
-
result_location = api.get_location
|
58
|
-
assert_not_nil result_location
|
59
|
-
assert_kind_of Hash, result_location
|
60
|
-
assert_include result_location, 'result'
|
61
|
-
|
62
|
-
result_latlng = api.get_finest_latlng(result_location['result'])
|
63
|
-
assert_not_nil result_latlng
|
64
|
-
assert_instance_of Array, result_latlng
|
65
|
-
end
|
66
|
-
end
|