Sha256: bf1b1d551ade584fcf4e51942847d22a21287388438398b6059292ba999f63fc

Contents?: true

Size: 1.98 KB

Versions: 3

Compression:

Stored size: 1.98 KB

Contents

require 'json'
require 'active_support/hash_with_indifferent_access'

module Airborne
  class InvalidJsonError < StandardError; end
  include RequestExpectations
  def self.configure
    RSpec.configure do |config|
      yield config
    end
  end

  def self.included(base)
    if(!Airborne.configuration.requester_module.nil?)
      base.send(:include, Airborne.configuration.requester_module)
    elsif(!Airborne.configuration.rack_app.nil?)
      base.send(:include, RackTestRequester)
    else
      base.send(:include, RestClientRequester)
    end
  end

  def self.configuration
    RSpec.configuration
  end

  def get(url, headers = nil)
    set_response(make_request(:get, url, {headers: headers}))
  end

  def post(url, post_body = nil, headers = nil)
    set_response(make_request(:post, url, {body: post_body, headers: headers}))
  end

  def patch(url, patch_body = nil, headers = nil )
    set_response(make_request(:patch, url, {body: patch_body, headers: headers}))
  end

  def put(url, put_body = nil, headers = nil )
    set_response(make_request(:put, url, {body: put_body, headers: headers}))
  end

  def delete(url, headers = nil)
    set_response(make_request(:delete, url, {headers: headers}))
  end

  def head(url, headers = nil)
    set_response(make_request(:head, url, {headers: headers}))
  end

  def options(url, headers = nil)
    set_response(make_request(:options, url, {headers: headers}))
  end

  def response
    @response
  end

  def headers
    @headers
  end

  def body
    @body
  end

  def json_body
    raise InvalidJsonError, "Api request returned invalid json" unless @json_body
    @json_body
  end

  private

  def get_url(url)
    base = Airborne.configuration.base_url || ""
    base + url
  end

  def set_response(res)
    @response = res
    @body = res.body
    @headers = HashWithIndifferentAccess.new(res.headers) unless res.headers.nil?
    begin
      @json_body = JSON.parse(res.body, symbolize_names: true) unless res.body.empty?
    rescue
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
airborne-0.1.15 lib/airborne/base.rb
airborne-0.1.14 lib/airborne/base.rb
airborne-0.1.13 lib/airborne/base.rb