what3words 2.0.4 → 2.1.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: 55fd336afb4874c96702060ac0e07eff723e8ca8
4
- data.tar.gz: 06acf5049cd02703cafc219e2ab747d3462b525e
3
+ metadata.gz: 8f9631e97c5f664a7205fdb297e03ec68ba80608
4
+ data.tar.gz: 1f45125f7dd016a8a17f75bd290b89f0f828e6fb
5
5
  SHA512:
6
- metadata.gz: 01ae762ff9fc1770d9f57d207f32b1c55bdd26885bcc64adaa4e7062965b85370740234e9856b2ac96f8484b07482f3f43f88459b22b9cfe014a78f41cc2349c
7
- data.tar.gz: 372592b00b3ca32b622e007bddac5dc50d248d4ea49578da2eefec0cd3adeb5a13a1dee39fff6618084bc6c38acd7ee1f00a35890e17f44e1bfc3b8b225851dc
6
+ metadata.gz: 6b2e3c38f9979c34acc6efb3ddde9e076bce2a50c0e82c17018ea7fef9842a6d8b9d2c805e4b2509b3785a460a314c6f8ee144cb0bc7c52f9af943a0fd502de8
7
+ data.tar.gz: d006eab3c400debaf673c4d6f98ca8335dc8dbe7c7081b37e7063c62d98814b7383e72989b0e59c6b869ad17181eed7214ee80624887b17c38247706ea12c5cd
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2
4
- script: rake spec
3
+ - 2.4
4
+ script: rake rubocop spec
5
5
  notifications:
6
6
  slack:
