Ruby Dir.mkdir Использование

Я довольно новичок в ruby ​​и у меня есть очень простой скрипт ruby, имеющий следующую цель:

  1. Читать строки файла
  2. Доступ к экземпляру jira с использованием гема jira4r
  3. Запрос экземпляра jira для вопроса (ов)
  4. Создайте каталог, используя ключ проблемы и сводку проблемы

После некоторых попыток я пришел к выводу, что команда Dir.mkdir не принимает объект, который я передаю в качестве аргумента.

Выводы:

  1. Если Dir.mkdir передается строка, #{chompline}, из моего каталога текстового файла, выполнить правильно.

  2. Если Dir.mkdir передается строка, состоящая из Issue.key и Issue.Summary, он захлебывается следующей ошибкой:

./readFile.rb:29:in `mkdir ': Нет такого файла или каталога - (Errno::ENOENT) из./readFile.rb:29

  1. Основываясь на пунктах № 1 и № 2, это должно быть что-то в строке, которую я создаю из ключа проблемы и резюме.

У меня есть следующие теории / вопросы:

  1. Является ли "#{keyPlusSummary}" правильным типом объекта для передачи в mkdir в качестве аргумента? Я верю, что это строка, но, возможно, я ошибаюсь.

Источник:

#!/usr/bin/env ruby
require 'rubygems'
require 'jira4r'
require 'FileUtils'
jira = Jira4R::JiraTool.new(2, "http://jira.somejirainstance.com")
baseurl = jira.getServerInfo().baseUrl
puts "Base URL: " + baseurl , "\n"
jira.login("someUser", "somePassword")



file = File.new("awkOutput.txt", "r")
while (line = file.gets)
  chompline = "#{line}".chomp!
  issue = jira.getIssue("#{chompline}")
  keyPlusSummary = "#{issue.key}"+"#{issue.summary}"
  puts keyPlusSummary
  Dir.mkdir "#{keyPlusSummary}"
end
file.close

2 ответа

Это строка, но вы не говорите нам, что в ней.

# More canonical, both in var naming, and there's
# no need for concatenation in this case.
dir_name = "#{issue.key}#{issue.summary}"

Вы делаете строку "имя-каталога, дружественное"?

Я бы не использовал сводку JIRA в качестве имени каталога; ИМО только проекта / вопроса # было бы достаточно. Если вы используете сводку, сделайте ее удобной для работы с каталогами, удалив все не алфавитно-цифровые символы и заменив пробелы подчеркиванием.

keyPlusSummary - это строка, поэтому она имеет правильный тип. В чем может быть проблема - это косые черты в строке. подобно mkdir в UNIX, Dir.mkdir не будет создавать родительские каталоги для вас, он будет создавать только один каталог. Если ключ + summary включает в себя '/', то он будет считываться как многоуровневый каталог. Вы должны либо избежать "/", или (лучше), использовать FileUtils.mkdir_pили (лучше) выполнить очистку, чтобы заменить '' на '_', и удалить специальные символы, которые усложняют использование каталога:)

Кроме того, ваш код не должен иметь интерполяции:

#!/usr/bin/env ruby
require 'rubygems'
require 'jira4r'
require 'FileUtils'
jira = Jira4R::JiraTool.new(2, "http://jira.somejirainstance.com")
baseurl = jira.getServerInfo().baseUrl
puts "Base URL: #{baseurl}\n" #use it here!
jira.login("someUser", "somePassword")



File.new("awkOutput.txt", "r") do |file| #using the block form to ensure you close the file
  while (line = file.gets)
    chompline = line.chomp! #line is already a string, no need to interpolate
    issue = jira.getIssue(chompline) #line is already a string, no need
    keyPlusSummary = "#{issue.key}#{issue.summary}" #already interpolating, no need to add
    puts keyPlusSummary
    Dir.mkdir keyPlusSummary #already a string
  end
end
Другие вопросы по тегам