这个厨师食谱应该重构吗?

时间:2016-11-13 03:37:14

标签: ruby chef chef-recipe

我写了一个从数据库安装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

正如您所看到的,我在#{package}周围添加了双引号,以便它扩展变量并且不用作注释。

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以将"#{package}"替换为package.to_s。 如果package是字符串对象,则只需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 :(得分:2)

两件事:首先不鼓励在Ruby中使用for循环,而是支持each循环。其次,巧克力包提供程序支持多包操作,因此您可以重写这样的配方:

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

(请记住:install是默认操作,因此您无需将其写出来)