nominatim 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## v0.0.3
2
+
3
+ * Added Polygon class.
4
+
5
+ * Fixed few typos.
6
+
7
+ * Added documentation to Place class.
8
+
9
+ * Added Point class.
10
+
11
+ * Returning ids as integers instead of strings.
12
+
1
13
  ## v0.0.1
2
14
 
3
15
  * Initial release.
@@ -7,29 +7,47 @@ module Nominatim
7
7
  @attrs = attrs
8
8
  end
9
9
 
10
+ # Return display name
11
+ #
12
+ # @return [String]
10
13
  def display_name
11
14
  @display_name ||= @attrs[:display_name]
12
15
  end
13
16
 
17
+ # Return a class
18
+ #
19
+ # @return [String]
14
20
  def class
15
21
  @class ||= @attrs[:class]
16
22
  end
17
23
 
24
+ # Return a type
25
+ #
26
+ # @return [String]
18
27
  def type
19
28
  @type ||= @attrs[:type]
20
29
  end
21
30
 
31
+ # Return an address
32
+ #
33
+ # @return [Nominatim::Address]
22
34
  def address
23
- @address ||= Nominatim::Address.new(@attrs[:address]) unless @attrs[:address].nil?
35
+ @address ||= Nominatim::Address.new(@attrs[:address]) if @attrs[:address]
24
36
  end
25
37
 
38
+ # Return a latitude
39
+ #
40
+ # @return [Float]
26
41
  def lat
27
- @lat ||= @attrs[:lat] || @attrs[:latitude]
42
+ point.lat
28
43
  end
29
44
  alias latitude lat
30
45
 
46
+ # Return a longitude
47
+ #
48
+ # @return [Float]
31
49
  def lon
32
- @lon ||= @attrs[:lon] || @attrs[:longitude]
50
+ point.lon
33
51
  end
34
52
  alias longitude lon
35
53
 
@@ -38,20 +56,38 @@ module Nominatim
38
56
  end
39
57
  alias bounding_box boundingbox
40
58
 
59
+ # Return a polygon
60
+ #
61
+ # @return [Nominatim::Polygon]
41
62
  def polygonpoints
42
- @polygonpoints ||= @attrs[:polygonpoints]
63
+ @polygonpoints ||= Nominatim::Polygon.new(@attrs[:polygonpoints]) if @attrs[:polygonpoints]
43
64
  end
44
65
 
66
+ # Return a place id
67
+ #
68
+ # @return [Integer]
45
69
  def place_id
46
- @place_id ||= @attrs[:place_id]
70
+ @place_id ||= @attrs[:place_id].to_i if @attrs[:place_id]
47
71
  end
48
72
 
73
+ # Return an OSM id
74
+ #
75
+ # @return [Integer]
49
76
  def osm_id
50
- @osm_id ||= @attrs[:osm_id]
77
+ @osm_id ||= @attrs[:osm_id].to_i if @attrs[:osm_id]
51
78
  end
52
79
 
80
+ # Return an OSM type
81
+ #
82
+ # @return [String]
53
83
  def osm_type
54
84
  @osm_type ||= @attrs[:osm_type]
55
85
  end
86
+
87
+ private
88
+
89
+ def point
90
+ @point ||= Nominatim::Point.new(@attrs[:lat], @attrs[:lon])
91
+ end
56
92
  end
57
93
  end
