Sha256: 70985e0cfbaff9fb1d490b21aa1c1d02988cff573f07b63a8630c6ee266e894e
Contents?: true
Size: 1.96 KB
Versions: 8
Compression:
Stored size: 1.96 KB
Contents
module Barometer module Query module Converter @@converters = {} def self.converters=(converters) @@converters = converters end def self.converters @@converters end def self.register(to_format, converter_klass) # return unless converter_klass.respond_to?(:from) @@converters[to_format] ||= {} converter_klass.from.each do |from_format| @@converters[to_format][from_format] = converter_klass end end def self.find(from_format, to_format) converter = @@converters.fetch(to_format, {}).fetch(from_format, nil) {to_format => converter} if converter end def self.find_all(from_format, to_formats) converters = _find_direct_converter(from_format, Array(to_formats)) return converters unless converters.empty? _find_indirect_converters(from_format, Array(to_formats)) end def self._find_direct_converter(from_format, to_formats) converter = nil to_formats.each do |to_format| converter = find(from_format, to_format) break if converter end [converter].compact end def self._find_indirect_converters(from_format, to_formats) geocode_converter = find(from_format, :geocode) converter = nil to_formats.each do |to_format| converter = find(:geocode, to_format) break if converter end geocode_converter && converter ? [geocode_converter, converter] : [] end end end end require_relative 'converters/from_weather_id_to_geocode' require_relative 'converters/from_woe_id_or_ipv4_to_geocode' require_relative 'converters/to_woe_id' require_relative 'converters/to_geocode' require_relative 'converters/from_short_zipcode_to_zipcode' require_relative 'converters/to_weather_id' require_relative 'converters/from_coordinates_to_noaa_station_id' require_relative 'converters/from_geocode_to_coordinates'
Version data entries
8 entries across 8 versions & 1 rubygems