Sha256: 794929c1fc94802705944638cdc0996c2de22d88ec39d4c122a4e636e049647d

Contents?: true

Size: 1.9 KB

Versions: 15

Compression:

Stored size: 1.9 KB

Contents

require 'timezone/lookup/geonames'
require 'timezone/lookup/google'
require 'timezone/lookup/test'
require 'timezone/net_http_client'

module Timezone
  # Configure timezone lookups.
  module Lookup
    class << self
      MISSING_LOOKUP = 'No lookup configured'.freeze
      private_constant :MISSING_LOOKUP

      # Returns the lookup object
      #
      # @return [#lookup] the lookup object
      # @raise [Timezone::Error::InvalidConfig] if the lookup has not
      #   been configured
      def lookup
        @lookup || raise(::Timezone::Error::InvalidConfig, MISSING_LOOKUP)
      end

      # Configure a lookup object
      #
      # @param lookup [:google, :geonames, :test] use a built-in lookup
      # @param lookup [Class] a custom lookup class
      # @yieldparam [OpenStruct] an object on which to set configuration
      #   options
      #
      # @return [#lookup] the lookup object
      def config(lookup)
        options = OptionSetter.new(lookup)
        yield(options.config) if block_given?
        @lookup = options.make_lookup
      end

      # Responsible for collecting options in the DSL and creating
      # lookup objects using those options.
      class OptionSetter
        LOOKUPS = {
          geonames: ::Timezone::Lookup::Geonames,
          google: ::Timezone::Lookup::Google,
          test: ::Timezone::Lookup::Test
        }.freeze

        INVALID_LOOKUP = 'Invalid lookup specified'.freeze

        attr_reader :config

        def initialize(lookup)
          if lookup.is_a?(Symbol)
            lookup = LOOKUPS.fetch(lookup) do
              raise ::Timezone::Error::InvalidConfig, INVALID_LOOKUP
            end
          end

          @lookup = lookup

          @config = OpenStruct.new
        end

        def make_lookup
          config.request_handler ||= ::Timezone::NetHTTPClient
          @lookup.new(config)
        end
      end

      private_constant :OptionSetter
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
timezone-1.2.8 lib/timezone/lookup.rb
timezone-1.2.7 lib/timezone/lookup.rb
timezone-1.2.6 lib/timezone/lookup.rb
timezone-1.2.5 lib/timezone/lookup.rb
timezone-1.2.4 lib/timezone/lookup.rb
timezone-1.2.3 lib/timezone/lookup.rb
timezone-1.2.2 lib/timezone/lookup.rb
timezone-1.2.1 lib/timezone/lookup.rb
timezone-1.2.0 lib/timezone/lookup.rb
timezone-1.1.1 lib/timezone/lookup.rb
timezone-1.1.0 lib/timezone/lookup.rb
timezone-1.0.0 lib/timezone/lookup.rb
timezone-0.99.2 lib/timezone/lookup.rb
timezone-0.99.1 lib/timezone/lookup.rb
timezone-0.99.0 lib/timezone/lookup.rb