module BeeswaxAPI::Request

Public Instance Methods

create(**opts, &block) click to toggle source
# File lib/beeswaxapi/request.rb, line 11
def create(**opts, &block)
  opts[:method] = :post
  request_for(opts, &block)
end
delete(**opts, &block) click to toggle source
# File lib/beeswaxapi/request.rb, line 21
def delete(**opts, &block)
  opts[:method] = :delete
  request_for(opts, &block)
end
retrieve(**opts, &block) click to toggle source
# File lib/beeswaxapi/request.rb, line 6
def retrieve(**opts, &block)
  opts[:method] = :get
  request_for(opts, &block)
end
update(**opts, &block) click to toggle source
# File lib/beeswaxapi/request.rb, line 16
def update(**opts, &block)
  opts[:method] = :put
  request_for(opts, &block)
end

Private Instance Methods

after_request_log(target_url, opts, response) click to toggle source

TODO: improve heredoc formatting

# File lib/beeswaxapi/request.rb, line 99
    def after_request_log(target_url, opts, response)
      <<-LOG
Finish request #{opts[:method].upcase} #{target_url} with #{response.code}
#{response.body}
      LOG
    end
before_request_log(target_url, opts) click to toggle source

TODO: improve heredoc formatting

# File lib/beeswaxapi/request.rb, line 91
    def before_request_log(target_url, opts)
      <<-LOG
Start request #{opts[:method].upcase} #{target_url}
#{opts[:body] if opts[:body]}
      LOG
    end
failure_response_handler(origin_response) click to toggle source
# File lib/beeswaxapi/request.rb, line 114
def failure_response_handler(origin_response)
  response = Response.new(parsed_body(origin_response.body))
  fail Errors::FailureResponse.new(errors: response.errors)
end
parsed_body(body) click to toggle source
# File lib/beeswaxapi/request.rb, line 106
def parsed_body(body)
  Yajl.load(body, symbolize_keys: true)
end
request_for(**opts) click to toggle source
# File lib/beeswaxapi/request.rb, line 28
def request_for(**opts)
  # TODO: better url constructor
  target_url = [App.config.base_uri, @path].join('/')

  if opts.has_key? :path
    target_url = [target_url, opts.delete(:path)].join('/')
  end

  case App.config.auth_strategy
  when 'basic'
    userpwd = "#{App.config.user_name}:#{App.config.password}"
    opts[:userpwd] = userpwd
  when 'cookies'
    cookie_file_path = App.config.cookie_file

    if cookie_file_path.nil? || cookie_file_path.empty?
      fail(
        Errors::MissingConfiguration,
        "Path to cookies is missed. Please check configuration."
      )
    end

    opts = opts.merge(
      cookiefile: App.config.cookie_file,
      cookiejar: App.config.cookie_file
    )
  else
    fail(
      Errors::MissingConfiguration,
      "Authencation strategy can't be missed. Please check configuration."
    )
  end

  if opts.has_key? :body_params
    opts[:body] = Yajl.dump(opts.delete(:body_params))
  end

  request = Typhoeus::Request.new(target_url, opts)

  if App.config.logger
    App.config.logger.info before_request_log(target_url, opts)
  end

  request.on_complete do |response|
    if App.config.logger
      App.config.logger.info after_request_log(target_url, opts, response)
    end

    if response.success?
      return success_response_handler(response)
    elsif response.timed_out?
      return timed_out_response_handler(response)
    elsif response.code >= 400 && response.code < 500
      return failure_response_handler(response)
    elsif response.code >= 500 && response.code
      return failure_response_handler(response)
    end
  end

  request.run
end
success_response_handler(origin_response) click to toggle source
# File lib/beeswaxapi/request.rb, line 110
def success_response_handler(origin_response)
  Response.new(parsed_body(origin_response.body))
end
timed_out_response_handler(origin_response) click to toggle source
# File lib/beeswaxapi/request.rb, line 119
def timed_out_response_handler(origin_response)
  fail Errors::TimedOutRequest.new, 'Request skipped by time out'
end