Sha256: 25be67db143cafd78dc0d299ba49f1eed36c4f37b2c8cc425b2d6f132482e938

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Dexcom
  module BloodGlucoseUtils
    module ApiHandler
      MAX_MINUTES = 1440

      def make_api_request(number_of_values)
        HTTParty.post(
          endpoint,
          headers: headers,
          query: query(number_of_values)
        )
      end

      def process_api_response(response)
        response_body = JSON.parse(response.body)

        response_body.map { |blood_glucose_item| build_from_api_response(blood_glucose_item) }
      end

      def build_from_api_response(blood_glucose_response_item)
        Dexcom::BloodGlucose.new(
          blood_glucose_response_item['Value'],
          blood_glucose_response_item['Trend'],
          parse_timestamp(blood_glucose_response_item)
        )
      end

      private

      def endpoint
        "#{config.base_url}/Publisher/ReadPublisherLatestGlucoseValues"
      end

      def headers
        {
          'User-Agent' => USER_AGENT
        }
      end

      def query(max_count)
        {
          maxCount: max_count,
          minutes: MAX_MINUTES,
          sessionId: Dexcom::Authentication.session_id
        }
      end

      def parse_timestamp(blood_glucose_response_item)
        timestamp_info = blood_glucose_response_item['WT']
        timestamp_regex = /(\d+)000/
        timestamp = timestamp_info[timestamp_regex, 1]

        DateTime.strptime(timestamp, '%s')
      end

      def config
        @config ||= Dexcom.configuration
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dexcom-0.3.0 lib/dexcom/blood_glucose/api_handler.rb
dexcom-0.2.2 lib/dexcom/blood_glucose/api_handler.rb
dexcom-0.2.1 lib/dexcom/blood_glucose/api_handler.rb