Ruby: void value expression while using if else with break

Ruby: void value expression while using if else with break

我是 Ruby 语言的新手。我正在努力整合 Danger 以添加对 GitHub PR 的检查。用例之一是检查我的 PR 中修改后的文件是否包含特定更改。我在 DangerFile

中添加了以下代码
filesArray = ["Resources/Config.plist", "Resources/Deployment.plist"]

def modified_files_contains_change(files, change)
    does_contain_required_changes = false
    for file in files do
        message "diff in #{file}"
        diff = git.diff_for_file(file)
        patch_contains_change = diff.patch =~ #{change}
        if diff && patch_contains_change
            does_contain_required_changes = true
        else
            does_contain_required_changes = false
            break
        end
    end
    message "Does contain changes in all files => #{does_contain_required_changes}"
    does_contain_required_changes
end

if modified_files_contains_change(files, change)
   warn "Some useful warning message goes here"
end

虽然 运行 这在我的 CI 上,但我遇到了错误

[!] Invalid `Dangerfile` file: void value expression. 

 #  from Dangerfile:33
 #  -------------------------------------------
 #              does_contain_required_changes = false
 >              break
 #          end
 #      end
 #  -------------------------------------------

我尝试搜索但不明白出了什么问题。有人可以帮我了解确切的问题是什么吗?提前致谢。

=~ #{change} 被读作 =~ 因为 # 开始内联注释。 =~ 需要在其中一侧使用正则表达式。要解决此问题,请更改以下行:

patch_contains_change = diff.patch =~ #{change}

至:

patch_contains_change = diff.patch =~ Regexp.new(change)

这假设您传递的字符串为 change


此外,这将是或多或少 ruby​​ish 方式来完成任务:

def modified_files_contains_change(files, change)
  does_contain_required_changes =
    files.all? do |file|
      message "diff in #{file}"
      # break will immediately exit the `all?` unless diff is present
      break false unless diff = git.diff_for_file(file) 
      diff.patch =~ Regexp.new(change)
    end

  message "Does contain changes in all files => #{does_contain_required_changes}"
  does_contain_required_changes
end

到 return 我们发现问题的文件:

def modified_files_contains_change(files, change)
  problematic_file =
    files.detect do |file|
      message "diff in #{file}"
      (diff = git.diff_for_file(file)).nil? || diff.patch !~ Regexp.new(change)
    end

  does_contain_required_changes = problematic_file.nil?
  if does_contain_required_changes
    message "All good!"
  else
    message "We have issues with file #{problematic_file}"
  end
  does_contain_required_changes
end