rake task with arguments

R

Reacher

I found an example (http://www.betweentherails.com/rake/) of passing
arguments to a rake task in the new (0.8.n) version of rake. From this
example, I created the following test:

namespace :foo do
desc 'lol'
task :bar, :num do |t, args|
puts "num = #{args.num}"
end
end

I took a look at the task list:

$ rake --tasks
(in /path/to/my/dir)
rake foo:bar[num] # lol

All looks well ... until I try to run it:

$ rake foo:bar[123]
rake: No match

Hmm .. let's try without the argument:

$ rake foo:bar
(in /path/to/my/dir)
num =

o_O
 
R

Reacher

I found an example (http://www.betweentherails.com/rake/) of passing
arguments to a rake task in the new (0.8.n) version of rake. From this
example, I created the following test:

namespace :foo do
  desc 'lol'
  task :bar, :num do |t, args|
    puts "num = #{args.num}"
  end
end

I took a look at the task list:

$ rake --tasks
(in /path/to/my/dir)
rake foo:bar[num]  # lol

All looks well ... until I try to run it:

$ rake foo:bar[123]
rake: No match

Hmm ..  let's try without the argument:

$ rake foo:bar
(in /path/to/my/dir)
num =

o_O

I figured it out

$ rake foo:bar\[123\]
(in /path/to/my/dir)
num = 123

BTW, csh is evil
 
J

Jos Backus

All looks well ... until I try to run it:

$ rake foo:bar[123]
rake: No match

Try this instead:

$ rake 'foo:bar[123]'

The shell is interpreting the []'s as globbing metacharacters. You have to
quote them so the shell passes them to ruby as-is.
 
J

Joel VanderWerf

Jos said:
All looks well ... until I try to run it:

$ rake foo:bar[123]
rake: No match

Try this instead:

$ rake 'foo:bar[123]'

Yuck.

FWIW, you can also embed arguments in the task name, which makes the
command line cleaner. This is yucky in its own special way.

$ cat rakefile
foo_task_pat = /^foo(\w+)$/

make_foo_dep_name =
proc do |taskname|
"foo/#{taskname[foo_task_pat, 1]}"
end

rule foo_task_pat => make_foo_dep_name do |t|
puts "handling rule for #{t.name.inspect}"
end

directory "foo"

file "foo/bar" => "foo" do
system "touch foo/bar"
end
$ rm -rf foo
$ rake foobar
(in /home/vjoel/ruby/misc/rake/args)
handling rule for "foobar"
$ ls foo
bar
 
P

Phlip

Jos said:
Hey, using []'s in rake wasn't my idea...

Bash:

$ echo ()
The () parens are bashoidal delimiters. Other shells probably obey some standard
there, too. I don't know what they do, but I always escape them with \(\), and
my experiment invoked the dreaded subsidiary command prompt, >.

$ echo []

That doesnt' have this problem!
 
R

Rob Biedenharn

R

Reacher

I figured it out
$ rake foo:bar\[123\]
(in /path/to/my/dir)
num = 123
BTW, csh is evil

Of course csh is evil!  That's nothing new.http://ooblick.com/text/CshProgrammingConsideredHarmful.html

This works just fine with bash:

rab://tmp $ cat Rakefile
namespace :foo do
   desc 'lol'
   task :bar, :num do |t, args|
     puts "num = #{args.num}"
   end
end
rab://tmp $ rake foo:bar[123]
(in /private/tmp)
num = 123

-Rob

Rob Biedenharn          http://agileconsultingllc.com
(e-mail address removed)

When I got my first real job programming, I had no experience with
*NIX .. at all. The shell we worked in was tcsh. Currently, everyone
in our office uses ksh, but I've been slow to conform, since I'm used
to tcsh and it's few but handy niceties. I think the results of this
thread may be the poke needed to move to bash.
 
A

Aldric Giacomoni

Reacher said:
Currently, everyone
in our office uses ksh, but I've been slow to conform, since I'm used
to tcsh and it's few but handy niceties. I think the results of this
thread may be the poke needed to move to bash.

Skip bash and go to straight to zsh. You won't regret it.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top