nominatim 0.0.5 → 0.0.6
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/README.md +23 -0
- data/lib/nominatim/client.rb +8 -1
- data/lib/nominatim/configuration.rb +8 -0
- data/lib/nominatim/search.rb +20 -1
- data/lib/nominatim/version.rb +1 -1
- data/spec/nominatim/search_spec.rb +45 -0
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2182f83ea77dc36300f6c808dae389e7c82c9ffe
|
4
|
+
data.tar.gz: 997ca5a9abad9eac2bce987ff9df7b2934f3767d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6ab7f80d3c9d04cc68b33ff1b2ddf57462dd966f4f84ade8d2d1098b6bd3d26bd916ef7f56be31e32217dc6353d99337fd18765d0e9e8565e4b11badf0750bf
|
7
|
+
data.tar.gz: 597eccdbdaf8a020716043d5e7142d25e788b4109b684c8f77c653736b6676cb0c474ff7151d6b0b1a41f7f548dafc8020b0c7cd2e8614b59f194cb781b2a682
|
data/README.md
CHANGED
@@ -34,6 +34,29 @@ end
|
|
34
34
|
puts "Found #{places.count} places."
|
35
35
|
```
|
36
36
|
|
37
|
+
### Structured requests
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
places = Nominatim.search.city('San Antonio').country('Mexico').limit(10).address_details(true)
|
41
|
+
|
42
|
+
for place in places
|
43
|
+
puts "#{place.display_name} (#{place.type})"
|
44
|
+
end
|
45
|
+
|
46
|
+
puts "Found #{places.count} places."
|
47
|
+
```
|
48
|
+
|
49
|
+
Nominatim::Search has the following methods to craft structures requests:
|
50
|
+
|
51
|
+
- street: accepts house number and street name as parameters
|
52
|
+
- city
|
53
|
+
- county
|
54
|
+
- state
|
55
|
+
- country
|
56
|
+
- postalcode
|
57
|
+
|
58
|
+
See http://wiki.openstreetmap.org/wiki/Nominatim#Parameters
|
59
|
+
|
37
60
|
## Configuration
|
38
61
|
|
39
62
|
```ruby
|
data/lib/nominatim/client.rb
CHANGED
@@ -16,13 +16,20 @@ module Nominatim
|
|
16
16
|
def connection
|
17
17
|
return @connection if defined? @connection
|
18
18
|
|
19
|
-
|
19
|
+
options = {
|
20
|
+
request: {
|
21
|
+
timeout: Nominatim.config.timeout
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
@connection = Faraday.new Nominatim.config.endpoint, options do |builder|
|
20
26
|
builder.use Nominatim::Response::ParseJson
|
21
27
|
builder.adapter Faraday.default_adapter
|
22
28
|
end
|
23
29
|
|
24
30
|
@connection.params[:format] = 'json'
|
25
31
|
@connection.params[:email] = Nominatim.config.email if Nominatim.config.email
|
32
|
+
@connection.params[:key] = Nominatim.config.key if Nominatim.config.key
|
26
33
|
|
27
34
|
@connection.headers[:user_agent] = Nominatim.config.user_agent
|
28
35
|
@connection.headers[:"accept-language"] = Nominatim.config.accept_language
|
@@ -3,20 +3,26 @@ module Nominatim
|
|
3
3
|
|
4
4
|
DEFAULT_ENDPOINT = 'http://nominatim.openstreetmap.org'
|
5
5
|
|
6
|
+
DEFAULT_KEY = nil
|
7
|
+
|
6
8
|
DEFAULT_USER_AGENT = "Nominatim Ruby Gem #{Nominatim::VERSION}"
|
7
9
|
|
8
10
|
DEFAULT_EMAIL = nil
|
9
11
|
|
10
12
|
DEFAULT_LANGUAGE = 'en'
|
11
13
|
|
14
|
+
DEFAULT_TIMEOUT = nil
|
15
|
+
|
12
16
|
DEFAULT_SEARCH_URL = 'search'
|
13
17
|
DEFAULT_REVERSE_URL = 'reverse'
|
14
18
|
|
15
19
|
VALID_OPTIONS_KEYS = [
|
16
20
|
:endpoint,
|
21
|
+
:key,
|
17
22
|
:user_agent,
|
18
23
|
:email,
|
19
24
|
:accept_language,
|
25
|
+
:timeout,
|
20
26
|
:search_url,
|
21
27
|
:reverse_url
|
22
28
|
]
|
@@ -34,9 +40,11 @@ module Nominatim
|
|
34
40
|
|
35
41
|
def reset!
|
36
42
|
self.endpoint = DEFAULT_ENDPOINT
|
43
|
+
self.key = DEFAULT_KEY
|
37
44
|
self.user_agent = DEFAULT_USER_AGENT
|
38
45
|
self.email = DEFAULT_EMAIL
|
39
46
|
self.accept_language = DEFAULT_LANGUAGE
|
47
|
+
self.timeout = DEFAULT_TIMEOUT
|
40
48
|
self.search_url = DEFAULT_SEARCH_URL
|
41
49
|
self.reverse_url = DEFAULT_REVERSE_URL
|
42
50
|
end
|
data/lib/nominatim/search.rb
CHANGED
@@ -9,7 +9,26 @@ module Nominatim
|
|
9
9
|
|
10
10
|
# Iterates over the search results.
|
11
11
|
def each(&block)
|
12
|
-
|
12
|
+
@criteria.delete(:q) if (@criteria.keys & [:street, :city, :county, :state, :country, :postalcode]).count > 0
|
13
|
+
@results ||= get(Nominatim.config.search_url, @criteria).body.map! { |attrs| Nominatim::Place.new(attrs) }
|
14
|
+
@results.each(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Structured search requests
|
18
|
+
# @see https://wiki.openstreetmap.org/wiki/Nominatim
|
19
|
+
%w(city county state country postalcode).to_a.each do |criterion|
|
20
|
+
define_method(criterion) do |param|
|
21
|
+
@criteria[criterion.to_sym] = param
|
22
|
+
self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Structured street search request
|
27
|
+
#
|
28
|
+
# @see https://wiki.openstreetmap.org/wiki/Nominatim
|
29
|
+
def street housenumber, streetname
|
30
|
+
@criteria[:street] = "#{housenumber} #{streetname}"
|
31
|
+
self
|
13
32
|
end
|
14
33
|
|
15
34
|
# Query string to search for.
|
data/lib/nominatim/version.rb
CHANGED
@@ -18,10 +18,15 @@ describe Nominatim::Search do
|
|
18
18
|
|
19
19
|
let(:search) { Nominatim::Search.new.query('Los Angeles').limit(1) }
|
20
20
|
|
21
|
+
let(:structured_search){ Nominatim::Search.new.query('Text').city('Los Angeles').country('us').limit(1) }
|
22
|
+
|
21
23
|
before do
|
22
24
|
stub_get('/search').
|
23
25
|
with(query: { q: 'Los Angeles', limit: 1 }).
|
24
26
|
to_return(body: fixture('search.json'))
|
27
|
+
stub_get('/search').
|
28
|
+
with(query: { city: 'Los Angeles', country: 'us', limit: 1 }).
|
29
|
+
to_return(body: fixture('search.json'))
|
25
30
|
end
|
26
31
|
|
27
32
|
it 'iterates over the matching places' do
|
@@ -39,6 +44,12 @@ describe Nominatim::Search do
|
|
39
44
|
search.first.lat.should eq 34.0966764
|
40
45
|
search.first.lon.should eq -117.7196785
|
41
46
|
end
|
47
|
+
|
48
|
+
it 'omits q parameter from structured search' do
|
49
|
+
structured_search.first.display_name.should eq 'Los Angeles, California, United States of America'
|
50
|
+
structured_search.first.lat.should eq 34.0966764
|
51
|
+
structured_search.first.lon.should eq -117.7196785
|
52
|
+
end
|
42
53
|
end
|
43
54
|
|
44
55
|
describe '#query' do
|
@@ -67,6 +78,40 @@ describe Nominatim::Search do
|
|
67
78
|
end
|
68
79
|
end
|
69
80
|
|
81
|
+
describe '#street' do
|
82
|
+
it 'adds a street criterion' do
|
83
|
+
search.street('1000', 'street name')
|
84
|
+
search.criteria[:street].should eq "1000 street name"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
describe '#city' do
|
88
|
+
it 'adds a city criterion' do
|
89
|
+
search.city('City name')
|
90
|
+
search.criteria[:city].should eq "City name"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
describe '#county' do
|
94
|
+
it 'adds a county criterion' do
|
95
|
+
search.county('County name')
|
96
|
+
search.criteria[:county].should eq "County name"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#state' do
|
101
|
+
it 'adds a state criterion' do
|
102
|
+
search.state('State name')
|
103
|
+
search.criteria[:state].should eq "State name"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#country' do
|
108
|
+
it 'adds a country criterion' do
|
109
|
+
search.country('Country name')
|
110
|
+
search.criteria[:country].should eq "Country name"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
70
115
|
describe '#bounded' do
|
71
116
|
it 'adds a bounded criterion' do
|
72
117
|
search.bounded(true)
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nominatim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Svehla
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '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
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
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
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.10'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.10'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: webmock
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
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
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: yard
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: A Ruby wrapper for the Nominatim API.
|
@@ -115,9 +115,9 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- .gitignore
|
119
|
-
- .rspec
|
120
|
-
- .travis.yml
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".travis.yml"
|
121
121
|
- CHANGELOG.md
|
122
122
|
- Gemfile
|
123
123
|
- Guardfile
|
@@ -156,17 +156,17 @@ require_paths:
|
|
156
156
|
- lib
|
157
157
|
required_ruby_version: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- -
|
159
|
+
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: '0'
|
162
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
168
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
169
|
+
rubygems_version: 2.4.5
|
170
170
|
signing_key:
|
171
171
|
specification_version: 4
|
172
172
|
summary: A Ruby wrapper for the Nominatim API.
|