为什么在使用带有Thor的Ruby文件中使用gsub后会有一个额外的空白行?

时间:2017-04-10 15:24:49

标签: ruby regex thor

我有一些处理Gemfile的Ruby代码。它添加了一些推荐的宝石并删除了其他宝石。 Gemfile的一部分如下所示:

group :development, :test do
  # The gem version is a recommended starting place; upgrade if needed.
  gem 'pry-rails', '~> 0.3.4'
  # Enhance pry with byebug (which gives more debugger commands and other goodies).
  # The gem version is a recommended starting place; upgrade if needed.
  gem 'pry-byebug', '~> 3.4.0'
  # Use rspec for testing
  gem 'rspec-rails', '~> 3.5.1'
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: mri
end

我使用以下两行来删除块的最后两行(gem 'byebug ...行及其上方的注释)。

gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$/, "", verbose: false)
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$/, "", verbose: false)

gsub_fileThor gem提供的方法。删除工作,但我最终在Gemfile

中使用以下代码
group :development, :test do

  # The gem version is a recommended starting place; upgrade if needed.
  gem 'pry-rails', '~> 0.3.4'
  # Enhance pry with byebug (which gives more debugger commands and other goodies).
  # The gem version is a recommended starting place; upgrade if needed.
  gem 'pry-byebug', '~> 3.4.0'
  # Use rspec for testing
  gem 'rspec-rails', '~> 3.5.1'
end

为什么在group :development, :test do之后插入额外的空白行?它没有被移除的地方附近。它可能是Thor宝石中的一个错误,但我想知道它是否是正则表达式问题。

更新

我只是尝试使用原始ruby gsub(以消除潜在的Thor问题)。我创建了一个辅助方法

def my_gsub(path, regex, str)
  text = File.read(path)
  rep = text.gsub(regex, str)
  File.open(path, "w") {|file| file.puts rep}
end

当我更改正在调用gsub_file的两行以致电my_gsub时,我现在在group :development, :test do之后得到两个空白行。

1 个答案:

答案 0 :(得分:1)

对于您的方法my_gsub,您将替换该行的内容而不替换换行符。要使其删除换行符,您可以将正则表达式更改为:

gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$\n/, "")
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$\n/, "")