Jeff wrote:

>I'm looking into a way to let business users write functional tests in
>rails, and I wanted to have my functional test file load an external
>file to supply the body of a method.  It occurs to me that Rake must
>have solved a similar problem, but I can't quite figure out how Jim
>did it.
>
>What I want to write is something like this:
>
>class MyTests < Test::Unit::TestCase
>
> # typical setup and teardown here
>
> # a test method to "wrap" an external ruby file
>
> def test_acceptance
>   load 'acceptance.rb'  # load file written by business user
> end
>
> def foo
> end
>
> def bar
> end
>
>end
>
>I admit it didn't look right when I wrote it.  I had hoped that the
>code in acceptance.rb could be bare Ruby code.  in other words, it
>would look like and feel top-level Ruby, but could call foo and bar
>because it's really in the midst of the test_acceptance method.
>
>So I conclude that load() starts a new scope.  I guess I could add my
>methods to Object and/or Module to get them to be seen by the external
>file, but I don't think that does any good either.
>
>But Rake does something similar, right?  I think it defines the task()
>method, etc. and you can refer to them in "bare" ruby code in your
>rake file.
>
>What glue is being used in Rake that I'm missing?
>
>Thanks!
>Jeff
>
>
>
>  
>
The task method is defined by Rake at the top level, i.e. a normal 
method not within the scope of a class

def task(args, &block)
  Rake::Task.define_task(args, &block)
end

Method defined in the top level context are available globally, which is 
why you can require 'rake' and then use the task method.