# File lib_doc/rucy/local.rb, line 287
    def publish_file(req_path, local_path, request, response)
      case (request.method)
      when 'GET', 'HEAD'
        File.open(local_path) { |file|
          stat = file.stat
          if (request.has_header? 'If-Modified-Since') then
            publish_if_modified_since(stat, request, response) and return
          elsif (request.has_header? 'If-Unmodified-Since') then
            publish_if_unmodified_since(stat, request, response) and return
          elsif (request.has_header? 'If-Range') then
            if (request.has_header? 'Range') then
              publish_if_range(file, stat, req_path, request, response) and return
            end
          end
          if (request.has_header? 'Range') then
            if (! (request.has_header? 'If-Range')) then
              publish_range(file, stat, req_path, request, response) and return
            end
          end
          response.status = 200 # OK
          response.set_header('Content-Type', @type_resolver.content_type(req_path))
          response.set_header('Content-Length', stat.size.to_s)
          response.set_header('Last-Modified', stat.mtime.httpdate)
          response.start_body
          if (request.method != 'HEAD') then
            while (data = file.read(@chunk_size))
              response.write(data)
            end
          end
        }
      else
        http_error = HTTPError.new(405) # Method Not Allow
        http_error.set_header('Allow', 'GET, HEAD')
        raise http_error
      end
      nil
    end