Documentation
¶
Overview ¶
Package memdocstore provides an in-process in-memory implementation of the docstore API. It is suitable for local development and testing.
Every document in a memdocstore collection has a unique primary key. The primary key values need not be strings; they may be any comparable Go value.
Action Lists ¶
Action lists are executed concurrently. Each action in an action list is executed in a separate goroutine.
memdocstore calls the BeforeDo function of an ActionList once before executing the actions. Its As function never returns true.
URLs ¶
For docstore.OpenCollection, memdocstore registers for the scheme "mem". To customize the URL opener, or for more details on the URL format, see URLOpener. See https://github.com/cornelk/go-cloud/concepts/urls/ for background information.
Example (OpenCollectionFromURL) ¶
package main
import (
"context"
"log"
"github.com/cornelk/go-cloud/docstore"
)
func main() {
// PRAGMA: This example is used on github.com/cornelk/go-cloud; PRAGMA comments adjust how it is shown and can be ignored.
// PRAGMA: On github.com/cornelk/go-cloud, add a blank import: _ "github.com/cornelk/go-cloud/docstore/memdocstore"
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
ctx := context.Background()
// docstore.OpenCollection creates a *docstore.Collection from a URL.
coll, err := docstore.OpenCollection(ctx, "mem://collection/keyField")
if err != nil {
log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
Output:
Index ¶
Examples ¶
Constants ¶
const Scheme = "mem"
Scheme is the URL scheme memdocstore registers its URLOpener under on docstore.DefaultMux.
Variables ¶
This section is empty.
Functions ¶
func OpenCollection ¶
func OpenCollection(keyField string, opts *Options) (*docstore.Collection, error)
OpenCollection creates a *docstore.Collection backed by memory. keyField is the document field holding the primary key of the collection.
Example ¶
package main
import (
"log"
"github.com/cornelk/go-cloud/docstore/memdocstore"
)
func main() {
// PRAGMA: This example is used on github.com/cornelk/go-cloud; PRAGMA comments adjust how it is shown and can be ignored.
coll, err := memdocstore.OpenCollection("keyField", nil)
if err != nil {
log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
Output:
func OpenCollectionWithKeyFunc ¶
func OpenCollectionWithKeyFunc(keyFunc func(docstore.Document) interface{}, opts *Options) (*docstore.Collection, error)
OpenCollectionWithKeyFunc creates a *docstore.Collection backed by memory. keyFunc takes a document and returns the document's primary key. It should return nil if the document is missing the information to construct a key. This will cause all actions, even Create, to fail.
For the collection to be usable with Query.Delete and Query.Update, keyFunc must work with map[string]interface{} as well as whatever struct type the collection normally uses (if any).
Example ¶
package main
import (
"log"
"github.com/cornelk/go-cloud/docstore"
"github.com/cornelk/go-cloud/docstore/memdocstore"
)
func main() {
// PRAGMA: This example is used on github.com/cornelk/go-cloud; PRAGMA comments adjust how it is shown and can be ignored.
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
type HighScore struct {
Game string
Player string
}
// The name of a document is constructed from the Game and Player fields.
nameFromDocument := func(doc docstore.Document) interface{} {
hs := doc.(*HighScore)
return hs.Game + "|" + hs.Player
}
coll, err := memdocstore.OpenCollectionWithKeyFunc(nameFromDocument, nil)
if err != nil {
log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
Output:
Types ¶
type Options ¶
type Options struct {
// The name of the field holding the document revision.
// Defaults to docstore.DefaultRevisionField.
RevisionField string
// The maximum number of concurrent goroutines started for a single call to
// ActionList.Do. If less than 1, there is no limit.
MaxOutstandingActions int
// The filename associated with this collection.
// When a collection is opened with a non-nil filename, the collection
// is loaded from the file if it exists. Otherwise, an empty collection is created.
// When the collection is closed, its contents are saved to the file.
Filename string
// contains filtered or unexported fields
}
Options are optional arguments to the OpenCollection functions.
type URLOpener ¶
type URLOpener struct {
// contains filtered or unexported fields
}
URLOpener opens URLs like "mem://collection/_id".
The URL's host is the name of the collection. The URL's path is used as the keyField.
The following query parameters are supported:
- revision_field (optional): the name of the revision field.
- filename (optional): the filename to store the collection in.
func (*URLOpener) OpenCollectionURL ¶
func (o *URLOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error)
OpenCollectionURL opens a docstore.Collection based on u.