Eugen already answered, perché non funziona.
Ma forse la seguente soluzione può aiutare:
task :test_commas, :arg1, :arg2 do |t, args|
arg = args.to_hash.values.join(',')
puts "Argument is #{arg.inspect}"
end
Richiede due argomenti, ma si unisce a loro per ottenere la 'vera' uno.
Se si dispone di più di una virgola, sono necessari più argomenti.
Ho fatto una ricerca più approfondita e ho trovato una (o due) soluzione. Non penso che sia una soluzione perfetta, ma sembra che funzioni.
require 'rake'
module Rake
class Application
#usage:
# rake test_commas[1\,2\,3]
def parse_task_string_masked_commas(string)
if string =~ /^([^\[]+)(\[(.*)\])$/
name = $1
args = $3.split(/\s*(?<!\\),\s*/).map{|x|x.gsub(/\\,/,',')}
else
name = string
args = []
end
[name, args]
end
#Usage:
# rake test_commas[\"1,2\",3]
#" and ' must be masked
def parse_task_string_combined(string)
if string =~ /^([^\[]+)(\[(.*)\])$/
name = $1
args = $3.split(/(['"].+?["'])?,(["'].+?["'])?/).map{|ts| ts.gsub(/\A["']|["']\Z/,'') }
args.shift if args.first.empty?
else
name = string
args = []
end
[name, args]
end
#~ alias :parse_task_string :parse_task_string_masked_commas
alias :parse_task_string :parse_task_string_combined
end
end
desc 'Test comma separated arguments'
task :test_commas, :arg1 do |t, args|
puts '---'
puts "Argument is #{args.inspect}"
end
La versione parse_task_string_masked_commas
consente le chiamate con virgole mascherati:
rake test_commas[1\,2\,3]
La versione parse_task_string_combined
permette:
rake test_commas[\"1,2,3\"]
Almeno sotto le finestre, la "(o ') deve essere mascherato. In caso contrario, sono già eliminati fino a quando la stringa ha raggiunto Rake :: Aplication (probabilmente sostituzione shell)
sì, e questo non funziona neanche per me (in nessuno dei casi sopra). Aggiornerò la domanda con un esempio. –
Ha funzionato come un fascino! – Elmor