roqua/physiqual

View on GitHub
lib/physiqual/exporters/raw_exporter.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Physiqual
  module Exporters
    class RawExporter < Exporter
      def configure(provider, data_source)
        @provider = provider
        @data_source = data_source
        self
      end

      def export_data(user_id, first_measurement, number_of_days)
        user = User.find_by_user_id(user_id)
        token = Token.find_provider_token(@provider, user)
        return [] unless token && token.complete?
        session = Sessions::TokenAuthorizedSession.new(token)
        service = DataServices::DataServiceFactory.fabricate!(token.class.csrf_token, session)
        from, to = determine_time_span(first_measurement, number_of_days)
        service.send(@data_source.to_sym, from, to)
      end

      def export(user, first_measurement, number_of_days)
        export_data(user, first_measurement, number_of_days).to_json
      end

      private

      def determine_time_span(first_measurement, number_of_days)
        from = first_measurement - Physiqual.hours_before_first_measurement.hours
        to = first_measurement + (number_of_days - 1).days +
             ((Physiqual.measurements_per_day - 1) * Physiqual.interval).hours
        [from, to]
      end
    end
  end
end