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