2016-11-13 4 views
2

シェフのレシピをリファクタリングする必要がありますか?私はdatabagから、Windowsのデスクトップアプリをインストールするレシピを書いた

workstation_apps = data_bag_item('winapps','desktop_apps') 

for package in workstation_apps['apps'] do 
     chocolatey_package "#{package}" do 
     action :install 
     end 
end 

はfoodcriticを実行して、私はエラーを取得する:

FC002: Avoid string interpolation where not required: ./recipes/default.rb:23 

あなたが見ることができるように、私は{#の周りに二重引用符を追加しました変数を展開してコメントとして機能しないようにします。

これを行うより良い方法はありますか?

答えて

2

2つのこと:Rubyで最初にforループを使用すると、eachループが優先されます。

workstation_apps = data_bag_item('winapps','desktop_apps') 
chocolatey_package workstation_apps['apps'] 

正確

+0

ああ!もう一度リファクタリングする時だと思います:) – TyMac

+0

ボーナスポイントの場合、これは、単一のchocolateyインストールコマンドですべてのインストールを実行するので、はるかに高速です。 – coderanger

3

"#{package}"package.to_sに置き換えることができます。 package場合は、文字列オブジェクト、単にpackageである:それは明確なラインがブロックに属していることを確認するためにインデントaction ...ライン

workstation_apps = data_bag_item('winapps','desktop_apps') 

for package in workstation_apps['apps'] do 
     chocolatey_package package do 
       action :install 
     end 
end 

+1

:installは、あなたがそれを記述する必要はありませんので、デフォルトのアクションであることを覚えておいてください):第二に、チョコレートのようパッケージプロバイダのサポートマルチパッケージ操作は、次のようなレシピを書き換えることができるように'package'だけを使うべきです。 – StephenKing

+0

@StephenKing、答えのコードを修正して '.to_s'を除外しました。フィードバックいただきありがとうございます。 – falsetru

+0

ありがとうございます - 私は自分のコードを変更します! – TyMac

関連する問題