    # File lib/chef/provider/file.rb, line 177
          def define_resource_requirements
            # this must be evaluated before whyrun messages are printed
            access_controls.requires_changes?

            requirements.assert(:create, :create_if_missing, :touch) do |a|
              # Make sure the parent dir exists, or else fail.
              # for why run, print a message explaining the potential error.
              parent_directory = ::File.dirname(@new_resource.path)

              a.assertion { ::File.directory?(parent_directory) }
              a.failure_message(Chef::Exceptions::EnclosingDirectoryDoesNotExist, "Parent directory #{parent_directory} does not exist.")
              a.whyrun("Assuming directory #{parent_directory} would have been created")
            end

            # Make sure the file is deletable if it exists. Otherwise, fail.
            requirements.assert(:delete) do |a|
              a.assertion do
                if ::File.exists?(@new_resource.path)
                  ::File.writable?(@new_resource.path)
                else
                  true
                end
              end
              a.failure_message(Chef::Exceptions::InsufficientPermissions,"File #{@new_resource.path} exists but is not writable so it cannot be deleted")
            end
          end