我有一些处理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_file
是Thor
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
之后得到两个空白行。
答案 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/, "")