Массив для семейства платформ против rubocop

Я пытаюсь использовать массив в Chef для platform_family, и, согласно документам шеф-повара, у меня правильный синтаксис, но rubocop пинает меня под зад.

Документы Chef: https://docs.chef.io/dsl_recipe.html#value-for-platform-family

Любые мысли для рубинового новичка?

 12 tcp_ports = value_for_platform_family(
 13   ['debian', 'rhel'] => [22, 443, 4172, 60443],
 14   'windows' => [443, 3389, 4172, 60443]
 15 )

И ошибка рубокопа

recipes/recipe.rb:13:3: C: Style/WordArray: Use %w or %W for an array of words.
  ['debian', 'rhel'] => [22, 443, 4172, 60443],
  ^^^^^^^^^^^^^^^^^^

person robb breckenridge    schedule 14.03.2018    source источник
comment
Вы уверены, что это хорошая идея назвать хэш-ключ? ['debian', 'rhel'] => [22, 443, 4172, 60443], работать с ним будет немного неудобно.   -  person Sebastian Palma    schedule 15.03.2018
comment
Потрясающе, спасибо! Это вызвало Style/PercentLiteralDelimiters: %w-литералы должны быть разделены ( и ). но это легко решить.. поменял скобки и все скукум.   -  person robb breckenridge    schedule 15.03.2018
comment
что вы имеете в виду имя хэш-ключ? Слева — семейство платформ, а справа — порты, которые необходимо открыть для каждой платформы. Я думаю, что это хорошо. Я просто ссылаюсь на tcp_ports везде, где мне нужно, и он выбирает правильные порты в зависимости от того, на какой системе он работает.   -  person robb breckenridge    schedule 15.03.2018
comment
Отлично, но разве это ограничение Chef?, потому что в таком случае подойдет любой персонаж ['a', 'b', 'c'] == %w[a b c] && %w[a b c] && %w(a b c) && %w(a b c) == %w!a b c!   -  person Sebastian Palma    schedule 15.03.2018


Ответы (1)


При работе с коллекциями Rubocop добавляет:

Если вам нужен массив слов (непустые строки без пробелов и специальных символов), предпочтите %w синтаксису буквального массива. Применяйте это правило только к массивам с двумя или более элементами.

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]

Заметьте, это плохо с точки зрения Руководства по стилю Ruby, но все же работает.

Таким образом, ваш пример будет:

%w[debian rhel]
person Sebastian Palma    schedule 14.03.2018
comment
Спасибо, если вы переключите хороший пример на () вместо [], это сработает. - person robb breckenridge; 15.03.2018
comment
Можете ли вы пояснить, что это плохо с точки зрения Руководства по стилю Ruby? - person mu is too short; 15.03.2018
comment
Какая часть @muistooshort?, она находится в репозитории, как и добавлено выше. - person Sebastian Palma; 15.03.2018
comment
Значит, вы говорите, что согласно руководству по стилю STATES = ['draft', 'open', 'closed'] — это плохо? Было неясно, что это имело в виду в этом плохом. - person mu is too short; 15.03.2018
comment
Может быть, это плохо с точки зрения Руководства по стилю Ruby будет более понятным? - person Sebastian Palma; 15.03.2018