Rake task with splat arguments

I am trying to create a rake task that takes the required first argument, and then any number of extra arguments that I want to combine into an array:

rake course["COURSE NAME", 123, 456, 789] 

I tried the following, but args[:numbers] is just a w / 123 string instead of all numbers.

 task :course, [:name, *:numbers] => :environment do |t, args| puts args # {:name=>"COURSE NAME", :numbers=>"123"} end 
+6
source share
1 answer

Starting from rake 10.1.0 you can use Rake::TaskArguments#extras :

 task :environment task :course, [:name] => :environment do |t, args| name = args[:name] numbers = args.extras puts "name = #{name}" puts "numbers = #{numbers.join ','}" end 

Output:

 $ rake "course[COURSE NAME, 123, 456, 789]" name = COURSE NAME numbers = 123,456,789 

For a rake <10.1.0, you could create a list of reasonably large arguments. This hack will work up to 26 numbers:

 task :course, [:name, *:a..:z] => :environment do |t, args| name = args[:name] numbers = args.values_at(*:a..:z).compact puts "name = #{name}" puts "numbers = #{numbers.join ','}" end 
+13
source

Source: https://habr.com/ru/post/953331/


All Articles