Skip to content

Instantly share code, notes, and snippets.

@nate-strauser
Created September 5, 2015 04:13
Show Gist options
  • Save nate-strauser/a1b23aa336894110ee6f to your computer and use it in GitHub Desktop.
Save nate-strauser/a1b23aa336894110ee6f to your computer and use it in GitHub Desktop.
State machine example
var events = [
{ name: 'approve', from: 'pending', to: 'approved' },
{ name: 'reject', from: 'pending', to: 'rejected' },
{ name: 'fail', from: '*', to: 'failed' }
];
var callbacks = {
onapprove: function(event, from, to, order) {
var setObject = {
'approvedAt': new Date(),
'state': to
};
//do anything else needed to approve this post
Posts.update(order._id, {
$set: setObject
});
}
},
.....
onfail: function(event, from, to, order, error) {
Posts.update(order._id, {$set: {
'error': JSON.stringify(error),
'errorMessage':errorMessage,
'state': to
}});
}
};
getPostStateMachine = function(postId){
var post = Posts.findOne(postId,{fields:{state:1}});
//look up the current object to ensure we have a 'fresh' state
if(post)
return StateMachine.create({
initial: post.state,
events: events,
callbacks: callbacks
});
};
//////////
from a client event call
getPostStateMachine(post._id).pay(post);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment