Class: RuboCop::Cop::Chef::ChefCorrectness::IncorrectLibraryInjection

Inherits:
RuboCop::Cop
  • Object
show all
Defined in:
lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb

Overview

Libraries should be injected into the Chef::DSL::Recipe or Chef::DSL::Resource classes and not Recipe/Resource/Provider classes directly.

Examples:


# bad
::Chef::Recipe.send(:include, Filebeat::Helpers)
::Chef::Provider.send(:include, Filebeat::Helpers)
::Chef::Resource.send(:include, Filebeat::Helpers)

# good
::Chef::DSL::Recipe.send(:include, Filebeat::Helpers) # covers previous Recipe & Provider classes
::Chef::DSL::Resource.send(:include, Filebeat::Helpers)

Constant Summary collapse

MSG =
'Libraries should be injected into the Chef::DSL::Recipe or Chef::DSL::Resource classes and not Recipe/Resource/Provider classes directly.'.freeze

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb', line 47

def autocorrect(node)
  lambda do |corrector|
    new_val = node.source
    new_val.gsub!(/Chef::(Provider|Recipe)/, 'Chef::DSL::Recipe')
    new_val.gsub!(/Chef::Resource/, 'Chef::DSL::Resource')

    corrector.replace(node.loc.expression, new_val)
  end
end

#on_send(node) ⇒ Object



41
42
43
44
45
# File 'lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb', line 41

def on_send(node)
  legacy_class_sends?(node) do
    add_offense(node, location: :expression, message: MSG, severity: :refactor)
  end
end