Reputation: 26202
I'm working on a rake task in ruby :
namespace :generate do
desc "Export to txt"
task :txt, [:filename, :item_id] => :environment do |t, args|
puts "aaaaaaaaaaaaa #{args.length}"
puts "ssssssss #{args.size}"
puts "bbbbbbbbbb #{args}"
args.each do | arg |
puts "#{arg}"
end
end
end
First two puts don't return anything just aaaaaaaaaaa
and ssssssss
is printed, however bbbbbb print does return my args and even when I go trough each argument they are printed. What am I doing wrong?
update
I started rake task like this :
rake generate:txt[Temp.txt,22]
bbbbbbbbb prints :
bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}
Each loop prints :
[:filename, "Temp.txt"]
[:item_id, "22"]
Upvotes: 4
Views: 2119
Reputation: 326
You are dealing with an instance of Rake:TaskArguments please see http://rake.rubyforge.org/classes/Rake/TaskArguments.html
If you want to treat it like an enumerable, then call to_hash on it.
namespace :generate do
desc "Export to txt"
task :txt, [:filename, :item_id] => :environment do |t, args|
puts args.class
puts "aaaaaaaaaaaaa #{args.to_hash.length}"
puts "size #{args.to_hash.size}"
puts "bbbbbbbbbb #{args}"
args.each do | arg |
puts "#{arg}"
end
end
end
Upvotes: 1
Reputation: 8517
args
is not an Hash
, is a Rake::TaskArguments
:
puts args.class #=> Rake::TaskArguments
probably this class doesn't implement size
and length
; converting to hash works for me:
namespace :generate do
desc "Export to txt"
task :txt, [:filename, :item_id] => :environment do |t, args|
puts "args class: #{args.class}"
args = args.to_hash
puts "args to hash: #{args.inspect}"
puts "aaaaaaaaaaaaa #{args.length}"
puts "ssssssss #{args.size}"
puts "bbbbbbbbbb #{args}"
args.each do | arg |
puts "#{arg}"
end
end
end
prints:
$ rake generate:txt[Temp.txt,22]
Rake::TaskArguments
{:filename=>"Temp.txt", :item_id=>"22"}
aaaaaaaaaaaaa 2
ssssssss 2
bbbbbbbbbb {:filename=>"Temp.txt", :item_id=>"22"}
[:filename, "Temp.txt"]
[:item_id, "22"]
Upvotes: 6