----- "Jim Weirich" <[EMAIL PROTECTED]> wrote:
> To fix that, change the calling sequence to *args and then the  
> resolve_args argument can go back to being just plain args (rather  
> than [args]).

Seems like it should work, but it isn't.  No errors reported, but tasks are not 
redefined.

> Since redefine/clear_task functionally is something several people  
> have asked for, I'm thinking about adding something like that to rake 
> directly.  So I'm trying to understand what people need out of this  
> feature.

Awesome!  I was really hoping you would say that! Thanks!

> Are you trying to ...
> 
> (1) Clear existing prerequisites and actions and introduce new ones,
> or

Yes, this is what we are doing.  This makes it easy to pop into the right point 
in the large rails task list.

For example, the default rails 'rake test' does all kinds of stuff to prepare 
the test database.  To allow our custom test db build, we just redefine the 
task for prepare environment to call our new task:

namespace :db do
  namespace :test do
    desc 'Drop/recreate test database, migrate schema, and load fixtures in 
order'
    Rake::Task.redefine_task :prepare => :environment do
      Rake::Task['db:test:custom_db_setup'].invoke
    end
    
    desc 'Drop/recreate test database, migrate schema, and load fixtures in 
order'
    task :custom_db_setup do
      `script/setup-db test`
    end
  end
end

> (2) Completely delete the existing task and replace it with a  
> different task (of a possibly different task type)?

Probably useful for somebody.  Given the choice, more flexibility and options 
the better.

> If you have use cases for this, I would like to hear them.

For us, the main scenario use case is we are redefining 'rake test' for our 
rails app to make tests run in a reasonable amount of time.  Because we use 
foreign key constraints in Postgres during development, the unit test method 
for loading/cleaning up fixtures is not useable.  To get around this, we have a 
custom script that drops/recreates test db, loads fixtures only once (and in 
order to preserve FK constraints), and then tests have 'transactional-fixtures 
= true' so everything rolls back, and we don't reload fixtures continually with 
each test.  This simple step cuts test runs down by an order of magnitude for 
us.

Another use case is the 'engines' plugin which monkey patches rake to add 
redefine_task. This is to enhance certain rails rake tasks.  From the 'engines' 
docs:

The engines plugin enhances and adds to the suite of default rake tasks for 
working with plugins. The doc:plugins task now includes controllers, helpers 
and models under app, and anything other code found under the plugin's 
code_paths attribute. New testing tasks have been added to run unit, functional 
and integration tests from plugins, whilst making it easier to load fixtures 
from plugins. See Engines::Testing for more details about testing, and run 
'rake -T' to see the set of rake tasks available.

Here is the custom rake task engines is using:
http://svn.rails-engines.org/engines/trunk/tasks/engines.rake
_______________________________________________
Rake-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rake-devel

Reply via email to