# frozen_string_literal: true module HTTPX module Plugins # # This plugin implements convenience methods for performing WEBDAV requests. # # https://gitlab.com/honeyryderchuck/httpx/wikis/WEBDAV # module WebDav module InstanceMethods def copy(src, dest) request("COPY", src, headers: { "destination" => @options.origin.merge(dest) }) end def move(src, dest) request("MOVE", src, headers: { "destination" => @options.origin.merge(dest) }) end def lock(path, timeout: nil, &blk) headers = {} headers["timeout"] = if timeout && timeout.positive? "Second-#{timeout}" else "Infinite, Second-4100000000" end xml = "" \ "" \ "" \ "" \ "null" \ "" response = request("LOCK", path, headers: headers, xml: xml) return response unless response.is_a?(Response) return response unless blk && response.status == 200 lock_token = response.headers["lock-token"] begin blk.call(response) ensure unlock(path, lock_token) end end def unlock(path, lock_token) request("UNLOCK", path, headers: { "lock-token" => lock_token }) end def mkcol(dir) request("MKCOL", dir) end def propfind(path, xml = nil) body = case xml when :acl '' \ "" when nil '' else xml end request("PROPFIND", path, headers: { "depth" => "1" }, xml: body) end def proppatch(path, xml) body = "" \ "#{xml}" request("PROPPATCH", path, xml: body) end # %i[ orderpatch acl report search] end end register_plugin(:webdav, WebDav) end end