= Stale Fish

StaleFish is a utility for storing web requests as fixtures, faking web requests, and ensuring fixtures stay fresh by checking request at periodic intervals.
It works at a global level, without modifying code or writing extensive stubs.

== NOTICE

1.3.x is a complete rewrite of the StaleFish utility. It is incompatible with previous versions of StaleFish.

== Features

* Manage FakeWeb through StaleFish
* Fixtures are updated based on a per-fixture update interval
* Fixture update interval supports the ActiveSupport relative time DSL (ex. '30.minutes', '2.days', '1.year')
* Configuration file and fixture data is version control friendly
* Specify which fixtures are checked for freshness using :all, :only, & :except arguement options
* Force update of all fixtures regardless of freshness (bypass freshness check)
* Test Framework agnostic (tested with Test::Unit & RSpec)

== How To

Simply drop in a YAML file in your application (recommended location: {test/spec}/fixtures/stale_fish.yml) and issue the following commands.

A sample YAML file:

  --- !omap
  - stale:
    - twitter:                                        # fixture name (this must be unique)
      file: 'timeline.json'                           # fixture save location
      update_interval: 30.days                        # update interval
      check_against: http://twitter.com/api/timeline  # data to update fixture with when stale
      request_type: POST                              # request type to use when updating: GET, POST
      update_method: StaleFishFixture.update_me       # optional: this method is evaluated for a response instead of hitting the check_against param
      last_updated_at:                                # timestamp of last fixture update (can be left blank)
    - gh_commits:
      file: 'commits.xml'
      update_interval: 3.days
      check_against: http://api.github.com/commits.xml
      request_type: GET
      last_updated_at:

Specify one block for every fixture you would like to update. The frequency field takes any relative date included in the ActiveSupport library.

=== RSpec

For a single test add it to a before block

  describe UsersController do
    before do
      StaleFish.update_stale
    end
    ....
  end

For all tests add the following to spec_helper.rb

  require 'stale_fish'

  Spec::Runner.configure do |config|
    ...
    config.before :suite do
      StaleFish.update_stale
    end
    ....
  end

=== Test::Unit

For all tests add the following to test_helper.rb

  class Test::Unit::TestCase
    ...
    setup do
      StaleFish.update_stale
    end
    ...
  end


== More Info

View the wiki: http://wiki.github.com/jsmestad/stale_fish

== Thanks

This utility uses FakeWeb, thanks to those contributors for their excellent work.

== Copyright

Copyright (c) 2009-2010 Justin Smestad. See LICENSE for details.