@@ -0,0 +1,30 @@
1
+ module Nominatim
2
+ class Point
3
+ attr_reader :lat, :lon
4
+ alias latitude lat
5
+ alias longitude lon
6
+
7
+ # @param lat [Float]
8
+ # @param lon [Float]
9
+ def initialize(lat, lon)
10
+ @lat, @lon = lat.to_f, lon.to_f if lat && lon
11
+ end
12
+
13
+ # @return [Array]
14
+ def to_a
15
+ [lat, lon]
16
+ end
17
+
18
+ # Return a string representation of the point
19
+ #
20
+ # @return [String]
21
+ def to_s
22
+ to_a.to_s
23
+ end
24
+
25
+ # @return [true, false]
26
+ def ==(other)
27
+ self.to_a == other.to_a
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ module Nominatim
2
+ class Polygon
3
+ attr_reader :coordinates
4
+
5
+ # @param coordinates [Array<Array<Float, String>>]
6
+ def initialize(coordinates)
7
+ @coordinates = []
8
+ coordinates.each do |c|
9
+ @coordinates.push(Nominatim::Point.new(c[0], c[1]))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -12,7 +12,7 @@ module Nominatim
12
12
  get('/search', @criteria).body.map! { |attrs| Nominatim::Place.new(attrs) }.each(&block)
13
13
  end
14
14
 
15
- # Query string to search from.
15
+ # Query string to search for.
16
16
  #
17
17
  # @param q [String] Query string
18
18
  # @return [Nominatim::Search]
@@ -1,3 +1,3 @@
1
1
  module Nominatim
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/nominatim.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "nominatim/version"
2
2
  require "nominatim/configuration"
3
+ require "nominatim/point"
4
+ require "nominatim/polygon"
3
5
  require "nominatim/address"
4
6
  require "nominatim/place"
5
7
  require "nominatim/response/parse_json"
@@ -51,13 +51,8 @@ describe Nominatim::Place do
51
51
 
52
52
  describe '#lat' do
53
53
  it 'returns a latitude when set with lat' do
54
- place = Nominatim::Place.new(lat: '52.5487969264788')
55
- place.lat.should eq '52.5487969264788'
56
- end
57
-
58
- it 'returns a latitude when set with latitude' do
59
- place = Nominatim::Place.new(latitude: '52.5487969264788')
60
- place.lat.should eq '52.5487969264788'
54
+ place = Nominatim::Place.new(lat: '52.5487969264788', lon: '-1.81642935385411')
55
+ place.lat.should eq 52.5487969264788
61
56
  end
62
57
 
63
58
  it 'returns nil when not set' do
@@ -68,13 +63,8 @@ describe Nominatim::Place do
68
63
 
69
64
  describe '#latitude' do
70
65
  it 'returns a latitude when set with lat' do
71
- place = Nominatim::Place.new(lat: '52.5487969264788')
72
- place.latitude.should eq '52.5487969264788'
73
- end
74
-
75
- it 'returns a latitude when set with latitude' do
76
- place = Nominatim::Place.new(latitude: '52.5487969264788')
77
- place.latitude.should eq '52.5487969264788'
66
+ place = Nominatim::Place.new(lat: '52.5487969264788', lon: '-1.81642935385411')
67
+ place.latitude.should eq 52.5487969264788
78
68
  end
79
69
 
80
70
  it 'returns nil when not set' do
@@ -85,13 +75,8 @@ describe Nominatim::Place do
85
75
 
86
76
  describe '#lon' do
87
77
  it 'returns a longitude when set with lon' do
88
- place = Nominatim::Place.new(lon: '-1.81642935385411')
89
- place.lon.should eq '-1.81642935385411'
90
- end
91
-
92
- it 'returns a longitude when set with longitude' do
93
- place = Nominatim::Place.new(longitude: '-1.81642935385411')
94
- place.lon.should eq '-1.81642935385411'
78
+ place = Nominatim::Place.new(lat: '52.5487969264788', lon: '-1.81642935385411')
79
+ place.lon.should eq -1.81642935385411
95
80
  end
96
81
 
97
82
  it 'returns nil when not set' do
@@ -102,13 +87,8 @@ describe Nominatim::Place do
102
87
 
103
88
  describe '#longitude' do
104
89
  it 'returns a longitude when set with lon' do
