Skip to content

Commit fbb2368

Browse files
authored
Merge pull request #149 from gregolsky/v4.0
add readme examples for new features
2 parents 223f548 + 801d4fe commit fbb2368

File tree

4 files changed

+132
-2
lines changed

4 files changed

+132
-2
lines changed

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44

55
## Changelog
66

7+
### 4.0.3 - 2018-10-01
8+
Added support for the following features:
9+
- [Streaming](#streaming)
10+
- More like this
11+
- [Suggestions](#suggestions)
12+
- [Revisions](#revisions)
13+
714
### 4.0.2 - 2018-09-14
815
Added support for the following features:
916
- [Attachments](#attachments)
@@ -666,6 +673,73 @@ queryStream.on("error", err => {
666673

667674
```
668675

676+
### Revisions
677+
NOTE: Please make sure revisions are enabled before trying one of the below.
678+
679+
```javascript
680+
const session = store.openSession();
681+
const user = {
682+
name: "Marcin",
683+
age: 30,
684+
pet: "users/4"
685+
};
686+
687+
await session.store(user, "users/1");
688+
await session.saveChanges();
689+
690+
// modify doc to create a new revision
691+
user.name = "Roman";
692+
user.age = 40;
693+
await session.saveChanges();
694+
695+
// get revisions
696+
const revisions = await session.advanced.revisions.getFor("users/1");
697+
// [ { name: 'Roman',
698+
// age: 40,
699+
// pet: 'users/4',
700+
// '@metadata': [Object],
701+
// id: 'users/1' },
702+
// { name: 'Marcin',
703+
// age: 30,
704+
// pet: 'users/4',
705+
// '@metadata': [Object],
706+
// id: 'users/1' } ]
707+
```
708+
709+
### Suggestions
710+
```javascript
711+
// Having data:
712+
// [ User {
713+
// name: 'John',
714+
// age: 30,
715+
// registeredAt: 2017-11-10T23:00:00.000Z,
716+
// kids: [Array],
717+
// id: 'users/1-A' },
718+
// User {
719+
// name: 'Stefanie',
720+
// age: 25,
721+
// registeredAt: 2015-07-29T22:00:00.000Z,
722+
// id: 'users/2-A' } ]
723+
724+
// and a static index like:
725+
class UsersIndex extends AbstractIndexCreationTask {
726+
constructor() {
727+
super();
728+
this.map = "from doc in docs.Users select new { doc.name }";
729+
this.suggestion("name");
730+
}
731+
}
732+
733+
// ...
734+
735+
const session = store.openSession();
736+
const suggestionQueryResult = await session.query({ collection: "users" })
737+
.suggestUsing(x => x.byField("name", "Jon"))
738+
.execute();
739+
// { name: { name: 'name', suggestions: [ 'john' ] } }
740+
```
741+
742+
669743
## Using object literals for entities
670744

671745
In order to comfortably use object literals as entities set function getting collection name based on the content of the object - `store.conventions.

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ravendb",
3-
"version": "4.0.2",
3+
"version": "4.0.3",
44
"description": "RavenDB client for Node.js",
55
"files": [
66
"dist/"

test/Documents/ReadmeSamples.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
IDocumentSession,
1212
QueryStatistics,
1313
StreamQueryStatistics,
14+
AbstractIndexCreationTask,
1415
} from "../../src";
1516
import { TypeUtil } from "../../src/Utility/TypeUtil";
1617

@@ -360,6 +361,10 @@ describe("Readme query samples", function () {
360361
// ...
361362
});
362363

364+
userStream.on("end", () => {
365+
assert.ok(result.length);
366+
});
367+
363368
await new Promise((resolve, reject) => {
364369
stream.finished(userStream, err => {
365370
err ? reject(err) : resolve();
@@ -369,12 +374,14 @@ describe("Readme query samples", function () {
369374

370375
it("can stream query and get stats", async () => {
371376
let stats: StreamQueryStatistics;
377+
const items = [];
372378
query = session.query({ collection: "users" })
373379
.whereGreaterThan("age", 29);
374380
const queryStream = await session.advanced.stream(query, _ => stats = _);
375381

376382
queryStream.on("data", user => {
377383
print(user);
384+
items.push(user);
378385
// ...
379386
});
380387

@@ -386,6 +393,7 @@ describe("Readme query samples", function () {
386393
await new Promise((resolve, reject) => {
387394
queryStream.on("end", () => {
388395
try {
396+
assert.ok(items.length);
389397
assert.ok(stats);
390398
assert.strictEqual(stats.totalResults, 1);
391399
assert.strictEqual(stats.indexName, "Auto/users/Byage");
@@ -399,6 +407,54 @@ describe("Readme query samples", function () {
399407
});
400408
});
401409

410+
it("can suggest", async () => {
411+
class UsersIndex extends AbstractIndexCreationTask {
412+
constructor() {
413+
super();
414+
this.map = "from doc in docs.Users select new { doc.name }";
415+
this.suggestion("name");
416+
}
417+
}
418+
419+
await store.executeIndex(new UsersIndex());
420+
await testContext.waitForIndexing(store);
421+
422+
{
423+
const session = store.openSession();
424+
const suggestionQueryResult = await session.query({ indexName: "UsersIndex" })
425+
.suggestUsing(x => x.byField("name", "Jon"))
426+
.execute();
427+
assert.strictEqual(suggestionQueryResult.name.suggestions.length, 1);
428+
}
429+
});
430+
431+
});
432+
433+
describe("with revisions set up", function() {
434+
435+
beforeEach(async () => testContext.setupRevisions(store, false, 5));
436+
437+
it("can get revisions", async () => {
438+
439+
const session = store.openSession();
440+
441+
const user = {
442+
name: "Marcin",
443+
age: 30,
444+
pet: "users/4"
445+
};
446+
447+
await session.store(user, "users/1");
448+
await session.saveChanges();
449+
450+
user.name = "Roman";
451+
user.age = 40;
452+
await session.saveChanges();
453+
454+
const revisions = await session.advanced.revisions.getFor("users/1");
455+
assert.strictEqual(revisions.length, 2);
456+
});
457+
402458
});
403459

404460
async function prepareUserDataSet(store: IDocumentStore) {

0 commit comments

Comments
 (0)