Firebase Factories
Define factories for your models and use the factory to save data to your firebase.
Example
- Define a factory with
factories.define
- Use this factory definition to create and save new data to firebase
factories.define
const factories = require('firebase-factories')({firebase: new Firebase(<my-firebase-root>)})
const UserFactory = factories.define('User', {
root: 'users',
id: (n, options) => {
return `test-user-${id}`
},
attributes: (n, options) => {
const defaults = {info: {name: `User ${n}`, uid: `test-uid-${n}`}}
if (options.isAdmin) {
defaults.info.admin = true
}
return defaults
},
afterSave: (n, options, user) => {
return firebase.child(`uids/${user.info.uid}`).set(user.$id)
}
})
Create and save data
- Use the
Factory.create(overrides = {}, options = {})
method on your factory definition
overrides
is an object that will override the default attributes
from your factory definitionoptions
is an object that will get passed into the attributes
function. See example usage for creating regular users vs. creating admin users.
- These new objects will get saved to firebase with whatever you return from the
attributes
function in the factory definition. - There will be two other properties attached to these saved records:
$id
: the id of the object$save
: a function that returns a promise that resolves after the record is saved and the afterSave() callback is completed
const userRegular = UserFactory.create()
const userAdmin = UserFactory.create({}, {isAdmin: true})
const userJane = UserFactory.create({info: {name: 'Jane'}})
Promise.all([
userRegular.$save(),
userAdmin.$save(),
userJane.$save(),
]).then((values) => {
console.log('All the users have been saved')
console.log(userRegular.$id, userRegular.info.name)
console.log(userAdmin.$id, userAdmin.info.name)
console.log(userJane.$id, userJane.info.name)
})
TODO
- tests (use firebase-server to create tests)
- js standard