# File lib/chef_zero/endpoints/rest_object_endpoint.rb, line 21
      def put(request)
        # We grab the old body to trigger a 404 if it doesn't exist
        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]
        # If it's a rename, check for conflict and delete the old value
        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