Как найти строку в каталоге файлов, используя grep и glob? - PullRequest
0 голосов
/ 22 октября 2019

Так что я возился с этим последние полтора часа или около того и просто не могу понять, как это сделать.

В моем файле Ruby test.rake, который вызывается из другогопроект после создания Snapshot Gem, мне нужно проверить, существует ли зависимость для Capybara в Rakefile для другого проекта, так как с тех пор мы отказались от Capybara и заменили его чем-то другим.

Итак,Я включил простую проверку, чтобы увидеть, содержит ли проект тесты Feature / Capybara, и, если да, просканировать каждый тест спецификации и посмотреть, есть ли в нем зависимость для Capybara, и, если да, записать предупреждение, чтобы сообщить пользователю, что Capybara имеетустарела.

Моя проблема в том, что я не могу заставить это работать вообще. Когда я присоединяю это к заданию Jenkins и запускаю его, я продолжаю получать неожиданный оператор Print в предложении else.

Я что-то здесь упускаю? Из того, что я понимаю, мой код выполняет следующие действия:

  1. Проверка наличия каталога spec / features
  2. Использование glob для выбора всех файлов в каталоге, заканчивающихся на.rb (Spec tests), каждый экземпляр файла назначается file
  3. Возьмите текущий экземпляр file , прочитайте каждую его строку и используйте grep длянайдите в них любые экземпляры слова «капибара» и распечатайте правильное сообщение, если оно найдено.
  4. В противном случае, если слово НЕ найдено, выведите сообщение об ошибке в предложении else.

Я немного новичок в Ruby, поэтому я чувствую, что, возможно, я что-то упустил из-за синтаксиса, но кроме этого я в тупике! Любая помощь будет принята с благодарностью! Вот как выглядит код и Rake-файл, который я пытаюсь проанализировать:

test.rake:

  if Dir.exist?('spec/features')
      path = 'spec/features/'
      Dir.glob(path + '*.rb') {|file|
        if File.readlines(file).grep(/capybara/).any?
          print "The capybara dependency has been found!"
        else
          print "SOMETHING WENT WRONG"
        end
      }
  end

Rakefile :

#!/usr/bin/env rake
# frozen_string_literal: true

require 'roll_out/rake_tasks'
require 'roll_out/security'
require 'roll_out/jira'
require 'REDACTED/philter/lint_results'
require 'roll_out/capybara'

load 'REDACTED/tasks/REDACTED.rake'

1 Ответ

1 голос
/ 22 октября 2019

Ваш код выглядит почти хорошо, за исключением .each отсутствует

Я сделал мой тест, и он отлично работает.

Dir.glob('spec/features/*.rb').each do |f|
        puts 'haha' if File.readlines(f).any?{|line| line.include?('capybara')}
end
...