Note: this readme is a work in progress
Package manipulate provides everything needed to perform CRUD operations on an elemental based data model.
The main interface is Manipulator
. This interface provides various methods for
creation, modification, retrieval and so on.
A Manipulator works with elemental.Identifiable
.
The storage engine used by a Manipulator is abstracted. By default manipulate provides implementations for Mongo, ReST HTTP 1and a Memory backed datastore. You can of course implement Your own storage implementation.
There is also a mocking package called maniptest to make it easy to mock any manipulator implementation for unit testing.
Each method of a Manipulator is taking a manipulate.Context
as argument. The
context is used to pass additional informations like a Filter, or some
Parameters.
// Create a User from a generated Elemental model.
user := models.NewUser() // always use the initializer to get various default value correctly set.
user.FullName := "Antoine Mercadal"
user.Login := "primalmotion"
// Create Mongo Manipulator.
m := manipmongo.New("127.0.0.1", "test")
// Then create the User.
m.Create(nil, user)
// Create a Context with a filter.
ctx := manipulate.NewContextWithFilter(elemental.NewFilterComposer().
WithKey("login").Equals("primalmotion").
Done(),
)
// Retrieve the users matching the filter.
var users models.UserLists
m.RetrieveMany(ctx, &users)