Sha256: 2d405dce3f9e16693b28f449061c9c56e731f18cf8ca8a30bd5144093d88ce64

Contents?: true

Size: 1.14 KB

Versions: 4

Compression:

Stored size: 1.14 KB

Contents

require "webrat/rack"
require "sinatra/test"

module Webrat
  class SinatraSession < RackSession
    include Sinatra::Test

    attr_reader :request, :response

    def initialize(context = nil)
      super(context)

      app = context.respond_to?(:app) ? context.app : Sinatra::Application
      @browser = Sinatra::TestHarness.new(app)
      @cookies = []
    end

    %w(get head post put delete).each do |verb|
      class_eval <<-RUBY
        def #{verb}(path, data, headers = {})
          params = data.inject({}) do |data, (key,value)|
            data[key] = Rack::Utils.unescape(value)
            data
          end
          headers["HTTP_HOST"] = "www.example.com"
          headers["HTTP_COOKIE"] = @cookies.join(',')
          @browser.#{verb}(path, params, headers)
          set_cookies
        end
      RUBY
    end

    def response_body
      @browser.body
    end

    def response_code
      @browser.status
    end

    private

      def set_cookies
        if set_cookie = @browser.response.headers['Set-Cookie']
          @cookies.unshift set_cookie
        end
      end

      def response
        @browser.response
      end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
dbrady-webrat-0.4.4.1 lib/webrat/sinatra.rb
dbrady-webrat-0.4.4.2 lib/webrat/sinatra.rb
dbrady-webrat-0.4.4 lib/webrat/sinatra.rb
jferris-webrat-0.4.3.0.1238640835 lib/webrat/sinatra.rb