def put(request)
old_body = get_data(request)
request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
key = request_json[identity_key] || request.rest_path[-1]
rename = key != request.rest_path[-1]
if rename
begin
data_store.create(request.rest_path[0..1] + request.rest_path[2..-2], key, request.body)
rescue DataStore::DataAlreadyExistsError
return error(409, "Cannot rename '#{request.rest_path[-1]}' to '#{key}': '#{key}' already exists")
end
delete_data(request)
already_json_response(201, populate_defaults(request, request.body))
else
set_data(request, request.rest_path, request.body)
already_json_response(200, populate_defaults(request, request.body))
end
end