Sha256: 2a8c374c9b38cb632469109928bdc547c81f163b9e11651cb0339c6c6178cd7f

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

# frozen_string_literal: true

require 'open-uri'
require 'open_uri_redirections'
require 'net/http'
require 'uri'
require 'base64'
require 'bridge_api'

module BridgeBlueprint
  class RemoteData
    USERS_CSV_NAME = 'users.csv'
    CUSTOM_FIELD_CSV_NAME = 'custom_fields.csv'
    GRANTS_CSV_NAME = 'grants.csv'

    attr_accessor :client

    @base_url = nil
    @auth_header = nil
    @file_url = nil
    @file_path = nil
    @is_complete = false
    @client = nil

    def initialize(base_url, key, secret)
      @base_url = base_url
      @auth_header = 'Basic ' + Base64.strict_encode64("#{key}:#{secret}")
      @client = BridgeAPI::Client.new(prefix: base_url, api_key: key, api_secret: secret)
    end

    def start_data_report
      raw_dumps = get_dumps
      dumps = raw_dumps.members
      unless dumps.empty?
        dump = dumps.first
        case dump['status']
        when 'pending'
          return
        when 'complete'
          return if Time.parse(dump['date']) > Time.now - 300
          end
      end
      @client.create_data_dump
    end

    def status
      dumps = get_dumps
      if !dumps.members.empty?
        return get_dumps.first['status']
      else
        return BridgeBlueprint::Constants::STATUS_NOT_FOUND
      end
    end

    def store_file(path)
      @file_path = path
      uri = URI.parse(@base_url)
      http = Net::HTTP.new(uri.host, uri.port)
      http.read_timeout = 300
      http.use_ssl = (uri.scheme == 'https')
      req = Net::HTTP::Get.new("#{@base_url}/api/admin/data_dumps/download")
      req.add_field('Authorization', @auth_header)
      res = http.request(req)
      redirect_url = res['location']
      File.open(@file_path, 'w') do |_file|
        IO.copy_stream(open(redirect_url), @file_path)
      end
    end

    private

    def get_dumps
      @client.get_data_dumps
    end

    def get_headers
      {
        'Authorization' => @auth_header,
        'Content-Type' => 'application/json',
        'Accept' => 'application/json'
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bridge_blueprint-0.0.06 lib/bridge_blueprint/remote_data.rb