Sha256: 91fe3ef9c55d5b7b7328b8f709448596e245cca82e867b19fb00bf1620be6ba5

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

require 'native'
require 'promise'

require 'bowser/http/request'
require 'bowser/http/form_data'

module Bowser
  module HTTP
    module_function

    def fetch(url, method: :get, headers: {}, data: nil)
      promise = Promise.new
      request = Request.new(method, url)

      connect_events_to_promise request, promise

      request.send(data: data, headers: headers)

      promise
    end

    def upload(url, data, content_type: 'application/json', method: :post)
      promise = Promise.new
      request = Request.new(method, url)

      connect_events_to_promise request, promise

      request.send(data: data, headers: { 'Content-Type' => content_type })

      promise
    end

    def upload_files(url, files, key: 'files', key_suffix: '[]', method: :post)
      promise = Promise.new
      request = Request.new(method, url)

      connect_events_to_promise request, promise

      form = FormData.new
      files.each do |file|
        form.append "#{key}#{key_suffix}", file
      end

      request.send(data: form)

      promise
    end

    def upload_file(url, file, key: 'file', method: :post)
      upload_files(url, [file], key: key, key_suffix: nil, method: method)
    end

    def connect_events_to_promise(request, promise)
      request.on :load do
        promise.resolve request.response
      end
      request.on :error do |event|
        promise.reject Native(event)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bowser-0.2.2 opal/bowser/http.rb
bowser-0.2.1 opal/bowser/http.rb