Ruby Rake выводит аргумент, но ему не нравится его значение на methodcalll - PullRequest
0 голосов
/ 28 июня 2018

У меня есть задача:

desc "Create a team"
task :create_dev_team, [:team_name] do |t, args|
  puts "Creating \"#{args.team_name}\" team under Sub Org ID: 1"
  ESP::Team.create(name: #{args.team_name}, sub_organization_id: 1)
end

Документация ESP SDK для создания команды:

team = ESP :: Team.create (имя: «Название команды», sub_organization_id: 6)

когда я вызываю эту строку напрямую из irb, она отлично работает,

НО когда я звоню:

rake create_dev_team[Team Name] --trace

Я получаю:

rake aborted!

SyntaxError: /Users/me/dev/my-repo/Rakefile:348: syntax error, unexpected keyword_end

Что я делаю не так?

1 Ответ

0 голосов
/ 28 июня 2018

Вы используете синтаксис, как если бы вы интерполировали строку:

#{args.team_name}

Но без кавычек - здесь нет предполагаемой строки. Это означает, что Ruby будет воспринимать это как комментарий, начинающийся с #. Что, в свою очередь, означает, что в коде нет закрывающего ). Когда синтаксический анализатор находит end, это неожиданно, поскольку он все еще думает, что контекст находится внутри вызова метода, поэтому он не может завершить внешний блок.

Вы должны использовать:

ESP::Team.create(name: args.team_name, sub_organization_id: 1)

Или:

ESP::Team.create(name: "#{args.team_name}", sub_organization_id: 1)

Первый - это то, что вы должны использовать, если ваш метод всегда возвращает String. Здесь args.team_name может вернуть nil. Но вы должны действительно проверить это раньше и выполнить задачу, если это так, поскольку пустое имя команды может вызвать проблемы в другом месте вашего кода.

...