Skip to content
Snippets Groups Projects
configuration.rb 2.64 KiB
Newer Older
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