README
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', {
// define the root of where this collection lives
root: 'users',
// provide a function that tells the factory how to calculate ids for the
// newly generated users n is a number that gets incremented with every factory
// of this type that gets created
id: (n, options) => {
return `test-user-${id}`
},
// provide a function that returns an object which will be used as the user record
attributes: (n, options) => {
const defaults = {info: {name: `User ${n}`, uid: `test-uid-${n}`}}
if (options.isAdmin) {
defaults.info.admin = true
}
return defaults
},
// return a promise that gets called after the user is saved
// this is useful for setting up other records that need to
// exist in order to look up the user id
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 definitionoverrides
is an object that will override the defaultattributes
from your factory definitionoptions
is an object that will get passed into theattributes
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