Sha256: d8e649096a86a798bd94d7be34d6403073124376ee213fa8640667ea28a21a28

Contents?: true

Size: 1.64 KB

Versions: 4

Compression:

Stored size: 1.64 KB

Contents

require 'multi_json'

module Billy
  class ProxyRequestStub
    def initialize(url, options = {})
      @options = {:method => :get}.merge(options)
      @method = @options[:method].to_s.upcase
      @url = url
      @response = {code: 204, headers: {}, text: ""}
    end

    def and_return(response)
      @response = response
      self
    end

    def call(params, headers, body)
      if @response.respond_to?(:call)
        res = @response.call(params, headers, body)
      else
        res = @response
      end

      code = res[:code] || 200

      headers = res[:headers] || {}
      headers['Content-Type'] = res[:content_type] if res[:content_type]

      if res[:json]
        headers = {'Content-Type' => 'application/json'}.merge(headers)
        body = MultiJson.dump(res[:json])
      elsif res[:jsonp]
        headers = {'Content-Type' => 'application/javascript'}.merge(headers)
        if res[:callback]
          callback = res[:callback]
        elsif res[:callback_param]
          callback = params[res[:callback_param]][0]
        else
          callback = params['callback'][0]
        end
        body = "#{callback}(#{MultiJson.dump(res[:jsonp])})"
      elsif res[:text]
        headers = {'Content-Type' => 'text/plain'}.merge(headers)
        body = res[:text]
      elsif res[:redirect_to]
        code = 302
        headers = {'Location' => res[:redirect_to]}
      else
        body = res[:body]
      end

      [code, headers, body]
    end

    def matches?(method, url)
      if method == @method
        if @url.is_a?(Regexp)
          url.match(@url)
        else
          url.split('?')[0] == @url
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puffing-billy-0.4.1 lib/billy/proxy_request_stub.rb
puffing-billy-0.4.0 lib/billy/proxy_request_stub.rb
puffing-billy-0.3.0 lib/billy/proxy_request_stub.rb
puffing-billy-0.2.3 lib/billy/proxy_request_stub.rb