Skip to content
Snippets Groups Projects
configuration.rb 2.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Geocoder
    
    Alex Reisner's avatar
    Alex Reisner committed
      # Provides convenient access to the Configuration singleton.
      #
    
      def self.configure(&block)
        if block_given?
    
          block.call(Configuration.instance)
    
        else
          Configuration.instance
        end
      end
    
    
    Alex Reisner's avatar
    Alex Reisner committed
      ##
      # This class handles geocoder Geocoder configuration
      # (geocoding service provider, caching, units of measurement, etc).
      # Configuration can be done in two ways:
    
    Alex Reisner's avatar
    Alex Reisner committed
      # 1) Using Geocoder.configure and passing a block
      #    (useful for configuring multiple things at once):
    
    Alex Reisner's avatar
    Alex Reisner committed
      #   Geocoder.configure do |config|
      #     config.timeout      = 5
      #     config.lookup       = :yahoo
      #     config.api_key      = "2a9fsa983jaslfj982fjasd"
      #     config.units        = :km
    
    Alex Reisner's avatar
    Alex Reisner committed
      # 2) Using the Geocoder::Configuration singleton directly:
    
      #
      #   Geocoder::Configuration.language = 'pt-BR'
      #
    
    Alex Reisner's avatar
    Alex Reisner committed
      # Default values are defined in Configuration#set_defaults.
    
      class Configuration
    
        OPTIONS = [
    
    Alex Reisner's avatar
    Alex Reisner committed
          :timeout,
          :lookup,
          :language,
    
          :http_headers,
    
    Alex Reisner's avatar
    Alex Reisner committed
          :use_https,
          :http_proxy,
          :https_proxy,
          :api_key,
          :cache,
          :cache_prefix,
          :always_raise,
          :units,
          :distances
        ]
    
        attr_accessor *OPTIONS
    
    Alex Reisner's avatar
    Alex Reisner committed
        def initialize # :nodoc
    
          @timeout      = 3           # geocoding service timeout (secs)
          @lookup       = :google     # name of geocoding service (symbol)
          @language     = :en         # ISO-639 language code
    
          @http_headers = {}          # HTTP headers for lookup
    
          @use_https    = false       # use HTTPS for lookup requests? (if supported)
          @http_proxy   = nil         # HTTP proxy server (user:pass@host:port)
          @https_proxy  = nil         # HTTPS proxy server (user:pass@host:port)
          @api_key      = nil         # API key for geocoding service
          @cache        = nil         # cache object (must respond to #[], #[]=, and #keys)
          @cache_prefix = "geocoder:" # prefix (string) to use for all cache keys
    
          # exceptions that should not be rescued by default
          # (if you want to implement custom error handling);
          # supports SocketError and TimeoutError
          @always_raise = []
    
          # calculation options
          @units     = :mi     # :mi or :km
          @distances = :linear # :linear or :spherical
    
        instance_eval(OPTIONS.map do |option|
          o = option.to_s
    
          def #{o}
            instance.#{o}
    
          def #{o}=(value)
            instance.#{o} = value
    
        class << self
          def set_defaults
            instance.set_defaults
          end