Created
December 26, 2011 14:57
Revisions
-
rsierra created this gist
Dec 26, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,84 @@ module Gmaps4rails module ActsAsGmappable def self.included(base) base.extend ClassMethods end module InstanceMethods # This is a before_filter to trigger the geocoding and save its results def process_geocoding #to prevent geocoding each time a save is made return true if gmaps4rails_options[:check_process] == true && self.send(gmaps4rails_options[:checker]) == true #try to geocode begin coordinates = Gmaps4rails.geocode(self.send(gmaps4rails_options[:address]), gmaps4rails_options[:language], false, gmaps4rails_options[:protocol]) rescue GeocodeStatus, GeocodeInvalidQuery => e #address was invalid, add error to base. Rails.logger.warn(e) errors[gmaps4rails_options[:address]] << gmaps4rails_options[:msg] if gmaps4rails_options[:validation] rescue GeocodeNetStatus => e #connection error, No need to prevent save. Rails.logger.warn(e) #TODO add customization here? else #if no exception, save the values self.send(gmaps4rails_options[:lng_column]+"=", coordinates.first[:lng]) if self.respond_to?(gmaps4rails_options[:lng_column]+"=") self.send(gmaps4rails_options[:lat_column]+"=", coordinates.first[:lat]) if self.respond_to?(gmaps4rails_options[:lat_column]+"=") unless gmaps4rails_options[:normalized_address].nil? self.send(gmaps4rails_options[:normalized_address].to_s+"=", coordinates.first[:matched_address]) end # Call the callback method to let the user do what he wants with the data self.send(gmaps4rails_options[:callback], coordinates.first[:full_data]) unless gmaps4rails_options[:callback].nil? if gmaps4rails_options[:check_process] == true self[gmaps4rails_options[:checker]] = true end end end def to_gmaps4rails(&block) json = "[" json << Gmaps4rails.create_json(self, &block).to_s.chop.chop #removes the extra comma json << "]" end end module ClassMethods def acts_as_gmappable args = {} # disable before_filter if explicitly set unless args[:process_geocoding] == false validate :process_geocoding end #instance method containing all the options to configure the behaviour of the gem regarding the current Model define_method "gmaps4rails_options" do { :lat_column => args[:lat] || "latitude", :lng_column => args[:lng] || "longitude", :check_process => args[:check_process].nil? ? true : args[:check_process], :checker => args[:checker] || "gmaps", :msg => args[:msg] || "Address invalid", :validation => args[:validation].nil? ? true : args[:validation], :normalized_address => args[:normalized_address], :address => args[:address] || "gmaps4rails_address", :callback => args[:callback], :language => args[:language] || "en", :protocol => args[:protocol] || "http" } end include InstanceMethods end end end #ActsAsGmappable end #::ActiveRecord::Base.send :include, Gmaps4rails::ActsAsGmappable # Mongoid::Document::ClassMethods.class_eval do # include Gmaps4rails::ActsAsGmappable::Base # end This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,8 @@ require 'gmaps4rails/base' require 'gmaps4rails/extensions/array' require 'gmaps4rails/extensions/hash' require 'gmaps4rails/helper/gmaps4rails_helper' ActionController::Base.send :helper, Gmaps4railsHelper require 'lib/gmaps4rails2_hack' ActiveRecord::Base.send :include, Gmaps4rails::ActsAsGmappable