Wrap text
Report abuse
|
|
passing geocode class either a postcode string or an object.
geocodes = Geocode.new("postcode")
or Geocode.new(object_with_postcode_attribute)
(to avoid doing
object.lat = geocodes.lat
object.lng = geocodes.lng)
require 'hive/collect'
module BookerBee
class Geocode
SERVER = 'geo.localsearchmaps.com'
attr_accessor :lat, :lng, :partial
def (obj,country=:uk)
if obj.class != String
geocode(obj.postcode,country)
obj.lat = @lat
obj.lng = @lng
return obj
else
geocode(obj,country)
end
end
private
def geocode(code,country)
code.gsub!(/\s/){}
code.upcase!
if code.size > 4
code = code.split('').insert(-4,'+').join('')
else
code = (code.split('')[0..3] << '+').join('')
end
part = code.split('+').first
p code
p part
codes = {}
eval File.readlines("lib/geocodes/#{country.to_s}.txt").to_s
if codes[code]
@lat = codes[code][:lat]
@lng = codes[code][:lng]
else
page = "/?zip=#{code}&country=#{country.to_s}"
response = BookerBee::Hive::Collect.new(SERVER,page).response
if response.include?('Zoom')
parse(response)
elsif codes[part]
@lat = codes[part][:lat]
@lng = codes[part][:lng]
@partial = true
else
puts "#{code} not found"
end
end
code = part if @partial
unless codes[code]
file = File.open("lib/geocodes/#{country.to_s}.txt", "a")
file.puts "codes['#{code}'] = {:lat => '#{@lat}', :lng => '#{@lng}'}"
file.close
end
end
def parse(response,partial=false)
codes = response.match(/nt\((.*)\),/)[1].split(', ')
@lng = codes.first
@lat = codes.last
@partial = partial
end
end
end
|