2016-11-13 2 views
2

나는 databag에서 ​​Windows 데스크톱 응용 프로그램을 설치하는 조리법을 작성했습니다이 요리사 레시피를 리팩토링해야합니까? 내가 오류 얻을</p> <pre><code>workstation_apps = data_bag_item('winapps','desktop_apps') for package in workstation_apps['apps'] do chocolatey_package "#{package}" do action :install end end </code></pre> <p>실행 foodcritic :

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

당신이 볼 수 있듯이을, 나는 # 주위에 따옴표를 추가 { package}를 사용하여 변수를 확장하고 주석으로 기능하지 않도록합니다.

더 좋은 방법이 있나요?

답변

2

두 가지 : 먼저 Ruby에서 for 루프를 사용하면 each 루프가 사용되는 것이 좋습니다.

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

정확히

+0

아 좋아! 그럼 다시 리팩터링 할 때가 된 것 같습니다. – TyMac

+0

보너스 포인트를 얻으려면 한 번의 초콜릿 설치 명령으로 모든 설치를 실행하므로 훨씬 빠릅니다. – coderanger

3

"#{package}"package.to_s으로 바꿀 수 있습니다.

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

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

들여 쓰기 action ... 라인이 분명히 선이 블록에 속해 있는지 확인하기 : package 경우 문자열 단순히 package 객체입니다.

+1

(:install 당신이 그것을 쓸 필요가 없습니다 기본 동작이 있음을 유의) : 둘째, chocolatey 패키지 공급자 지원 다중 패키지 작업은이 같은 조리법을 다시 작성할 수 있도록 ,'package' 만 사용해야합니다. – StephenKing

+0

@StephenKing, 답안의 코드를 수정하여'.to_s'를 제외 시켰습니다. 의견에 감사드립니다. – falsetru

+0

고마워요 - 코드를 바꿀 것입니다! – TyMac