123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- var Emitter = require('./Emitter');
- var each = require('./each');
- var some = require('./some');
- var toArr = require('./toArr');
- exports = Emitter.extend({
- className: 'State',
- initialize: function(initial, events) {
- this.callSuper(Emitter, 'initialize');
- this.current = initial;
- var self = this;
- each(events, function(event, key) {
- self[key] = buildEvent(key, event);
- });
- },
- is: function(state) {
- return this.current === state;
- }
- });
- function buildEvent(name, event) {
- var from = toArr(event.from);
- var to = event.to;
- return function() {
- var args = toArr(arguments);
- args.unshift(name);
- var hasEvent = some(
- from,
- function(val) {
- return this.current === val;
- },
- this
- );
- if (hasEvent) {
- this.current = to;
- this.emit.apply(this, args);
- } else {
- this.emit(
- 'error',
- new Error(this.current + ' => ' + to + ' error'),
- name
- );
- }
- };
- }
- module.exports = exports;
|