class RackDAV::Resource

Attributes

options[R]
path[R]

Public Class Methods

new(path, request, response, options) click to toggle source
# File lib/rack_dav/resource.rb, line 7
def initialize(path, request, response, options)
  @path = path
  @request = request
  @response = response
  @options = options
end

Public Instance Methods

==(other) click to toggle source
# File lib/rack_dav/resource.rb, line 118
def ==(other)
  path == other.path
end
child(name, option={}) click to toggle source
# File lib/rack_dav/resource.rb, line 130
def child(name, option={})
  self.class.new(path + '/' + name, @request, @response, options)
end
children() click to toggle source

If this is a collection, return the child resources.

# File lib/rack_dav/resource.rb, line 15
def children
  raise NotImplementedError
end
collection?() click to toggle source

Is this resource a collection?

# File lib/rack_dav/resource.rb, line 20
def collection?
  raise NotImplementedError
end
content_length() click to toggle source

Return the size in bytes for this resource.

# File lib/rack_dav/resource.rb, line 64
def content_length
  raise NotImplementedError
end
content_type() click to toggle source

Return the mime type of this resource.

# File lib/rack_dav/resource.rb, line 59
def content_type
  raise NotImplementedError
end
copy(dest) click to toggle source

HTTP COPY request.

Copy this resource to given destination resource.

# File lib/rack_dav/resource.rb, line 99
def copy(dest)
  raise NotImplementedError
end
creation_date() click to toggle source

Return the creation time.

# File lib/rack_dav/resource.rb, line 30
def creation_date
  raise NotImplementedError
end
delete() click to toggle source

HTTP DELETE request.

Delete this resource.

# File lib/rack_dav/resource.rb, line 92
def delete
  raise NotImplementedError
end
descendants() click to toggle source
# File lib/rack_dav/resource.rb, line 177
def descendants
  list = []
  children.each do |child|
    list << child
    list.concat(child.descendants)
  end
  list
end
display_name() click to toggle source
# File lib/rack_dav/resource.rb, line 126
def display_name
  name
end
etag() click to toggle source

Return an Etag, an unique hash value for this resource.

# File lib/rack_dav/resource.rb, line 45
def etag
  raise NotImplementedError
end
exist?() click to toggle source

Does this recource exist?

# File lib/rack_dav/resource.rb, line 25
def exist?
  raise NotImplementedError
end
get() click to toggle source

HTTP GET request.

Write the content of the resource to the response.body.

# File lib/rack_dav/resource.rb, line 71
def get
  raise NotImplementedError
end
get_property(name) click to toggle source
# File lib/rack_dav/resource.rb, line 142
def get_property(name)
  case name
  when 'resourcetype'     then resource_type
  when 'displayname'      then display_name
  when 'creationdate'     then creation_date.xmlschema
  when 'getcontentlength' then content_length.to_s
  when 'getcontenttype'   then content_type
  when 'getetag'          then etag
  when 'getlastmodified'  then last_modified.httpdate
  else self.get_custom_property(name) if self.respond_to?(:get_custom_property)
  end
end
last_modified() click to toggle source

Return the time of last modification.

# File lib/rack_dav/resource.rb, line 35
def last_modified
  raise NotImplementedError
end
last_modified=(time) click to toggle source

Set the time of last modification.

# File lib/rack_dav/resource.rb, line 40
def last_modified=(time)
  raise NotImplementedError
end
lockable?() click to toggle source
# File lib/rack_dav/resource.rb, line 134
def lockable?
  self.respond_to?(:lock) && self.respond_to?(:unlock)
end
make_collection() click to toggle source

HTTP MKCOL request.

Create this resource as collection.

# File lib/rack_dav/resource.rb, line 114
def make_collection
  raise NotImplementedError
end
move(dest) click to toggle source

HTTP MOVE request.

Move this resource to given destination resource.

# File lib/rack_dav/resource.rb, line 106
def move(dest)
  copy(dest)
  delete
end
name() click to toggle source
# File lib/rack_dav/resource.rb, line 122
def name
  File.basename(path)
end
parent() click to toggle source
# File lib/rack_dav/resource.rb, line 171
def parent
  elements = @path.scan(/[^\/]+/)
  return nil if elements.empty?
  self.class.new('/' + elements[0..-2].to_a.join('/'), @options)
end
post() click to toggle source

HTTP POST request.

Usually forbidden.

# File lib/rack_dav/resource.rb, line 85
def post
  raise NotImplementedError
end
property_names() click to toggle source
# File lib/rack_dav/resource.rb, line 138
def property_names
  %w(creationdate displayname getlastmodified getetag resourcetype getcontenttype getcontentlength)
end
put() click to toggle source

HTTP PUT request.

Save the content of the request.body.

# File lib/rack_dav/resource.rb, line 78
def put
  raise NotImplementedError
end
remove_property(name) click to toggle source
# File lib/rack_dav/resource.rb, line 167
def remove_property(name)
  raise HTTPStatus::Forbidden if property_names.include?(name)
end
resource_type() click to toggle source

Return the resource type.

If this is a collection, return a collection element

# File lib/rack_dav/resource.rb, line 52
def resource_type
  if collection?
    Nokogiri::XML::fragment('<D:collection xmlns:D="DAV:"/>').children.first
  end
end
set_property(name, value) click to toggle source
# File lib/rack_dav/resource.rb, line 155
def set_property(name, value)
  case name
  when 'resourcetype'    then self.resource_type = value
  when 'getcontenttype'  then self.content_type = value
  when 'getetag'         then self.etag = value
  when 'getlastmodified' then self.last_modified = Time.httpdate(value)
  else self.set_custom_property(name, value) if self.respond_to?(:set_custom_property)
  end
rescue ArgumentError
  raise HTTPStatus::Conflict
end