2016-11-13 55 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

有兩件事:首先在Ruby中使用for循環不鼓勵使用each循環。二,巧克力味包提供商支持多包操作,以便你可以重寫這樣的食譜:

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

(記住,:install是默認的動作,所以你不需要寫出來)

+0

好的!那麼我想現在是時候重構:) – TyMac

+0

對於獎勵點,這將會更快,因爲它會運行所有的安裝在一個巧克力安裝命令。 – coderanger

3

您可以將"#{package}"更換爲package.to_s。 如果package是一個String對象,只需package

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

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

縮進action ...線,以明確該行屬於塊。

+1

沒錯,你應該只使用'package'。 – StephenKing

+0

@StephenKing,我修改了答案中的代碼以排除'.to_s'。感謝您的反饋。 – falsetru

+0

謝謝 - 我會改變我的代碼! – TyMac