Skip to content
Snippets Groups Projects
Commit bf2f584c authored by Bonias's avatar Bonias
Browse files

Allow to set custom lookup option for Geocoder.search, Geocoder::Query.new and...

Allow to set custom lookup option for Geocoder.search, Geocoder::Query.new and ActiveRecord::Base.(reverse_)geocoded_by

  Examples:

    class City < ActiveRecord::Base
      geocoded_by :address, :lookup => :nominatim
    end

    Geocoder.search("address", :lookup => :nominatim)
parent c7002e3a
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,8 @@ module Geocoder
:longitude => options[:longitude] || :longitude,
:geocode_block => block,
:units => options[:units],
:method => options[:method]
:method => options[:method],
:lookup => options[:lookup]
)
end
......@@ -30,8 +31,9 @@ module Geocoder
:latitude => latitude_attr,
:longitude => longitude_attr,
:reverse_block => block,
:units => options[:units],
:method => options[:method]
:units => options[:units],
:method => options[:method],
:lookup => options[:lookup]
)
end
......
......@@ -19,7 +19,8 @@ module Geocoder
:geocode_block => block,
:units => options[:units],
:method => options[:method],
:skip_index => options[:skip_index] || false
:skip_index => options[:skip_index] || false,
:lookup => options[:lookup]
)
end
......@@ -34,7 +35,8 @@ module Geocoder
:reverse_block => block,
:units => options[:units],
:method => options[:method],
:skip_index => options[:skip_index] || false
:skip_index => options[:skip_index] || false,
:lookup => options[:lookup]
)
end
......
......@@ -33,9 +33,9 @@ module Geocoder
#
def lookup
if ip_address?
name = Configuration.ip_lookup || Geocoder::Lookup.ip_services.first
name = options[:ip_lookup] || Configuration.ip_lookup || Geocoder::Lookup.ip_services.first
else
name = Configuration.lookup || Geocoder::Lookup.street_services.first
name = options[:lookup] || Configuration.lookup || Geocoder::Lookup.street_services.first
end
Lookup.get(name)
end
......
......@@ -101,7 +101,8 @@ module Geocoder
return
end
results = Geocoder.search(query)
query_options = [:lookup, :ip_lookup].inject({}){|hash, key| hash[key] = options[key] if options.has_key?(key); hash }
results = Geocoder.search(query, query_options)
# execute custom block, if specified in configuration
block_key = reverse ? :reverse_block : :geocode_block
......
......@@ -56,4 +56,16 @@ class GeocoderTest < Test::Unit::TestCase
g.reverse_geocode
assert_not_nil g.location
end
def test_geocode_with_custom_lookup_param
v = Church.new(*venue_params(:msg))
v.geocode
assert_equal Geocoder::Result::Nominatim, v.result_class
end
def test_reverse_geocode_with_custom_lookup_param
v = Temple.new(*landmark_params(:msg))
v.reverse_geocode
assert_equal Geocoder::Result::Nominatim, v.result_class
end
end
......@@ -42,4 +42,9 @@ class QueryTest < Test::Unit::TestCase
q = Geocoder::Query.new([43.1313,11.3131])
assert_equal "43.1313,11.3131", q.sanitized_text
end
def test_custom_lookup
query = Geocoder::Query.new("address", :lookup => :nominatim)
assert_equal Geocoder::Lookup::Nominatim, query.lookup.class
end
end
......@@ -251,6 +251,41 @@ class GasStation < ActiveRecord::Base
end
end
##
# Geocoded model with custom lookup.
#
class Church < ActiveRecord::Base
geocoded_by :address, :lookup => :nominatim do |obj,results|
if result = results.first
obj.result_class = result.class
end
end
def initialize(name, address)
super()
write_attribute :name, name
write_attribute :address, address
end
end
##
# Reverse geocoded model with custom lookup.
#
class Temple < ActiveRecord::Base
reverse_geocoded_by :latitude, :longitude, :lookup => :nominatim do |obj,results|
if result = results.first
obj.result_class = result.class
end
end
def initialize(name, latitude, longitude)
super()
write_attribute :name, name
write_attribute :latitude, latitude
write_attribute :longitude, longitude
end
end
class Test::Unit::TestCase
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment