On May 31, 2006, at 4:03 PM, transfire / gmail.com wrote:

> I've been working on a task library, on the surface similiar to Rake,
> but generalized for use on a per module level --hence usable anywhere
> in one's code. The basic principle of the library is that a TASK IS A
> METHOD WITH DEPENDENCIES.
>
> But there's a problem with using a notion like that of Rake's. Since
> the dependencies are designated by a list of task names there is no  
> way
> to pass parameters to those dependencies and hence tasks can't have
> parameters at all. Eg.
>
>   task :t1 => [ :t2 ] do
>     ...
>   end
>
>   task :t2 do |x|
>     ...
>   end
>
> Clearly it doesn't work for task t2 to have the parameter x since t1
> can't pass a parameter using just a symbol list, [:t2].
>
> Since my premise is that tasks are just methods with dependencies I am
> considering an alternative notation.
>
>   def t1
>     t2( 'yes' )
>     ...
>   end
>
>   def t1(a)
>     ...
>   end
>
>   task :t1, :t2
>

This may be the Lisp I just ate talking but...

task :t1 => [ [:t2, arg1, arg2, argetc], [ :t3 ] ] do
    ...
end

task :t2 do |a1, a2, *aetc|
   ...
end

You can even do is_a? Symbol (I know, not ducktype-y enough) and not  
have to use a nested-array for tasks with no args
e.g.

task :t7 => [ :t1, :t3, [:t4, "one", "two"], :t6 ] do
  ...
end