class Polyseerio::Request

HTTP request wrapper that can use attached middleware.

Constants

INITIALIZE_DEFAULTS

Attributes

post_request[RW]
pre_request[RW]
reject_request[RW]
resource[RW]

Public Class Methods

new(resource, options = {}) click to toggle source
# File lib/request.rb, line 19
def initialize(resource, options = {})
  # need to ensure taht pre, post, reject are all arrays otherwise raise
  options = Helper.defaults(options, INITIALIZE_DEFAULTS)

  @resource = resource

  @pre_request    = options[Middleware::PRE]
  @post_request   = options[Middleware::POST]
  @reject_request = options[Middleware::REJECT]
end

Public Instance Methods

delete(*args) click to toggle source

Perform a DELETE request.

# File lib/request.rb, line 46
def delete(*args)
  execute(:delete, *args)
end
get(*args) click to toggle source

Perform a GET request.

# File lib/request.rb, line 31
def get(*args)
  execute(:get, *args)
end
post(*args) click to toggle source

Perform a POST request.

# File lib/request.rb, line 36
def post(*args)
  execute(:post, *args)
end
put(*args) click to toggle source

Perform a PUT request.

# File lib/request.rb, line 41
def put(*args)
  execute(:put, *args)
end

Private Instance Methods

execute(method, *args) click to toggle source

Execute a request using pre, post, and reject middleware.

method - The HTTP method. … - Arguments to forward to execute.

Returns a promise.

# File lib/request.rb, line 58
def execute(method, *args)
  new_args = args

  @pre_request.each do |middleware|
    new_args = middleware.call(*new_args)
  end

  path = new_args.empty? ? '' : new_args.shift

  req = proc do ||
    @resource[path].send(method, *new_args)
  end

  post = proc do |result|
    @post_request.each do |middleware|
      result = middleware.call(result)
    end

    result
  end

  Concurrent::Promise.new(&req).on_success(&post)
end