2016-11-13 3 views
2

Я написал рецепт, который устанавливает рабочий стол Windows, приложения из databag:Если этот рецепт шеф-повара будет реорганизован?

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

Две вещи: сначала использование for петель в Ruby обескуражено в пользу 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 является строка объекта, просто 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