Mocking GUIDs
Some applications use GUIDs (or UUIDs) instead of auto-incrementing integers as identifiers for their models.
Mirage supports the ability to overwrite how its database assigns IDs to new records via the IdentityManager
class. You can generate model-specific managers or an application-wide manager to customize how your database behaves.
A custom identity manager must implement these methods:
fetch
, which must return an identifier not used yet.set
, which is called with anid
of a record being insert in mirage's database.reset
, which should reset database to initial state.
Here's an example implementation for an identity manager that mocks GUIDs:
import uuidv4 from "uuid/v4"
export default class {
constructor() {
this.ids = new Set()
}
// Returns a new unused unique identifier.
fetch() {
let uuid = uuidv4()
while (this.ids.has(uuid)) {
uuid = uuidv4()
}
this.ids.add(uuid)
return uuid
}
// Registers an identifier as used. Must throw if identifier is already used.
set(id) {
if (this.ids.has(id)) {
throw new Error(`ID ${id} has already been used.`)
}
this.ids.add(id)
}
// Resets all used identifiers to unused.
reset() {
this.ids.clear()
}
}