Sha256: 75033a6d4ed6ec1ba8ff82dd5399fc4ce463203096965dd2a28ad6a702e6c633

Contents?: true

Size: 1.24 KB

Versions: 8

Compression:

Stored size: 1.24 KB

Contents

module Barometer
  module WeatherService
    class Base
      def initialize(source, version=nil)
        @source = source
        @service = WeatherService.source(@source, version)
      end

      def measure(query, options={})
        @response = Barometer::Response.new

        record_time do
          measure_and_record_status(query, options)
        end

        @response.weight = options.fetch(:weight, nil)
        @response.source = @source
        @response
      end

      private

      def measure_and_record_status(query, options)
        capture_status_code do
          @response = @service.call(query, options)
        end
      end

      def capture_status_code
        yield
        @response.status_code = @response.complete? ? 200 : 204
      rescue KeyRequired
        @response.status_code = 401
      rescue Query::ConversionNotPossible
        @response.status_code = 406
      rescue Query::UnsupportedRegion
        @response.status_code = 406
      rescue Timeout::Error
        @response.status_code = 408
      end

      def record_time
        response_started_at = Time.now.utc
        yield
        @response.response_started_at = response_started_at
        @response.response_ended_at = Time.now.utc
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
barometer-0.9.7 lib/barometer/weather_services/base.rb
barometer-0.9.6 lib/barometer/weather_services/base.rb
barometer-0.9.5 lib/barometer/weather_services/base.rb
barometer-0.9.4 lib/barometer/weather_services/base.rb
barometer-0.9.3 lib/barometer/weather_services/base.rb
barometer-0.9.2 lib/barometer/weather_services/base.rb
barometer-0.9.1 lib/barometer/weather_services/base.rb
barometer-0.9.0 lib/barometer/weather_services/base.rb