nominatim 0.0.5 → 0.0.6

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: a0343ac093361647592d5b1580921badaa62a035
4
- data.tar.gz: d7bd4ca820651eab6da353e1cd1c863b60b2e264
3
+ metadata.gz: 2182f83ea77dc36300f6c808dae389e7c82c9ffe
4
+ data.tar.gz: 997ca5a9abad9eac2bce987ff9df7b2934f3767d
5
5
  SHA512:
6
- metadata.gz: 7d8c3339f2d237cb38be3751a83403a8f1e55b04ba751633ad5dbbf58a7e8b2f3fac326da0ec621f7d083c0bdaabc4bc0ae7aec6813edd84ae3027284869924f
7
- data.tar.gz: 3b24fb54932e0f89e355c382e1410465c4b29226a0607a9e84bb293480336bb4ccd6b36056e0bae513c189864de3c194608142e5f945d8023aae16c7888e44a1
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
@@ -16,13 +16,20 @@ module Nominatim
16
16
  def connection
17
17
  return @connection if defined? @connection
18
18
 
19
- @connection = Faraday.new Nominatim.config.endpoint do |builder|
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
@@ -9,7 +9,26 @@ module Nominatim
9
9
 
10
10
  # Iterates over the search results.
11
11
  def each(&block)
12
- get(Nominatim.config.search_url, @criteria).body.map! { |attrs| Nominatim::Place.new(attrs) }.each(&block)
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.
@@ -1,3 +1,3 @@
1
1
  module Nominatim
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -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.5
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: 2013-10-07 00:00:00.000000000 Z
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.0.0
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.