2017-10-04 8 views
1

私たちのファイル構造内には、タグ付きのスニペットがあります。私のプロジェクトディレクトリから、プロジェクト内の.featureで終わるすべてのファイルに対して、前の行に宣言されたタグに基づいてスニペット名を返したいとします。例えばUnixのgrep/sed/awkをRubyに変換する

、ディレクトリには次のテキストlogin.featureファイル含まれています。私はシングルを実行したい

@test @wip @smoke 
Scenario: Logout of Product 

@integration @unit @smoke 
Scenario: Login to Product 

@integration @unit 
Scenario: Buy Stuff 

をディレクトリには、次のテキストlogout.featureファイルが含まれています次の配列を返すコマンド:

["Login to Product", "Logout of Product"] 

あなたが見ることができるように、私は基本的に次のことをやっている:

grep -inr -A 1 '@smoke' ./my/directory | grep Scenario | sed -n -e 's/^.*Scenario: //p' | awk '!seen[$0]++' 

...配列に結果の行の変換を除いて。

Rubyでこれを行うためのエレガントな方法はありますか?あるいは私は何とかUnixの魔法とRubyの砂糖を組み合わせることができますか?または、私はsed/awk/grepに固執すべきですか?

+2

sed/awkをうまく使います。 Rubyのアプローチがこのように簡潔でエレガントであるかどうかは不明です。 – hedgesky

答えて

1

は、ここで私は

results = [] 
Dir.glob("#{folder}/**/*.feature").each do |file| 
    i = 0; line = nil 
    File.foreach(file).map{ |l| line = i+1 if l[/@smoke/]; i+=1 } 
    results << IO.readlines(file)[line].gsub(/Scenario:\s|\n/,'') unless line.nil? 
end 

p results 

結果思い付いたものです:あなたは簡単にメソッドにこれをシフトすることができ

["Login to Product", "Logout of Product"] 

編集:完全なコマンドラインを再検討した後でこれを更新しました。あなたは@smoke行の後に来るScenarioだけを望んでいるように見え、他のシナリオは出力に含まれていないはずです。

関連する問題