class Koine::RestClient::AsyncBuilder

takes care of async requests

Public Class Methods

new(client, response_parser, queue = AsyncQueue.new) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 7
def initialize(client, response_parser, queue = AsyncQueue.new)
  @client = client
  @response_parser = response_parser
  @queue = queue
  @error_handler = proc do |error|
    raise error
  end
end

Public Instance Methods

delete(*args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 32
def delete(*args, &block)
  queue(:delete, *args, &block)
end
get(*args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 16
def get(*args, &block)
  queue(:get, *args, &block)
end
on_error(&block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 46
def on_error(&block)
  @error_handler = block
end
parsed_responses() click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 36
def parsed_responses
  blocks = @queue.map { |_request, block| block }
  threads = @queue.map do |request|
    Thread.new { @client.perform_request(request) }
  end
  @queue.clear
  responses = threads.map(&:value)
  parse_responses(responses, blocks)
end
patch(*args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 28
def patch(*args, &block)
  queue(:patch, *args, &block)
end
post(*args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 20
def post(*args, &block)
  queue(:post, *args, &block)
end
put(*args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 24
def put(*args, &block)
  queue(:put, *args, &block)
end

Private Instance Methods

parse_responses(responses, blocks) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 52
def parse_responses(responses, blocks)
  responses.map.with_index do |response, index|
    block = blocks[index]
    begin
      @response_parser.parse(response, &block)
    rescue StandardError => exception
      @error_handler.call(exception)
    end
  end
end
queue(type, *args, &block) click to toggle source
# File lib/koine/rest_client/async_builder.rb, line 63
def queue(type, *args, &block)
  request = @client.__send__("create_#{type}_request", *args)
  @queue.push(request, &block)
end