private void PutDocument(string key, JsObject doc, JsObject meta)
{
if (doc == null)
{
throw new InvalidOperationException(
string.Format("Created document cannot be null or empty. Document key: '{0}'", key));
}
var newDocument = new JsonDocument
{
Key = key,
DataAsJson = ToRavenJObject(doc)
};
if (meta == null)
{
RavenJToken value;
if (newDocument.DataAsJson.TryGetValue("@metadata", out value))
{
newDocument.DataAsJson.Remove("@metadata");
newDocument.Metadata = (RavenJObject) value;
}
}
else
{
foreach (var etagKeyName in EtagKeyNames)
{
JsInstance result;
if (!meta.TryGetProperty(etagKeyName, out result))
continue;
string etag = result.ToString();
meta.Delete(etagKeyName);
if (string.IsNullOrEmpty(etag))
continue;
Etag newDocumentEtag;
if (Etag.TryParse(etag, out newDocumentEtag) == false)
{
throw new InvalidOperationException(string.Format("Invalid ETag value '{0}' for document '{1}'",
etag, key));
}
newDocument.Etag = newDocumentEtag;
}
newDocument.Metadata = ToRavenJObject(meta);
}
ValidateDocument(newDocument);
CreatedDocs.Add(newDocument);
}