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