Method: Chef::Resource::LWRPBase.build_from_file

Defined in:
lib/chef/resource/lwrp_base.rb

.build_from_file(cookbook_name, filename, run_context) ⇒ Object



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
73
74
# File 'lib/chef/resource/lwrp_base.rb', line 45

def build_from_file(cookbook_name, filename, run_context)
  if LWRPBase.loaded_lwrps[filename]
    Chef::Log.trace("Custom resource #{filename} from cookbook #{cookbook_name} has already been loaded!  Skipping the reload.")
    return loaded_lwrps[filename]
  end

  resource_name = filename_to_qualified_string(cookbook_name, filename)

  resource_class = Class.new(self)
  resource_class.run_context = run_context
  resource_class.class_from_file(filename)

  # Make a useful string for the class (rather than <Class:312894723894>)
  resource_class.instance_eval do
    define_singleton_method(:to_s) do
      "Custom resource #{resource_name} from cookbook #{cookbook_name}"
    end
    define_singleton_method(:inspect) { to_s }
  end

  Chef::Log.trace("Loaded contents of #{filename} into resource #{resource_name} (#{resource_class})")

  # wire up the default resource name after the class is parsed only if we haven't declared one.
  # (this ordering is important for MapCollision deprecation warnings)
  resource_class.provides resource_name.to_sym unless Chef::ResourceResolver.includes_handler?(resource_name.to_sym, self)

  LWRPBase.loaded_lwrps[filename] = resource_class

  resource_class
end