2017-04-10 8 views
0

Gemfileを処理するRubyコードがあります。それはいくつかの宝石を追加し、他の宝石を取り除きます。私は、ブロックの最後の2行(gem 'byebug ...ラインと、それ以上のコメント)を削除するには、次の2行を使用していRuby with Thorでファイルにgsubを使用した後に余分な空白行があるのはなぜですか?

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 

:次のようになります。Gemfileのセクションがあります。

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宝石によって提供される方法です。除去は動作しますが、余分な空白行がgroup :development, :test do後に挿入されているということですなぜ私は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 

で、次のコードで終わりますか?ラインが削除された場所のどこにもありません。それはおそらくThorの宝石のバグかもしれませんが、私はそれが正規表現の問題かどうか疑問に思っています。

更新

私はちょうど(潜在的なトールの問題を排除するために)生のルビーGSUBを使用してみました。私はmy_gsubを呼び出すためにgsub_fileを呼び出している2つの行を変更すると、私は今group :development, :test do後に2行の空白行を取得し、ヘルパーメソッド

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

を作成しました。

+0

Thorのバグのようです。 2つの 'gsub'のどれが行を追加しているのか確認できますか? – ndn

+0

私はちょうどテキストを更新しました。私はRubyの 'gsub'コマンドを直接呼び出すためのヘルパーメソッドを作成したので、Thorをトラブルシューティングから削除することができます。今私は2つの空白行を得ています。 – CodeSmith

答えて

1

my_gsubの場合は、改行を置き換えずに行の内容を置き換えます。改行を削除するには、正規表現を次のように変更します。

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

これは 'group:development、:test do'の後に行が現れ、' byebug'の定義が終わりに来る理由を説明しません。 – ndn

+0

私はコードを実行すると、ブロックの最後に表示されたので、それは問題のコードで、ルビのブロックの始めに改行がないことを想定していました。2.3.3 –

+0

ありがとう。これは問題を解決しました(しかし、私はまだラインがいくつかのラインが現れた理由について興味があります)。 – CodeSmith

関連する問題