7
7
  secure: DvejcrOH6RdAdrGEPLUrnia9cES8iCHVlVSFAMwx2vaR/I3T9bfUiHnb3VHfiqx4cvDL+9wT3opG0sZkUCFJGqzA3E//VObKNXjwUFCUptFG68qgR7LZ3vDatWlUqU+32gWeYaHM3FpNP2E/IARjphaiF3jRUZbronqVzJZN2MbMsUYBeGq7v0AaLkgbxVgOWtBnMVcBPOnarEJqHyJlqQ2unYnIy+GNoOFtPMPNZobYTf0zxrycldYpP937yT4CTsY3I7RxuEtnY2sPYW+eFBESGLg6EfnjeOruROY+b9cSHIh1Qzr7Oup6a+oQ3+vCvLbYsGpEO04RTeTTtOGc7aRlUylmvuFPi7qQwOTZ+4KD5aIBh4p7bQiPfvAeqDU4pVJxPHHZirgjFpUpAvofj48SvDgwX9cFyAhAlDZ9qBOctmhphW9KNkcAW4MY421AdVAjFWwc5CU8G5oPdKcyWam3ZB3nHwKgZm6LLAcZgbG0rjZT+iPeQBvTKH3kPx7E1CkxZNkEralHJ3l+bDwY3GdzsgcMpT3bWNl3pLszFzgXljDScMU8my1+xjDQINEnI3TCJA4MhKkzYkRgfrEBkgPb2SiF7qnhbyMzSFbCU4jsM1MLQZolNG9EsjsxJLuL4YTC2wKOHajViUUeaCNIcNU5UXBQuit93RyMu7RrLRM=
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
  gemspec
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016 What3Words Limited
1
+ Copyright (c) 2016, 2017 What3Words Limited
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -7,15 +7,21 @@ Use the what3words API in your Ruby app (see http://developer.what3words.com/api
7
7
 
8
8
  Add this line to your application's Gemfile:
9
9
 
10
- gem 'what3words', '~> 2.0'
10
+ ```shell
11
+ gem 'what3words', '~> 2.1'
12
+ ```
11
13
 
12
14
  And then execute:
13
15
 
16
+ ```shell
14
17
  $ bundle
18
+ ```
15
19
 
16
20
  Or install it yourself as:
17
21
 
22
+ ```shell
18
23
  $ gem install what3words
24
+ ```
19
25
 
20
26
  ## Usage
21
27
 
@@ -26,24 +32,31 @@ passed to the API calls
26
32
 
27
33
  If not using Bundler, require it:
28
34
 
29
- require "what3words"
35
+ ```ruby
36
+ require 'what3words'
37
+ ```
30
38
 
31
39
  Then:
32
40
 
41
+ ```ruby
33
42
  what3words = What3Words::API.new(:key => "YOURAPIKEY")
43
+ ```
34
44
 
35
45
  Forward Geocode : convert a 3 word address into GPS coordinates (WGS-84)
36
46
 
37
- what3words.forward "prom.cape.pump"
47
+ ```ruby
48
+ what3words.forward 'prom.cape.pump'
38
49
  # => {:crs=>{:properties=>{:type=>"ogcwkt", :href=>"http://spatialreference.org/ref/epsg/4326/ogcwkt/"}, :type=>"link"}, :bounds=>{:southwest=>{:lng=>-0.195426, :lat=>51.484449}, :northeast=>{:lng=>-0.195383, :lat=>51.484476}}, :words=>"prom.cape.pump", :map=>"http://w3w.co/prom.cape.pump", :language=>"en", :geometry=>{:lng=>-0.195405, :lat=>51.484463}, :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
50
+ ```
39
51
 
40
52
  ## API
41
53
  ### Forward Geocoding
42
54
  Convert a 3 word address into GPS coordinates and return 3 words for the same position in a different language
43
55
 
56
+ ```ruby
44
57
  what3words.forward "prom.cape.pump", :lang => "fr"
45
58
  # => {:crs=>{:properties=>{:type=>"ogcwkt", :href=>"http://spatialreference.org/ref/epsg/4326/ogcwkt/"}, :type=>"link"}, :bounds=>{:southwest=>{:lng=>-0.195426, :lat=>51.484449}, :northeast=>{:lng=>-0.195383, :lat=>51.484476}}, :words=>"concevoir.époque.amasser", :map=>"http://w3w.co/concevoir.époque.amasser", :language=>"fr", :geometry=>{:lng=>-0.195405, :lat=>51.484463}, :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
46
-
59
+ ```
47
60
  Supported keyword params for `forward` call:
48
61
 
49
62
  * `lang` (defaults to language of 3 words) - optional language code (only use this if you want to return 3 words in a different language to the language submitted)
@@ -53,13 +66,17 @@ Supported keyword params for `forward` call:
53
66
  ### Reverse Geocoding
54
67
  Reverse Geocode : Convert position(latitude) information to a 3 word address
55
68
 
69
+ ```ruby
56
70
  what3words.reverse [51.484463, -0.195405]
57
71
  # => {:crs=>{:properties=>{:type=>"ogcwkt", :href=>"http://spatialreference.org/ref/epsg/4326/ogcwkt/"}, :type=>"link"}, :bounds=>{:southwest=>{:lng=>-0.195426, :lat=>51.484449}, :northeast=>{:lng=>-0.195383, :lat=>51.484476}}, :words=>"prom.cape.pump", :map=>"http://w3w.co/prom.cape.pump", :language=>"en", :geometry=>{:lng=>-0.195405, :lat=>51.484463}, :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
72
+ ```
58
73
 
59
74
  Convert position information to a 3 word address in a specific language
60
75
 
76
+ ```ruby
61
77
  what3words.reverse [51.484463, -0.195405], :lang => :fr
62
78
  # => {:crs=>{:properties=>{:type=>"ogcwkt", :href=>"http://spatialreference.org/ref/epsg/4326/ogcwkt/"}, :type=>"link"}, :bounds=>{:southwest=>{:lng=>-0.195426, :lat=>51.484449}, :northeast=>{:lng=>-0.195383, :lat=>51.484476}}, :words=>"concevoir.époque.amasser", :map=>"http://w3w.co/concevoir.époque.amasser", :language=>"fr", :geometry=>{:lng=>-0.195405, :lat=>51.484463}, :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
79
+ ```
63
80
 
64
81
  Supported keyword params for `reverse` call:
65
82
 
@@ -78,14 +95,28 @@ This resource provides corrections for the following types of input error:
78
95
 
79
96
  The autosuggest resource determines possible corrections to the supplied 3 word address string based on the probability of the input errors listed above and returns a ranked list of suggestions. This resource can also take into consideration the geographic proximity of possible corrections to a given location to further improve the suggestions returned.
80
97
 
98
+ *Single and Multilingual Variants*
99
+
100
+ AutoSuggest is provided via 2 variant resources; single language and multilingual.
101
+
102
+ The single language `autosuggest` method requires a language to be specified.
103
+
104
+ The multilingual `autosuggest_ml` method requires a language to be specified. This will ensure that the autosuggest-ml resource will look for suggestions in this language, in addition to any other languages that yield relevant suggestions.
105
+
81
106
  see https://docs.what3words.com/api/v2/#autosuggest for detailed information
82
107
 
83
108
  Gets suggestions in italian for this address
84
109
 
110
+ ```ruby
85
111
  what3words.autosuggest "trovò.calore.perder", "it"
86
112
  # => {:suggestions=>[{:score=>12, :country=>"ma", :words=>"trovò.calore.perdere", :rank=>1, :geometry=>{:lng=>-6.665638, :lat=>34.318065}, :place=>"Kenitra, Gharb-Chrarda-Beni Hssen"}, {:score=>12, :country=>"ca", :words=>"trovò.calore.perderò", :rank=>2, :geometry=>{:lng=>-65.036149, :lat=>45.846472}, :place=>"Salisbury, New Brunswick"}, {:score=>17, :country=>"ve", :words=>"trovò.calore.prede", :rank=>3, :geometry=>{:lng=>-70.280645, :lat=>7.24527}, :place=>"Guasdualito, Apure"}], :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
113
+ ```
114
+
115
+ ```ruby
116
+ what3words.autosuggest_ml "trovò.calore.perder", "it"
117
+ ```
87
118
 
88
- Supported keyword params for `autosuggest` call:
119
+ Supported keyword params for `autosuggest` and `autosuggest_ml` call:
89
120
  * `format` Return data format type; can be one of json (the default), geojson or xml
90
121
  * `display` Return display type; can be one of full (the default) or terse
91
122
 
@@ -94,14 +125,28 @@ Returns a blend of the three most relevant 3 word address candidates for a given
94
125
 
95
126
  The specified 3 word address may either be a full 3 word address or a partial 3 word address containing the first 2 words in full and at least 1 character of the 3rd word. The standardblend resource provides the search logic that powers the search box on map.what3words.com and in the what3words mobile apps.
96
127
 
128
+ *Single and Multilingual Variants*
129
+
130
+ AutoSuggest is provided via 2 variant resources; single language and multilingual.
131
+
132
+ The single language `standardblend` method requires a language to be specified.
133
+
134
+ The multilingual `standardblend_ml` method requires a language to be specified. This will ensure that the standardblend-ml resource will look for suggestions in this language, in addition to any other languages that yield relevant suggestions.
135
+
97
136
  see https://docs.what3words.com/api/v2/#standardblend for detailed information
98
137
 
99
138
  Gets blends in italian for this address
100
139
 
140
+ ```ruby
101
141
  what3words.standardblend "trovò.calore.perder", "it"
102
142
  # => {:blends=>[{:country=>"ma", :words=>"trovò.calore.perdere", :rank=>1, :language=>"it", :geometry=>{:lng=>-6.665638, :lat=>34.318065}, :place=>"Kenitra, Gharb-Chrarda-Beni Hssen"}, {:country=>"ca", :words=>"trovò.calore.perderò", :rank=>2, :language=>"it", :geometry=>{:lng=>-65.036149, :lat=>45.846472}, :place=>"Salisbury, New Brunswick"}, {:country=>"ve", :words=>"trovò.calore.prede", :rank=>3, :language=>"it", :geometry=>{:lng=>-70.280645, :lat=>7.24527}, :place=>"Guasdualito, Apure"}], :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
143
+ ```
144
+
145
+ ```ruby
146
+ what3words.standardblend_ml "trovò.calore.perder", "it"
147
+ ```
103
148
 
104
- Supported keyword params for `standardblend` call:
149
+ Supported keyword params for `standardblend` and `standardblend_ml` call:
105
150
  * `format` Return data format type; can be one of json (the default), geojson or xml
106
151
  * `display` Return display type; can be one of full (the default) or terse
107
152
 
@@ -112,8 +157,10 @@ see https://docs.what3words.com/api/v2/#grid for detailed information
112
157
 
113
158
  Gets grid for these bounding box northeast 52.208867,0.117540, southwest 52.207988,0.116126
114
159
 
160
+ ```ruby
115
161
  what3words.grid "52.208867,0.117540,52.207988,0.116126"
116
162
  # => {:lines=>[{:start=>{:lng=>0.11612600000001, :lat=>52.208009918068}, :end=>{:lng=>0.11753999999999, :lat=>52.208009918068}}, ___...___ , :end=>{:lng=>0.11752023935234, :lat=>52.208867}}], :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
163
+ ```
117
164
 
118
165
  Supported keyword params for `grid` call:
119
166
  * `format` Return data format type; can be one of json (the default), geojson or xml
@@ -122,20 +169,14 @@ Supported keyword params for `grid` call:
122
169
  ### Get Languages
123
170
  Get list of available 3 word languages
124
171
 
172
+ ```ruby
125
173
  what3words.languages
126
- # => {:languages=>[{:name=>"German", :native_name=>"Deutsch", :code=>"de"}, {:name=>"Italian", :native_name=>"Italiano", :code=>"it"}, {:name=>"Turkish", :native_name=>"Türkçe", :code=>"tr"}, {:name=>"Portuguese", :native_name=>"Português", :code=>"pt"}, {:name=>"French", :native_name=>"français, langue française", :code=>"fr"}, {:name=>"Swedish", :native_name=>"svenska", :code=>"sv"}, {:name=>"English", :native_name=>"English", :code=>"en"}, {:name=>"Russian", :native_name=>"русский язык", :code=>"ru"}, {:name=>"Spanish", :native_name=>"español", :code=>"es"}, {:name=>"Swahili", :native_name=>"Kiswahili", :code=>"sw"}], :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
174
+ # => {{:languages=>[{:code=>"de", :name=>"German", :native_name=>"Deutsch"}, {:code=>"mn", :name=>"Mongolian", :native_name=>"Mонгол"}, {:code=>"fi", :name=>"Finnish", :native_name=>"Suomi"}, {:code=>"ru", :name=>"Russian", :native_name=>"Русский"}, {:code=>"sv", :name=>"Swedish", :native_name=>"Svenska"}, {:code=>"pt", :name=>"Portuguese", :native_name=>"Português"}, {:code=>"sw", :name=>"Swahili", :native_name=>"Kiswahili"}, {:code=>"en", :name=>"English", :native_name=>"English"}, {:code=>"it", :name=>"Italian", :native_name=>"Italiano"}, {:code=>"fr", :name=>"French", :native_name=>"Français"}, {:code=>"es", :name=>"Spanish", :native_name=>"Español"}, {:code=>"ar", :name=>"Arabic", :native_name=>"العربية"}, {:code=>"pl", :name=>"Polish", :native_name=>"Polski"}, {:code=>"tr", :name=>"Turkish", :native_name=>"Türkçe"}], :status=>{:status=>200, :reason=>"OK"}, :thanks=>"Thanks from all of us at index.home.raft for using a what3words API"}
175
+ ```
127
176
 
128
177
  See http://developer.what3words.com for the original API call documentation
129
178
 
130
- ## Contributing
131
-
132
- 1. Fork it ( http://github.com/what3words/w3w-ruby-wrapper and click "Fork" )
133
- 2. Create your feature branch (`git checkout -b my-new-feature`)
134
- 3. Commit your changes (`git commit -am 'Add some feature'`)
135
- 4. Push to the branch (`git push origin my-new-feature`)
136
- 5. Create new Pull Request
137
-
138
- ### Testing
179
+ ## Testing
139
180
 
140
181
  * Prerequisite : we are using [bundler](https://rubygems.org/gems/bundler) `$ gem install bundler`
141
182
 
@@ -147,4 +188,32 @@ $ export W3W_API_KEY=<Secret API Key>
147
188
  * on you cloned folder
148
189
  1. `$ cd w3w-ruby-wrapper`
149
190
  1. `$ bundle update`
150
- 1. `$ rake spec`
191
+ 1. `$ rake rubocop spec`
192
+
193
+ ## Issues
194
+
195
+ Find a bug or want to request a new feature? Please let us know by submitting an issue.
196
+
197
+ ## Contributing
198
+ Anyone and everyone is welcome to contribute.
199
+
200
+ 1. Fork it (http://github.com/what3words/w3w-ruby-wrapper and click "Fork")
201
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
202
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
203
+ 4. Push to the branch (`git push origin my-new-feature`)
204
+ 5. Create new Pull Request
205
+
206
+ # Revision History
207
+
208
+ * `v2.1.1` 22/05/17 - Update gemspec to use rubocop 0.48.1, and fixes spec accordingly
209
+ * `v2.1.0` 28/03/17 - Added multilingual version of `autosuggest` and `standardblend`
210
+ * `v2.0.4` 27/03/17 - Updated README with `languages` method result updated from live result
211
+ * `v2.0.3` 24/10/16 - Fixed `display` in `assemble_common_request_params`
212
+ * `v2.0.2` 10/06/16 - Added travis-ci builds
213
+ * `v2.0.0` 10/06/16 - Updated wrapper to use what3words API v2
214
+
215
+ ## Licensing
216
+
217
+ The MIT License (MIT)
218
+
219
+ A copy of the license is available in the repository's [license](LICENSE.txt) file.
data/Rakefile CHANGED
@@ -1,9 +1,12 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
 
3
3
  begin
4
+ require 'rubocop/rake_task'
5
+ RuboCop::RakeTask.new(:rubocop) do |t|
6
+ t.options = ['--display-cop-names']
7
+ end
4
8
  require 'rspec/core/rake_task'
5
-
6
9
  RSpec::Core::RakeTask.new(:spec)
7
- rescue LoadError
8
- # ignore
10
+ rescue LoadError => e
11
+ print e
9
12
  end
@@ -1,27 +1,30 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "rest-client"
3
+ require 'rest-client'
4
4
 
5
5
  module What3Words
6
- class API
7
-
6
+ # Document the responsibility of the class
7
+ #
8
+ class API # rubocop:disable Metrics/ClassLength
8
9
  class Error < RuntimeError; end
9
10
  class ResponseError < Error; end
10
11
  class WordError < Error; end
11
12
 
12
13
  REGEX_3_WORD_ADDRESS = /^\p{L}+\.\p{L}+\.\p{L}+$/u
13
- REGEX_STRICT = /^\p{L}{4,}+\.\p{L}{4,}+\.\p{L}{4,}+$/u
14
+ REGEX_STRICT = /^\p{L}{3,}+\.\p{L}{3,}+\.\p{L}{3,}+$/u
14
15
 
15
- BASE_URL = "https://api.what3words.com/v2/"
16
+ BASE_URL = 'https://api.what3words.com/v2/'.freeze
16
17
 
17
18
  ENDPOINTS = {
18
- :forward => "forward",
19
- :reverse => "reverse",
20
- :languages => "languages",
21
- :autosuggest => "autosuggest",
22
- :standardblend => "standardblend",
23
- :grid => "grid"
24
- }
19
+ forward: 'forward',
20
+ reverse: 'reverse',
21
+ languages: 'languages',
22
+ autosuggest: 'autosuggest',
23
+ standardblend: 'standardblend',
24
+ autosuggest_ml: 'autosuggest-ml',
25
+ standardblend_ml: 'standardblend-ml',
26
+ grid: 'grid'
27
+ }.freeze
25
28
 
26
29
  def initialize(params)
27
30
  @key = params.fetch(:key)
@@ -48,26 +51,42 @@ module What3Words
48
51
  response
49
52
  end
50
53
 
51
- def languages()
54
+ def languages
52
55
  request_params = assemble_common_request_params({})
53
56
  response = request! :languages, request_params
54
57
  response
55
58
  end
56
59
 
57
60
  def autosuggest(addr, lang, focus = {}, clip = {}, params = {})
58
- request_params = assemble_autosuggest_request_params(addr, lang, focus, clip, params)
61
+ request_params = assemble_autosuggest_request_params(addr, lang, focus,
62
+ clip, params)
59
63
  response = request! :autosuggest, request_params
60
64
  response
61
65
  end
62
66
 
67
+ def autosuggest_ml(addr, lang, focus = {}, clip = {}, params = {})
68
+ request_params = assemble_autosuggest_request_params(addr, lang, focus,
69
+ clip, params)
70
+ response = request! :autosuggest_ml, request_params
71
+ response
72
+ end
73
+
63
74
  def standardblend(addr, lang, focus = {}, params = {})
64
- request_params = assemble_standardblend_request_params(addr, lang, focus, params)
75
+ request_params = assemble_standardblend_request_params(addr, lang, focus,
76
+ params)
65
77
  response = request! :standardblend, request_params
66
78
  response
67
79
  end
68
80
 
81
+ def standardblend_ml(addr, lang, focus = {}, params = {})
82
+ request_params = assemble_standardblend_request_params(addr, lang, focus,
83
+ params)
84
+ response = request! :standardblend_ml, request_params
85
+ response
86
+ end
87
+
69
88
  def assemble_common_request_params(params)
70
- h = {:key => key}
89
+ h = { key: key }
71
90
  h[:lang] = params[:lang] if params[:lang]
72
91
  h[:format] = params[:format] if params[:format]
73
92
  h[:display] = params[:display] if params[:display]
@@ -76,40 +95,36 @@ module What3Words
76
95
  private :assemble_common_request_params
77
96
 
78
97
  def assemble_forward_request_params(words_string, params)
79
- h = {:addr => words_string}
98
+ h = { addr: words_string }
80
99
  h.merge(assemble_common_request_params(params))
81
100
  end
82
101
  private :assemble_forward_request_params
83
102
 
84
103
  def assemble_grid_request_params(bbox, params)
85
- h = {:bbox => bbox}
104
+ h = { bbox: bbox }
86
105
  h.merge(assemble_common_request_params(params))
87
106
  end
88
107
  private :assemble_grid_request_params
89
108
 
90
109
  def assemble_reverse_request_params(position, params)
91
- h = {:coords => position.join(",")}
110
+ h = { coords: position.join(',') }
92
111
  h.merge(assemble_common_request_params(params))
93
112
  end
94
113
  private :assemble_reverse_request_params
95
114
 
96
115
  def assemble_autosuggest_request_params(addr, lang, focus, clip, params)
97
- h = {:addr => addr}
116
+ h = { addr: addr }
98
117
  h[:lang] = lang
99
- if focus.respond_to? :join
100
- h[:focus] = focus.join(",")
101
- end
118
+ h[:focus] = focus.join(',') if focus.respond_to? :join
102
119
  h[:clip] = clip if clip.respond_to? :to_str
103
120
  h.merge(assemble_common_request_params(params))
104
121
  end
105
122
  private :assemble_autosuggest_request_params
106
123
 
107
124
  def assemble_standardblend_request_params(addr, lang, focus, params)
108
- h = {:addr => addr}
125
+ h = { addr: addr }
109
126
  h[:lang] = lang
110
- if focus.respond_to? :join
111
- h[:focus] = focus.join(",")
112
- end
127
+ h[:focus] = focus.join(',') if focus.respond_to? :join
113
128
  h.merge(assemble_common_request_params(params))
114
129
  end
115
130
  private :assemble_standardblend_request_params
@@ -122,11 +137,11 @@ module What3Words
122
137
  rescue => e
123
138
  response = e.response
124
139
  end
125
- # puts "#{response.to_str}"
126
- # puts "Response status: #{response.code}"
140
+ # puts '#{response.to_str}'
141
+ # puts 'Response status: #{response.code}'
127
142
  response = JSON.parse(response.body)
128
- if response["code"].to_s.strip != ""
129
- raise ResponseError, "#{response["code"]}: #{response["message"]}"
143
+ if response['code'].to_s.strip != ''
144
+ raise ResponseError, "#{response['code']}: #{response['message']}"
130
145
  end
131
146
  deep_symbolize_keys(response)
132
147
  end
@@ -136,7 +151,7 @@ module What3Words
136
151
  if words.respond_to? :to_str
137
152
  w = words
138
153
  elsif words.respond_to? :join
139
- w = words.join(".")
154
+ w = words.join('.')
140
155
  else
141
156
  raise Error, "Cannot get words string for #{words.inspect}"
142
157
  end
@@ -148,15 +163,17 @@ module What3Words
148
163
  unless REGEX_3_WORD_ADDRESS.match(words)
149
164
  raise WordError, "#{words} is not a valid 3 word address"
150
165
  end
151
- return words
166
+ words
152
167
  end
153
168
  private :check_words
154
169
 
155
170
  def deep_symbolize_keys(i)
156
- if i.kind_of? Hash
171
+ if i.is_a? Hash
157
172
  ni = {}
158
- i.each {|k,v| ni[k.respond_to?(:to_sym) ? k.to_sym : k] = deep_symbolize_keys(v) }
159
- elsif i.kind_of? Array
173
+ # rubocop:disable Metrics/LineLength
174
+ i.each { |k, v| ni[k.respond_to?(:to_sym) ? k.to_sym : k] = deep_symbolize_keys(v) }
175
+ # rubocop:enable Metrics/LineLength
176
+ elsif i.is_a? Array
160
177
  ni = i.map(&method(:deep_symbolize_keys))
161
178
  else
162
179
  ni = i
@@ -165,14 +182,13 @@ module What3Words
165
182
  ni
166
183
  end
167
184
 
168
- def base_url()
185
+ def base_url
169
186
  BASE_URL
170
187
  end
171
188
  private :base_url
172
189
 
173
190
  def endpoint(name)
174
- return base_url() + ENDPOINTS.fetch(name)
191
+ base_url + ENDPOINTS.fetch(name)
175
192
  end
176
-
177
193
  end
178
194
  end
@@ -1,3 +1,3 @@
1
1
  module What3Words
2
- VERSION = "2.0.4"
2
+ VERSION = '2.1.1'.freeze
3
3
  end
data/lib/what3words.rb CHANGED
@@ -1,4 +1,4 @@
1
- module What3Words
1
+ module What3Words #:nodoc: don't document this
2
2
  end
3
3
 
4
- require "what3words/api"
4
+ require 'what3words/api'
@@ -1,115 +1,150 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "spec_helper"
4
-
5
- describe What3Words::API, "integration", :integration => true do
6
-
3
+ require 'spec_helper'
4
+ # rubocop:disable Metrics/LineLength
5
+ describe What3Words::API, 'integration', integration: true do # rubocop:disable Metrics/BlockLength
6
+ # rubocop:enable Metrics/LineLength
7
7
  before(:all) do
8
8
  WebMock.allow_net_connect!
9
9
  end
10
10
 
11
- let(:api_key) { ENV["W3W_API_KEY"] }
11
+ let(:api_key) { ENV['W3W_API_KEY'] }
12
12
 
13
- let(:w3w) { described_class.new(:key => api_key) }
13
+ let(:w3w) { described_class.new(key: api_key) }
14
14
 
15
- it "returns errors from API" do
16
- badw3w = described_class.new(:key => "")
17
- expect { badw3w.forward ["prom", "cape", "pump"] }.
18
- to raise_error described_class::ResponseError
15
+ it 'returns errors from API' do
16
+ badw3w = described_class.new(key: '')
17
+ expect { badw3w.forward 'prom.cape.pump' }
18
+ .to raise_error described_class::ResponseError
19
19
  end
20
20
 
21
- describe "getting position" do
22
-
23
- it "works with string of 3 words separated by '.'" do
24
- result = w3w.forward "prom.cape.pump"
21
+ describe 'getting position' do
22
+ it 'works with string of 3 words separated by \'.\'' do
23
+ result = w3w.forward 'prom.cape.pump'
25
24
  expect(result).to include(
26
- :words => "prom.cape.pump",
27
- :language => "en"
25
+ words: 'prom.cape.pump',
26
+ language: 'en'
28
27
  )
29
28
  expect(result[:geometry]).to include(
30
- :lat => 51.484463,
31
- :lng => -0.195405
29
+ lat: 51.484463,
30
+ lng: -0.195405
32
31
  )
33
32
  end
34
33
 
35
- it "sends lang parameter for 3 words" do
36
- result = w3w.forward ["prom", "cape", "pump"], :lang => "fr"
34
+ it 'sends lang parameter for 3 words' do
35
+ result = w3w.forward 'prom.cape.pump', lang: 'fr'
37
36
  expect(result).to include(
38
- :words => "concevoir.époque.amasser",
39
- :language => "fr"
37
+ words: 'concevoir.époque.amasser',
38
+ language: 'fr'
40
39
  )
41
40
  end
42
41
 
43
- it "checks 3 words format matches standard regex" do
44
- expect { w3w.forward "1.cape.pump" }.
45
- to raise_error described_class::WordError
42
+ it 'checks 3 words format matches standard regex' do
43
+ expect { w3w.forward '1.cape.pump' }
44
+ .to raise_error described_class::WordError
46
45
  end
47
-
48
46
  end
49
47
 
50
- describe "gets 3 words" do
51
- it "from position" do
48
+ describe 'gets 3 words' do
49
+ it 'from position' do
52
50
  result = w3w.reverse [29.567041, 106.587875]
53
51
  expect(result).to include(
54
- :words => "disclose.strain.redefined",
55
- :language => "en"
52
+ words: 'disclose.strain.redefined',
53
+ language: 'en'
56
54
  )
57
55
  end
58
56
 
59
- it "from position in fr" do
60
- result = w3w.reverse [29.567041, 106.587875], :lang => "fr"
57
+ it 'from position in fr' do
58
+ result = w3w.reverse [29.567041, 106.587875], lang: 'fr'
61
59
  expect(result).to include(
62
- :words => "courgette.rabotons.infrason",
63
- :language => "fr"
60
+ words: 'courgette.rabotons.infrason',
61
+ language: 'fr'
64
62
  )
65
63
  end
66
-
67
64
  end
68
- describe "autosuggest" do
69
- it "simple addr" do
65
+ describe 'autosuggest' do
66
+ it 'simple addr' do
70
67
  # result =
71
- w3w.autosuggest "trop.caler.perdre", "fr"
68
+ w3w.autosuggest 'trop.caler.perdre', 'fr'
72
69
  end
73
70
 
74
- it "with focus" do
71
+ it 'with focus' do
75
72
  # result =
76
- w3w.autosuggest "disclose.strain.redefin", "en", [29.567041, 106.587875]
73
+ w3w.autosuggest 'disclose.strain.redefin', 'en', [29.567041, 106.587875]
77
74
  end
78
75
 
79
- it "with clipping radius around focus" do
76
+ it 'with clipping radius around focus' do
80
77
  # result =
81
- w3w.autosuggest "disclose.strain.redefin", "en", [29.567041, 106.587875], "focus(10)"
78
+ w3w.autosuggest 'disclose.strain.redefin', 'en', [29.567041, 106.587875],
79
+ 'focus(10)'
82
80
  end
83
81
 
82
+ it 'arabic addr' do
83
+ # result =
84
+ w3w.autosuggest 'مربية.الصباح.المده', 'ar'
85
+ end
86
+ end
87
+
88
+ describe 'autosuggest-ml' do
89
+ it '3 langs (result prefered de)' do
90
+ # result =
91
+ w3w.autosuggest_ml 'geschaft.planter.carciofi', 'de'
92
+ end
93
+ it '3 langs (result prefered fr)' do
94
+ # result =
95
+ w3w.autosuggest_ml 'geschaft.planter.carciofi', 'fr'
96
+ end
97
+ it '3 langs (result prefered it)' do
98
+ # result =
99
+ w3w.autosuggest_ml 'geschaft.planter.carciofi', 'it'
100
+ end
84
101
  end
85
- describe "standardblend" do
86
- it "simple addr" do
102
+
103
+ describe 'standardblend' do
104
+ it 'simple addr' do
87
105
  # result =
88
- w3w.standardblend "trop.caler.perdre", "fr"
106
+ w3w.standardblend 'trop.caler.perdre', 'fr'
89
107
  end
90
108
 
91
- it "with focus" do
109
+ it 'with focus' do
92
110
  # result =
93
- w3w.standardblend "disclose.strain.redefin", "en", [29.567041, 106.587875]
111
+ w3w.standardblend 'disclose.strain.redefin', 'en', [29.567041, 106.587875]
94
112
  end
95
113
  end
96
- describe "grid" do
97
- it "string input" do
114
+
115
+ describe 'standardblend-ml' do
116
+ it '3 langs (result prefered de)' do
98
117
  # result =
99
- w3w.grid "52.208867,0.117540,52.207988,0.116126"
118
+ w3w.standardblend_ml 'geschaft.planter.carciofi', 'de'
119
+ end
120
+ it '3 langs (result prefered fr)' do
121
+ # result =
122
+ w3w.standardblend_ml 'geschaft.planter.carciofi', 'fr'
123
+ end
124
+ it '3 langs (result prefered it)' do
125
+ # result =
126
+ w3w.standardblend_ml 'geschaft.planter.carciofi', 'it'
127
+ end
128
+ end
129
+
130
+ describe 'grid' do
131
+ it 'string input' do
132
+ # result =
133
+ w3w.grid '52.208867,0.117540,52.207988,0.116126'
100
134
  end
101
135
  end
102
- describe "languages" do
103
- it "gets all languages" do
136
+
137
+ describe 'languages' do
138
+ it 'gets all languages' do
104
139
  # result =
105
140
  w3w.languages
106
141
  end
107
142
  end
108
143
 
109
- describe "technical" do
110
- it "'s deep_symbolize_keys helper works" do
111
- expect(w3w.deep_symbolize_keys("foo" => {"bar" => true})).
112
- to eq(:foo => {:bar => true})
144
+ describe 'technical' do
145
+ it '\'s deep_symbolize_keys helper works' do
146
+ expect(w3w.deep_symbolize_keys('foo' => { 'bar' => true }))
147
+ .to eq(foo: { bar: true })
113
148
  end
114
149
  end
115
150
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
- require "bundler/setup"
1
+ require 'bundler/setup'
2
2
 
3
3
  Bundler.setup
4
4
 
5
- require "webmock/rspec"
5
+ require 'webmock/rspec'
6
6
 
7
- require "what3words"
7
+ require 'what3words'
data/what3words.gemspec CHANGED
@@ -2,26 +2,27 @@
2
2
 
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "what3words/version"
5
+ require 'what3words/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "what3words"
8
+ spec.name = 'what3words'
9
9
  spec.version = What3Words::VERSION
10
- spec.authors = ["what3words"]
11
- spec.email = ["development@what3words.com"]
12
- spec.summary = "what3words API wrapper in Ruby"
13
- spec.homepage = "http://rubygems.org/gems/what3words"
14
- spec.license = "MIT"
10
+ spec.authors = ['what3words']
11
+ spec.email = ['development@what3words.com']
12
+ spec.summary = 'what3words API wrapper in Ruby'
13
+ spec.homepage = 'http://rubygems.org/gems/what3words'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^spec/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency "rest-client", "~> 1.8"
21
+ spec.add_dependency 'rest-client', '~> 1.8'
22
22
 
23
- spec.add_development_dependency "bundler", ">= 1.7.9"
24
- spec.add_development_dependency "rake", "~> 11.1"
25
- spec.add_development_dependency "rspec", "~> 3.4"
26
- spec.add_development_dependency "webmock", "~> 2.0"
23
+ spec.add_development_dependency 'bundler', '>= 1.7.9'
24
+ spec.add_development_dependency 'rake', '~> 11.1'
25
+ spec.add_development_dependency 'rspec', '~> 3.4'
26
+ spec.add_development_dependency 'webmock', '~> 2.0'
27
+ spec.add_development_dependency 'rubocop', '~> 0.48.1'
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: what3words
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - what3words
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-27 00:00:00.000000000 Z
11
+ date: 2017-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.48.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.48.1
83
97
  description:
84
98
  email:
85
99
  - development@what3words.com