class Chef::ResourceBuilder
Attributes
Public Class Methods
Source
# File lib/chef/resource_builder.rb, line 35 def initialize(type: nil, name: nil, created_at: nil, params: nil, run_context: nil, cookbook_name: nil, recipe_name: nil, enclosing_provider: nil, new_resource: nil) @type = type @name = name @created_at = created_at @params = params @run_context = run_context @cookbook_name = cookbook_name @recipe_name = recipe_name @enclosing_provider = enclosing_provider @new_resource = new_resource end
FIXME (ruby-2.1 syntax): most of these are mandatory
Public Instance Methods
Source
# File lib/chef/resource_builder.rb, line 47 def build(&block) @resource = resource_class.new(name, run_context) if resource.resource_name.nil? raise Chef::Exceptions::InvalidResourceSpecification, "#{resource}.resource_name is `nil`! Did you forget to put `provides :blah` or `resource_name :blah` in your resource class?" end resource.source_line = created_at resource.declared_type = type resource.cookbook_name = cookbook_name resource.recipe_name = recipe_name # Determine whether this resource is being created in the context of an enclosing Provider resource.enclosing_provider = enclosing_provider # XXX: this is required for definition params inside of the scope of a # subresource to work correctly. resource.params = params # Evaluate resource attribute DSL if block_given? resource.resource_initializing = true begin if new_resource.nil? resource.instance_exec(&block) else resource.instance_exec(new_resource, &block) end ensure resource.resource_initializing = false end end # Run optional resource hook resource.after_created # Force to compile_time execution if the flag is set if resource.compile_time Array(resource.action).each do |action| resource.run_action(action) end resource.action :nothing end resource end
Private Instance Methods
Source
# File lib/chef/resource_builder.rb, line 95 def resource_class # Checks the new platform => short_name => resource mapping initially # then fall back to the older approach (Chef::Resource.const_get) for # backward compatibility @resource_class ||= Chef::Resource.resource_for_node(type, run_context.node) end