Class: Calligraphy::Lock

Inherits:
WebDavRequest show all
Includes:
XML::Utils
Defined in:
lib/calligraphy/lock.rb

Instance Attribute Summary

Attributes inherited from WebDavRequest

#headers, #resource, #response

Instance Method Summary collapse

Methods included from XML::Utils

#xml_for

Methods inherited from WebDavRequest

#initialize

Constructor Details

This class inherits a constructor from Calligraphy::WebDavRequest

Instance Method Details

#requestObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/calligraphy/lock.rb', line 5

def request
  if @resource.request_body.blank? && !@resource.locked_to_user?(@headers)
    lock_properties = @resource.refresh_lock
  elsif (@resource.locked? && @resource.lock_is_exclusive?) ||
          (@resource.locked_to_user?(@headers) && !xml_contains_shared_lock?)
    return :locked
  else
    resource_exists_beforehand = @resource.exists?

    xml = xml_for body: body, node: 'lockinfo'
    return :bad_request if xml == :bad_request

    lock_properties = @resource.lock xml, @headers['Depth']
  end

  builder = xml_builder
  xml_res = builder.lock_res lock_properties

  lock_token = lock_properties[-1]
    .select { |x| x.name == 'locktoken' }[0]
    .children[0]
    .text

  response.headers['Lock-Token'] = "<#{lock_token}>"
  set_xml_content_type

  if resource_exists_beforehand
    return :ok, xml_res
  else
    return :created, xml_res
  end
end