class RuboCop::Cop::Chef::Modernize::ResourceNameFromInitialize

The resource name can now be specified using the ‘resource_name` helper instead of using the @resource_name variable in the resource provider initialize method. In general we recommend against writing HWRPs, but if HWRPs are necessary you should utilize as much of the resource DSL as possible.

@example

 #### incorrect
 def initialize(*args)
   super
   @resource_name = :foo
 end

#### correct
resource_name :create

Constants

MSG

Public Instance Methods

on_def(node) click to toggle source
# File lib/rubocop/cop/chef/modernize/resource_name_initializer.rb, line 41
def on_def(node)
  return unless node.method?(:initialize)
  return if node.body.nil? # nil body is an empty initialize method

  node.body.each_node do |x|
    next unless x.assignment? && !x.node_parts.empty? && x.node_parts.first == :@resource_name

    add_offense(x, severity: :refactor) do |corrector|
      # insert the new resource_name call above the initialize method
      initialize_node = initialize_method(processed_source.ast).first
      corrector.insert_before(initialize_node.source_range, "resource_name #{x.descendants.first.source}\n\n")
      # remove the variable from the initialize method
      corrector.remove(range_with_surrounding_space(range: x.loc.expression, side: :left))
    end
  end
end