这个 Chef 食谱应该重构吗?

Should this Chef recipe be refactored?

我写了一个从数据包安装 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} 周围添加了双引号,以便它扩展变量并且不用作注释。

有更好的方法吗?

您可以将 "#{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 ... 行以明确该行属于一个块。

两件事:首先,不鼓励在 Ruby 中使用 for 循环,而推荐使用 each 循环。其次,chocolatey package provider 支持多包操作,所以你可以这样重写配方:

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

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