acts_as_geocodable 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/acts_as_geocodable.gemspec +5 -4
- data/lib/acts_as_geocodable.rb +14 -4
- data/lib/acts_as_geocodable/geocode.rb +4 -0
- data/test/acts_as_geocodable_test.rb +26 -3
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.2
|
data/acts_as_geocodable.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{acts_as_geocodable}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Morrison", "Brandon Keepers"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-02-04}
|
13
13
|
s.description = %q{Simple geocoding for Rails ActiveRecord models. See the README for more details.}
|
14
14
|
s.email = %q{info@collectiveidea.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -67,3 +67,4 @@ Gem::Specification.new do |s|
|
|
67
67
|
else
|
68
68
|
end
|
69
69
|
end
|
70
|
+
|
data/lib/acts_as_geocodable.rb
CHANGED
@@ -139,8 +139,16 @@ module CollectiveIdea #:nodoc:
|
|
139
139
|
#
|
140
140
|
# Options:
|
141
141
|
# * <tt>:message</tt>: Added to errors base (Default: Address could not be geocoded.)
|
142
|
-
# * <tt>:allow_nil</tt>: If all the address attributes are blank, then don't try to
|
143
|
-
#
|
142
|
+
# * <tt>:allow_nil</tt>: If all the address attributes are blank, then don't try to
|
143
|
+
# validate the geocode (Default: false)
|
144
|
+
# * <tt>:precision</tt>: Require a minimum geocoding precision
|
145
|
+
#
|
146
|
+
# validates_as_geocodable also takes a block that you can use to performa additional
|
147
|
+
# checks on the geocode. If this block returns false, then validation will fail.
|
148
|
+
#
|
149
|
+
# validates_as_geocodable do |geocode|
|
150
|
+
# geocode.country == "US"
|
151
|
+
# end
|
144
152
|
#
|
145
153
|
def validates_as_geocodable(options = {})
|
146
154
|
options = options.reverse_merge :message => "Address could not be geocoded.", :allow_nil => false
|
@@ -148,13 +156,15 @@ module CollectiveIdea #:nodoc:
|
|
148
156
|
is_blank = model.to_location.attributes.except(:precision).all?(&:blank?)
|
149
157
|
unless options[:allow_nil] && is_blank
|
150
158
|
geocode = model.send :attach_geocode
|
151
|
-
if !geocode ||
|
159
|
+
if !geocode ||
|
160
|
+
(options[:precision] && geocode.precision < options[:precision]) ||
|
161
|
+
(block_given? && yield(geocode) == false)
|
152
162
|
model.errors.add_to_base options[:message]
|
153
163
|
end
|
154
164
|
end
|
155
165
|
end
|
156
166
|
end
|
157
|
-
|
167
|
+
|
158
168
|
private
|
159
169
|
|
160
170
|
def add_distance_to_select!(origin, options)
|
@@ -184,15 +184,21 @@ class ActsAsGeocodableTest < ActiveSupport::TestCase
|
|
184
184
|
assert_equal "Address could not be geocoded.", @vacation.errors.on(:base)
|
185
185
|
end
|
186
186
|
|
187
|
-
should "be valid with
|
187
|
+
should "be valid with the same precision" do
|
188
188
|
@model.validates_as_geocodable :precision => :street
|
189
189
|
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:precision => 'street'))
|
190
190
|
assert @vacation.valid?
|
191
191
|
end
|
192
192
|
|
193
|
-
should "be
|
193
|
+
should "be valid with a higher precision" do
|
194
|
+
@model.validates_as_geocodable :precision => :region
|
195
|
+
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:precision => 'street'))
|
196
|
+
assert @vacation.valid?
|
197
|
+
end
|
198
|
+
|
199
|
+
should "be invalid with a lower precision" do
|
194
200
|
@model.validates_as_geocodable :precision => :street
|
195
|
-
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:precision => '
|
201
|
+
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:precision => 'region'))
|
196
202
|
assert !@vacation.valid?
|
197
203
|
assert_equal "Address could not be geocoded.", @vacation.errors.on(:base)
|
198
204
|
end
|
@@ -201,6 +207,23 @@ class ActsAsGeocodableTest < ActiveSupport::TestCase
|
|
201
207
|
@model.validates_as_geocodable :allow_nil => true
|
202
208
|
assert @model.new.valid?
|
203
209
|
end
|
210
|
+
|
211
|
+
should "be invalid if block returns false" do
|
212
|
+
@model.validates_as_geocodable(:allow_nil => false) do |geocode|
|
213
|
+
["USA", "US"].include?(geocode.country)
|
214
|
+
end
|
215
|
+
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:country => 'CA'))
|
216
|
+
assert !@vacation.valid?
|
217
|
+
end
|
218
|
+
|
219
|
+
should "be valid if block returns true" do
|
220
|
+
@model.validates_as_geocodable(:allow_nil => false) do |geocode|
|
221
|
+
["USA", "US"].include?(geocode.country)
|
222
|
+
end
|
223
|
+
Geocode.geocoder.expects(:locate).returns(Graticule::Location.new(:country => 'US'))
|
224
|
+
|
225
|
+
assert @vacation.valid?
|
226
|
+
end
|
204
227
|
end
|
205
228
|
|
206
229
|
context "find with origin" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_geocodable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Morrison
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2010-02-04 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|