Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Lookout-Rack provides easy interaction with Rack from Lookout.
Ruby
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
fixtures
lib
test/unit
.gitignore
.travis.yml
.yardopts
COPYING
COPYING.LESSER
README
Rakefile

README

                                 Lookout-Rack

  Lookout-Rack provides easy interaction with Rack¹ from Lookout².  It provides
  you with a session connected to your Rack application through which you can
  make requests, check responses, follow redirects and set, inspect, and clear
  cookies.

¹ See http://rack.rubyforge.org/
² See http://disu.se/software/lookout-3.0/

§ Installation

    Install Lookout-Rack with

    % gem install lookout-rack

§ Usage

    Include the following code in your ‹Rakefile› (provided that you’re using
    Lookout-Rake¹):

      require 'lookout-rack-3.0'

      Lookout::Rake::Tasks::Test.new do |t|
        t.requires << 'lookout-rack-3.0'
      end

  ¹ See http://disu.se/software/lookout-rake-3.0/

    Then set up a ‹fixtures/config.ru› file that Lookout-Rack
    will use for loading your Rack app.

      load 'path/to/app.rb'
      use Rack::Lint
      run Path::To::App

    This file, if it exists, will be loaded during the first call to #session.
    If it doesn’t exist, ‹config.ru› will be used instead.

    You can now test your app:

      Expectations do
        expect 200 do
          session.get('/').response.status
        end
      end

    The #session method returns an object that lets you #get, #post, #put, and
    #delete resources from the Rack app.  You call these method with a URI¹
    that you want to access/modify together with any parameters that you want
    to pass and any Rack environment that you want to use (which isn’t very
    common).  For example, let’s get ‹/pizzas/› with olives on them:

      expect 200 do
        session.get('/pizzas/', 'olives' => '1').response.status
      end

  ¹ Abbreviation for Uniform Resource Identifier

    The #response method on #session returns a mock Rack response object that
    can be queried for results.  Similarly, there’s a #request method that lets
    you inspect the request that was made.

    Lookout-Rack also deals with cookies.  Assuming that ‹/cookies/set/› will
    set any cookies that we pass it and that ‹/cookies/show/› will simply do
    nothing relevant, the following expectation will pass:

      expect 'value' => '1' do
        session.
          get('/cookies/set/', 'value' => '1').
          get('/cookies/show/').request.cookies
      end

    Sometimes you may want to set cookies yourself before making a request.
    You then use the #cookie method, which takes a String of ‹KEY=VALUE› pairs
    separated by newlines, commas, and/or semicolons and sets those cookies in
    the session:

      expect 'value' => '1', 'other' => '2' do
        session.
          cookie("value=1\n\nother=2").
          get('/cookies/show/').request.cookies
      end

    You may also want to clear all cookies in your session using #clear:

      expect({}) do
        session.
          get('/cookies/set', 'value' => '1').
          clear.
          get('/cookies/show').request.cookies
      end

    Finally, to test redirects, call the #redirect! method on the session
    object, assuming that ‹/redirected/› redirects to another location:

      expect result.redirect? do
        session.get('/redirected/').response
      end

      expect result.not.redirect? do
        session.get('/redirected/').redirect!.response
      end

    That’s basically all there’s to it.  You can check the {API documentation}¹
    for more information.

¹ See http://disu.se/software/lookout-rack-1.0/api/Lookout/Rack/

§ Financing

    Currently, most of my time is spent at my day job and in my rather busy
    private life.  Please motivate me to spend time on this piece of software
    by donating some of your money to this project.  Yeah, I realize that
    requesting money to develop software is a bit, well, capitalistic of me.
    But please realize that I live in a capitalistic society and I need money
    to have other people give me the things that I need to continue living
    under the rules of said society.  So, if you feel that this piece of
    software has helped you out enough to warrant a reward, please PayPal a
    donation to now@disu.se¹.  Thanks!  Your support won’t go unnoticed!

¹ Send a donation:
  https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now@disu.se&item_name=Lookout-Rack

§ Reporting Bugs

    Please report any bugs that you encounter to the {issue tracker}¹.

  ¹ See https://github.com/now/lookout-rack/issues

§ Authors

    Nikolai Weibull wrote the code, the tests, the documentation, and this
    README.

§ Licensing

    Lookout-Rack is free software: you may redistribute it and/or modify it
    under the terms of the {GNU Lesser General Public License, version 3}¹ or
    later², as published by the {Free Software Foundation}³.

¹ See http://disu.se/licenses/lgpl-3.0/
² See http://gnu.org/licenses/
³ See http://fsf.org/
Something went wrong with that request. Please try again.