def put(request)
old_body = get_data(request)
request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
key = identity_keys.map { |k| request_json[k] }.select { |v| v }.first
key ||= request.rest_path[-1]
rename = key != request.rest_path[-1]
if rename
begin
create_data(request, request.rest_path[0..-2], key, request.body, :data_store_exceptions)
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