105
- place = Nominatim::Place.new(lon: '-1.81642935385411')
106
- place.longitude.should eq '-1.81642935385411'
107
- end
108
-
109
- it 'returns a longitude when set with longitude' do
110
- place = Nominatim::Place.new(longitude: '-1.81642935385411')
111
- place.longitude.should eq '-1.81642935385411'
90
+ place = Nominatim::Place.new(lat: '52.5487969264788', lon: '-1.81642935385411')
91
+ place.longitude.should eq -1.81642935385411
112
92
  end
113
93
 
114
94
  it 'returns nil when not set' do
@@ -117,13 +97,6 @@ describe Nominatim::Place do
117
97
  end
118
98
  end
119
99
 
120
- # describe '#coordinates' do
121
- # it 'returns coordinates when set with lat and lon' do
122
- # place = Nominatim::Place.new(lat: '52.5487969264788', lon: '-1.81642935385411')
123
- # place.coordinates.should eq ['52.5487969264788', '-1.81642935385411']
124
- # end
125
- # end
126
-
127
100
  describe '#boundingbox' do
128
101
  it 'returns a boundingbox when set with boundingbox' do
129
102
  place = Nominatim::Place.new(boundingbox: ["52.5487442016602", "52.5488510131836", "-1.81651306152344", "-1.81634628772736"])
@@ -151,7 +124,7 @@ describe Nominatim::Place do
151
124
  describe '#polygonpoints' do
152
125
  it 'returns polygon points when set with polygonpoints' do
153
126
  place = Nominatim::Place.new(polygonpoints: [["-1.816513", "52.5487566"], ["-1.8164913", "52.548824"], ["-1.8164685", "52.5488213"]])
154
- place.polygonpoints.should eq [["-1.816513", "52.5487566"], ["-1.8164913", "52.548824"], ["-1.8164685", "52.5488213"]]
127
+ place.polygonpoints.should be_a Nominatim::Polygon
155
128
  end
156
129
 
157
130
  it 'returns nil when not set' do
@@ -163,7 +136,7 @@ describe Nominatim::Place do
163
136
  describe '#place_id' do
164
137
  it 'returns a place id when set with place_id' do
165
138
  place = Nominatim::Place.new(place_id: '84327444')
166
- place.place_id.should eq '84327444'
139
+ place.place_id.should eq 84327444
167
140
  end
168
141
 
169
142
  it 'returns nil when not set' do
@@ -173,9 +146,9 @@ describe Nominatim::Place do
173
146
  end
174
147
 
175
148
  describe '#osm_id' do
176
- it 'returns a osm id when set with osm_id' do
149
+ it 'returns an osm id when set with osm_id' do
177
150
  place = Nominatim::Place.new(osm_id: '90394480')
178
- place.osm_id.should eq '90394480'
151
+ place.osm_id.should eq 90394480
179
152
  end
180
153
 
181
154
  it 'returns nil when not set' do
@@ -185,7 +158,7 @@ describe Nominatim::Place do
185
158
  end
186
159
 
187
160
  describe '#osm_type' do
188
- it 'returns a osm type when set with osm_type' do
161
+ it 'returns an osm type when set with osm_type' do
189
162
  place = Nominatim::Place.new(osm_type: 'way')
190
163
  place.osm_type.should eq 'way'
191
164
  end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Nominatim::Point do
