class RuboCop::Cop::Chef::Style::UsePlatformHelpers

Use the platform?() and platform_family?() helpers instead of node == 'foo' and node == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.

@example

#### incorrect
node['platform'] == 'ubuntu'
node['platform_family'] == 'debian'
node['platform'] != 'ubuntu'
node['platform_family'] != 'debian'
%w(rhel suse).include?(node['platform_family'])
node['platform'].eql?('ubuntu')

#### correct
platform?('ubuntu')
!platform?('ubuntu')
platform_family?('debian')
!platform_family?('debian')
platform_family?('rhel', 'suse')

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/chef/style/use_platform_helpers.rb, line 59
def on_send(node)
  platform_equals?(node) do |type, operator, plat|
    add_offense(node, message: MSG, severity: :refactor) do |corrector|
      corrected_string = (operator == :!= ? '!' : '') + "#{type.value}?('#{plat.value}')"
      corrector.replace(node, corrected_string)
    end
  end

  platform_include?(node) do |plats, type|
    add_offense(node, message: MSG, severity: :refactor) do |corrector|
      platforms = plats.values.map { |x| x.str_type? ? "'#{x.value}'" : x.source }
      corrected_string = "#{type.value}?(#{platforms.join(', ')})"
      corrector.replace(node, corrected_string)
    end
  end

  platform_eql?(node) do |type, plat|
    add_offense(node, message: MSG, severity: :refactor) do |corrector|
      corrected_string = "#{type.value}?('#{plat.value}')"
      corrector.replace(node, corrected_string)
    end
  end
end