【问题标题】:How to Find a String in a Directory of Files Using grep and glob?如何使用 grep 和 glob 在文件目录中查找字符串?
【发布时间】:2020-02-18 04:27:57
【问题描述】:

所以我在过去一个半小时左右一直在搞砸这个,只是不知道该怎么做。

在我的 Ruby test.rake 文件中,该文件在创建 Snapshot Gem 后从另一个项目中调用,我需要检查其他项目的 Rakefile 中是否存在对 Capybara 的依赖项,因为我们已经弃用 Capybara并用其他东西代替它。

所以,我包括了一个简单的检查来查看项目是否包含 Feature/Capybara 测试,如果是,则扫描每个规范测试,看看它是否有对 Capybara 的依赖,如果有,记录一个警告告诉Capybara 已被弃用的用户。

我的问题是,我根本无法让它工作。当我将它附加到 Jenkins 作业并运行它时,我不断在 else 子句中收到意外的 Print 语句。

我在这里遗漏了什么吗?据我了解,我的代码正在做以下事情:

  1. 检查 spec/features 目录是否存在
  2. 使用 glob 选择目录中以 .rb 结尾的所有文件(规范测试),每个文件实例都分配给 file
  3. 获取 file 的当前实例,读取其中的每一行,然后使用 grep 查找其中包含单词“capybara”的任何实例,如果找到则打印出正确的消息。李>
  4. 否则,如果找不到单词,则在 else 子句中打印错误消息。

我对 Ruby 有点陌生,所以我觉得我可能在语法上遗漏了一些东西,但除此之外我被难住了!任何帮助将不胜感激!这是我试图解析的代码和 Rakefile 的样子:

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'

【问题讨论】:

    标签: ruby-on-rails ruby rspec capybara rake


    【解决方案1】:

    除了缺少 .each 之外,您的代码看起来几乎不错

    我做了我的测试,它工作正常。

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

    【讨论】:

    • 谢谢!这就像一个魅力。或者是“宝石”,我应该说。
    猜你喜欢
    • 2013-07-06
    • 2021-09-11
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多