4
+ let(:point) { Nominatim::Point.new(52.5487969264788, -1.81642935385411) }
5
+
6
+ describe '#lat' do
7
+ it 'returns the latitude' do
8
+ point.lat.should eq 52.5487969264788
9
+ end
10
+ end
11
+
12
+ describe '#latitude' do
13
+ it 'returns the latitude' do
14
+ point.latitude.should eq 52.5487969264788
15
+ end
16
+ end
17
+
18
+ describe '#lon' do
19
+ it 'returns the longitude' do
20
+ point.lon.should eq -1.81642935385411
21
+ end
22
+ end
23
+
24
+ describe '#longitude' do
25
+ it 'returns the longitude' do
26
+ point.longitude.should eq -1.81642935385411
27
+ end
28
+ end
29
+
30
+ describe '#to_a' do
31
+ it 'returns an array representing the point' do
32
+ point.to_a.should eq [52.5487969264788, -1.81642935385411]
33
+ end
34
+ end
35
+
36
+ describe '#to_s' do
37
+ it 'returns a string representing the point' do
38
+ point.to_s.should eq '[52.5487969264788, -1.81642935385411]'
39
+ end
40
+ end
41
+
42
+ describe '#==' do
43
+ it 'returns true when objects coordinates are the same' do
44
+ other = Nominatim::Point.new(52.5487969264788, -1.81642935385411)
45
+ (point == other).should be_true
46
+ end
47
+
48
+ it 'returns false when objects coordinates are different' do
49
+ other = Nominatim::Point.new(-1.81642935385411, 52.5487969264788)
50
+ (point == other).should be_false
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Nominatim::Polygon do
4
+
5
+ let(:polygon) { Nominatim::Polygon.new([[-1.816513, 52.5487566], [-1.8164913, 52.548824], [-1.8164685, 52.5488213]]) }
6
+
7
+ it 'sets coordinates correctly' do
8
+ polygon.coordinates.first.lat.should eq -1.816513
9
+ polygon.coordinates.first.lon.should eq 52.5487566
10
+ end
11
+
12
+ describe '#coordinates' do
13
+ it 'retruns an array of coordinates' do
14
+ polygon.coordinates.each do |p|
15
+ p.should be_a Nominatim::Point
16
+ end
17
+ end
18
+ end
19
+ end
@@ -36,8 +36,8 @@ describe Nominatim::Search do
36
36
 
37
37
  it 'returns correct places' do
38
38
  search.first.display_name.should eq 'Los Angeles, California, United States of America'
39
- search.first.lat.should eq '34.0966764'
40
- search.first.lon.should eq '-117.7196785'
39
+ search.first.lat.should eq 34.0966764
40
+ search.first.lon.should eq -117.7196785
41
41
  end
42
42
  end
43
43
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nominatim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -144,6 +144,8 @@ files:
144
144
  - lib/nominatim/client.rb
145
145
  - lib/nominatim/configuration.rb
146
146
  - lib/nominatim/place.rb
147
+ - lib/nominatim/point.rb
148
+ - lib/nominatim/polygon.rb
147
149
  - lib/nominatim/response/parse_json.rb
148
150
  - lib/nominatim/search.rb
149
151
  - lib/nominatim/version.rb
@@ -152,6 +154,8 @@ files:
152
154
  - spec/nominatim/address_spec.rb
153
155
  - spec/nominatim/client_spec.rb
154
156
  - spec/nominatim/place_spec.rb
157
+ - spec/nominatim/point_spec.rb
158
+ - spec/nominatim/polygon_spec.rb
155
159
  - spec/nominatim/search_spec.rb
156
160
  - spec/nominatim_spec.rb
157
161
  - spec/spec_helper.rb
@@ -167,18 +171,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
171
  - - ! '>='
168
172
  - !ruby/object:Gem::Version
169
173
  version: '0'
170
- segments:
171
- - 0
172
- hash: -449881262904296726
173
174
  required_rubygems_version: !ruby/object:Gem::Requirement
174
175
  none: false
175
176
  requirements:
176
177
  - - ! '>='
177
178
  - !ruby/object:Gem::Version
178
179
  version: '0'
179
- segments:
180
- - 0
181
- hash: -449881262904296726
182
180
  requirements: []
183
181
  rubyforge_project:
184
182
  rubygems_version: 1.8.23
@@ -190,6 +188,8 @@ test_files:
190
188
  - spec/nominatim/address_spec.rb
191
189
  - spec/nominatim/client_spec.rb
192
190
  - spec/nominatim/place_spec.rb
191
+ - spec/nominatim/point_spec.rb
192
+ - spec/nominatim/polygon_spec.rb
193
193
  - spec/nominatim/search_spec.rb
194
194
  - spec/nominatim_spec.rb
195
195
  - spec/spec_helper.rb