module OMGDAV::Delete

Public Instance Methods

call_delete(env) click to toggle source
# File lib/omgdav/delete.rb, line 54
def call_delete(env)
  # makes litmus happy with the "delete_fragment" test
  # FRAGMENT may be set by Mongrel and descendents (unicorn/thin)
  env["FRAGMENT"] and return r(400)

  parts = path_split(env)
  node = node_resolve(parts) or return r(404)
  node[:parent_id] == 0 and return r(403)
  delete_entry(node, {})

  r(204)
end
delete_collection(node, cache) click to toggle source
# File lib/omgdav/delete.rb, line 20
def delete_collection(node, cache)
  queue = [ node ]
  q = { domain_id: @domain_id }

  while cur_node = queue.pop
    q[:parent_id] = cur_node[:id]

    begin
      state = :done
      @db[:paths].where(q).limit(@sql_limit).each do |child_node|
        if child_node[:collection]
          queue << cur_node
          queue << child_node
          state = :descend
          break
        else
          delete_file(child_node, cache)
          state = :continue
        end
      end
    end while state == :continue

    node_delete(cur_node) if state == :done
  end
end
delete_entry(node, cache) click to toggle source
# File lib/omgdav/delete.rb, line 46
def delete_entry(node, cache)
  if node[:collection]
    delete_collection(node, cache)
  else
    delete_file(node, cache)
  end
end
delete_file(node, cache) click to toggle source
# File lib/omgdav/delete.rb, line 11
def delete_file(node, cache)
  node_delete(node)
  key = node_to_key(node, cache)
  cache_invalidate(key)
  @mogc.delete(key)
rescue MogileFS::Backend::UnknownKeyError
  warn "key=#{key.inspect} missing on delete from domain=#{@mogc.domain}"
end