From 075dd51c468cadf4f34849797ac88fea8e545bb0 Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Tue, 22 Mar 2016 13:39:13 +0100 Subject: [PATCH 1/9] (update) added event argument hitchhiking --- spec/stateMachineSpecs.js | 13 +++++++++++++ stateMachine.js | 10 +++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/spec/stateMachineSpecs.js b/spec/stateMachineSpecs.js index 0be8808..5c29255 100644 --- a/spec/stateMachineSpecs.js +++ b/spec/stateMachineSpecs.js @@ -113,6 +113,19 @@ ok(_out); }); + test('enter methods is called with event arguments', function () { + var _in; + newStates.build() + .state('simple', { + enter: function (data) { _in = data } + }) + .event('fall', 'young', 'simple') + ; + + newStates.fall({some: 'data'}); + q.equal(_in, [{some: 'data'}]); + }); + test('does not overwrite existing properties', function () { var st = states(function () { this.state('simple'); diff --git a/stateMachine.js b/stateMachine.js index 43d4c84..a0839f6 100644 --- a/stateMachine.js +++ b/stateMachine.js @@ -61,7 +61,7 @@ function buildEventShortcut(name) { states[name] = states[name] || function () { - states.trigger(name); + states.trigger(name, arguments); }; } @@ -114,18 +114,18 @@ return curr && curr.name; } - , setState: function (name) { + , setState: function (name, args) { var prev = me.currentState(true); currentState = me._states[name]; me.onChange(me.currentState(), prev.name); - is(currentState.enter, 'Function') && currentState.enter(); + is(currentState.enter, 'Function') && currentState.enter(args); is(prev.leave, 'Function') && prev.leave(); } - , trigger: function (eventName) { + , trigger: function (eventName, args) { var nextState = me.currentState(true).events[eventName]; - nextState && me.setState(nextState); + nextState && me.setState(nextState, args); } , _states: {} From 38da5ea0207f44081d40c430503653f4492296bc Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Tue, 22 Mar 2016 16:12:33 +0100 Subject: [PATCH 2/9] (update) test argument object --- spec/stateMachineSpecs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/stateMachineSpecs.js b/spec/stateMachineSpecs.js index 5c29255..94ef9d1 100644 --- a/spec/stateMachineSpecs.js +++ b/spec/stateMachineSpecs.js @@ -123,7 +123,7 @@ ; newStates.fall({some: 'data'}); - q.equal(_in, [{some: 'data'}]); + q.equal(_in, {'0': {some: 'data'}}); }); test('does not overwrite existing properties', function () { From 4ff594cb9f5d51a18a76b6a543dc4220910cd125 Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Wed, 23 Mar 2016 09:50:30 +0100 Subject: [PATCH 3/9] (update) typo --- spec/stateMachineSpecs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/stateMachineSpecs.js b/spec/stateMachineSpecs.js index 94ef9d1..78dd780 100644 --- a/spec/stateMachineSpecs.js +++ b/spec/stateMachineSpecs.js @@ -113,7 +113,7 @@ ok(_out); }); - test('enter methods is called with event arguments', function () { + test('enter method is called with event method parameters', function () { var _in; newStates.build() .state('simple', { From e80cfe3e521ff57cbc5d29fd73feb9d261a231a2 Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Wed, 23 Mar 2016 12:08:56 +0100 Subject: [PATCH 4/9] (update) package.json --- package.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d906aa4..755d74a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,12 @@ , "author": { "name": "Michael Wheeler" } -, "version": "0.0.3" +, "contributors": [ + { + "name": "Dave Timmerman" + } + ] +, "version": "0.0.4" , "licenses": [ { "type": "MIT" From 8672c5be9667d0c80d9eea797439008d5a91694d Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Wed, 23 Mar 2016 16:54:24 +0100 Subject: [PATCH 5/9] (update) arguments apply() on enter method --- spec/stateMachineSpecs.js | 14 +++++++++----- stateMachine.js | 6 ++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spec/stateMachineSpecs.js b/spec/stateMachineSpecs.js index 78dd780..5d6a87d 100644 --- a/spec/stateMachineSpecs.js +++ b/spec/stateMachineSpecs.js @@ -114,16 +114,20 @@ }); test('enter method is called with event method parameters', function () { - var _in; + var _in1, _in2; newStates.build() .state('simple', { - enter: function (data) { _in = data } + enter: function (str, data) { + _in1 = str; + _in2 = data; + } }) - .event('fall', 'young', 'simple') + .event('withParams', 'young', 'simple') ; - newStates.fall({some: 'data'}); - q.equal(_in, {'0': {some: 'data'}}); + newStates.withParams('a string', {some: 'data'}); + q.equal(_in1, 'a string'); + q.equal(_in2, {some: 'data'}); }); test('does not overwrite existing properties', function () { diff --git a/stateMachine.js b/stateMachine.js index a0839f6..b651ecb 100644 --- a/stateMachine.js +++ b/stateMachine.js @@ -61,7 +61,9 @@ function buildEventShortcut(name) { states[name] = states[name] || function () { - states.trigger(name, arguments); + var args = Array.prototype.slice.call(arguments); + var arr = args.sort(); + states.trigger(name, arr); }; } @@ -119,7 +121,7 @@ currentState = me._states[name]; me.onChange(me.currentState(), prev.name); - is(currentState.enter, 'Function') && currentState.enter(args); + is(currentState.enter, 'Function') && currentState.enter.apply(undefined, args); is(prev.leave, 'Function') && prev.leave(); } From d19ecc050018ce904440c4c97cb99d654477094b Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Thu, 24 Mar 2016 15:20:13 +0100 Subject: [PATCH 6/9] (update) added args to onChange --- stateMachine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stateMachine.js b/stateMachine.js index b651ecb..9d0ce80 100644 --- a/stateMachine.js +++ b/stateMachine.js @@ -120,7 +120,7 @@ var prev = me.currentState(true); currentState = me._states[name]; - me.onChange(me.currentState(), prev.name); + me.onChange(me.currentState(), prev.name, args); is(currentState.enter, 'Function') && currentState.enter.apply(undefined, args); is(prev.leave, 'Function') && prev.leave(); } From 9df09f89fd60f51f42a429cead87ca27108d1e78 Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Thu, 24 Mar 2016 16:07:13 +0100 Subject: [PATCH 7/9] (update) added stateName to end of args --- stateMachine.js | 1 + 1 file changed, 1 insertion(+) diff --git a/stateMachine.js b/stateMachine.js index 9d0ce80..f6c1f7a 100644 --- a/stateMachine.js +++ b/stateMachine.js @@ -121,6 +121,7 @@ currentState = me._states[name]; me.onChange(me.currentState(), prev.name, args); + args.push(me.currentState()) is(currentState.enter, 'Function') && currentState.enter.apply(undefined, args); is(prev.leave, 'Function') && prev.leave(); } From db97cad189db0a0857de6186b7ebe24322f8d256 Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Thu, 24 Mar 2016 16:14:15 +0100 Subject: [PATCH 8/9] (update) added test --- spec/stateMachineSpecs.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spec/stateMachineSpecs.js b/spec/stateMachineSpecs.js index 5d6a87d..365b21b 100644 --- a/spec/stateMachineSpecs.js +++ b/spec/stateMachineSpecs.js @@ -130,6 +130,21 @@ q.equal(_in2, {some: 'data'}); }); + test('eventName is added to enter method parameters', function () { + var _in; + newStates.build() + .state('simple', { + enter: function (str, data, name) { + _in = name; + } + }) + .event('withParams', 'young', 'simple') + ; + + newStates.withEventName('a string', {some: 'data'}); + q.equal(_in, 'simple'); + }); + test('does not overwrite existing properties', function () { var st = states(function () { this.state('simple'); From ad05d32ec962c7647d5449dc3e58f0c68e5374bd Mon Sep 17 00:00:00 2001 From: Dave Timmerman Date: Fri, 25 Mar 2016 12:43:28 +0100 Subject: [PATCH 9/9] (fixed) first leave prev, then enter next --- stateMachine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stateMachine.js b/stateMachine.js index f6c1f7a..c549f3c 100644 --- a/stateMachine.js +++ b/stateMachine.js @@ -121,9 +121,9 @@ currentState = me._states[name]; me.onChange(me.currentState(), prev.name, args); - args.push(me.currentState()) - is(currentState.enter, 'Function') && currentState.enter.apply(undefined, args); + args.push(me.currentState()); is(prev.leave, 'Function') && prev.leave(); + is(currentState.enter, 'Function') && currentState.enter.apply(undefined, args); } , trigger: function (eventName, args) {