Module: Chef::DSL::MethodMissing Deprecated

Included in:
Recipe
Defined in:
lib/chef/dsl/method_missing.rb

Overview

Deprecated.

scheduled to die in a Chef 13 fire

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_symbol, *args, &block) ⇒ Object

DEPRECATED: method_missing must live for backcompat purposes until Chef 13.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/chef/dsl/method_missing.rb', line 34

def method_missing(method_symbol, *args, &block)
  #
  # If there is already DSL for this, someone must have called
  # method_missing manually. Not a fan. Not. A. Fan.
  #
  if respond_to?(method_symbol)
    Chef.log_deprecation("Calling method_missing(#{method_symbol.inspect}) directly is deprecated in Chef 12 and will be removed in Chef 13. Use public_send() or send() instead.")
    return send(method_symbol, *args, &block)
  end

  #
  # If a definition exists, then Chef::DSL::Definitions.add_definition was
  # never called.  DEPRECATED.
  #
  if run_context.definitions.has_key?(method_symbol.to_sym)
    Chef.log_deprecation("Definition #{method_symbol} (#{run_context.definitions[method_symbol.to_sym]}) was added to the run_context without calling Chef::DSL::Definitions.add_definition(#{method_symbol.to_sym.inspect}).  This will become required in Chef 13.")
    Chef::DSL::Definitions.add_definition(method_symbol)
    return send(method_symbol, *args, &block)
  end

  #
  # See if the resource exists anyway.  If the user had set
  # Chef::Resource::Blah = <resource>, a deprecation warning will be
  # emitted and the DSL method 'blah' will be added to the DSL.
  #
  resource_class = Chef::ResourceResolver.resolve(method_symbol, node: run_context ? run_context.node : nil)
  if resource_class
    Chef::DSL::Resources.add_resource_dsl(method_symbol)
    return send(method_symbol, *args, &block)
  end

  begin
    super
  rescue NoMethodError
    raise NoMethodError, "No resource or method named `#{method_symbol}' for #{describe_self_for_error}"
  rescue NameError
    raise NameError, "No resource, method, or local variable named `#{method_symbol}' for #{describe_self_for_error}"
  end
end

Instance Method Details

#describe_self_for_errorObject



22
23
24
25
26
27
28
29
30
# File 'lib/chef/dsl/method_missing.rb', line 22

def describe_self_for_error
  if respond_to?(:name)
    %Q{`#{self.class} "#{name}"'}
  elsif respond_to?(:recipe_name)
    %Q{`#{self.class} "#{recipe_name}"'}
  else
    to_s
  end
end