Sha256: 485b36c4572d1cdeda8a521867540f9f9e1d1326a8d04df48c62d78cefc5b791

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module Geokit
  module Cached
    module Geocodable

      @@cache_locations = true
      @@default_country = 'Poland'

      def self.included(base)
        base.extend(ClassMethods)
        base.class_eval do
          attr_accessor :provider
        end
      end

      def selected_country
        country || @@default_country
      end

      def complete_address
        "%s, %s" % [address, selected_country]
      end

      def cached_location_for_address
        CachedLocation.find_by_address(complete_address)
      end

      def cached_location_for_address?
        !cached_location_for_address.nil?
      end

      def cached_location
        cached_location_for_address || CachedLocation.new(:address => complete_address)
      end

      def cache_locations?
        @@cache_locations
      end

      def cache_location!
        cached_location.cache!(:lat => lat, :lng => lng, :provider => provider) if cache_locations?
      end

      def geocode_address_cached
        if cached_location_for_address?
          self.lat, self.lng, self.provider = cached_location.lat, cached_location.lng, cached_location.provider
        else
          @geo = Geokit::Geocoders::MultiGeocoder.geocode(complete_address)
          if @geo.success
            self.lat, self.lng, self.provider = @geo.lat, @geo.lng, @geo.provider
            cache_location! if cache_locations?
          end
        end
      end

      module ClassMethods
        def cache_locations(value)
          @@cache_locations = value
        end

        def default_country(value)
          @@default_country = value
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
Pr0d1r2-geokit-cached-0.1.1 lib/geokit-cached/geocodable.rb