Method: Chef::Provider::LWRPBase.build_from_file

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

.build_from_file(cookbook_name, filename, run_context) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/chef/provider/lwrp_base.rb', line 52

def build_from_file(cookbook_name, filename, run_context)
  if LWRPBase.loaded_lwrps[filename]
    Chef::Log.trace("LWRP provider #{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)

  # We load the class first to give it a chance to set its own name
  provider_class = Class.new(self)
  provider_class.provides resource_name.to_sym
  provider_class.class_from_file(filename)

  # Respect resource_name set inside the LWRP
  provider_class.instance_eval do
    define_singleton_method(:to_s) do
      "LWRP provider #{resource_name} from cookbook #{cookbook_name}"
    end
    define_singleton_method(:inspect) { to_s }
  end

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

  LWRPBase.loaded_lwrps[filename] = true

  provider_class
end