=~ #{change}
читается как =~
, потому что #
запускает встроенный комментарий.=~
ожидает регулярное выражение на одной из сторон.Чтобы устранить проблему, измените строку ниже:
patch_contains_change = diff.patch =~ #{change}
на:
patch_contains_change = diff.patch =~ Regexp.new(change)
Предполагается, что вы передаете строку как change
.
Кроме того, это будет более или менее рубиновый способ выполнить задачу:
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
Чтобы вернуть файл, в котором мы обнаружили проблему:
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