Skip to content

Commit 0b36560

Browse files
author
David Milne
committed
Verbose logging, which we can switch off with service
1 parent 40c0eff commit 0b36560

File tree

7 files changed

+97
-53
lines changed

7 files changed

+97
-53
lines changed

ask-logic.js

Lines changed: 73 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ var AskLogic = angular.module('ask-logic', [])
3535
})
3636

3737

38-
.factory('AnswerStates', function() {
38+
.factory('AnswerStates', ['$log', function($log) {
3939

4040

4141
function isSinglechoiceAnswered(answer) {
@@ -85,32 +85,54 @@ var AskLogic = angular.module('ask-logic', [])
8585

8686
isAnswered : function(field, answer) {
8787

88-
if (!answer)
88+
if (!field) {
89+
console.warn("tried to check answer to nonexistent field") ;
8990
return false ;
91+
}
92+
93+
if (!answer) {
94+
$log.warn("tried to check undefined answer to field " + field.id)
95+
return false ;
96+
}
97+
98+
var answered = false ;
9099

91100
switch(field.type) {
92101

93102
case 'singlechoice' :
94-
return isSinglechoiceAnswered(answer) ;
103+
answered = isSinglechoiceAnswered(answer) ;
104+
break ;
95105
case 'multichoice' :
96-
return isMultichoiceAnswered(answer) ;
106+
answered = isMultichoiceAnswered(answer) ;
107+
break ;
97108
case 'numeric' :
98-
return isNumericAnswered(answer) ;
109+
answered = isNumericAnswered(answer) ;
110+
break ;
99111
case 'freetext' :
100-
return isFreetextAnswered(answer) ;
112+
answered = isFreetextAnswered(answer) ;
113+
break ;
101114
case 'mood' :
102-
return isMoodAnswered(answer) ;
115+
answered = isMoodAnswered(answer) ;
116+
break ;
117+
default :
118+
$log.warn("cannot check answer of unknown field type " + field.type + " (" + field.id + ")") ;
119+
103120
}
104121

105-
return false ;
122+
if (answered)
123+
$log.debug(field.id + " IS answered") ;
124+
else
125+
$log.debug(field.id + " IS NOT answered") ;
126+
127+
return answered ;
106128
}
107129
}
108-
})
130+
}])
109131

110132

111133

112134

113-
.factory('TriggerStates', ['Normalizer', function(Normalizer) {
135+
.factory('TriggerStates', ['$log','Normalizer', function($log, Normalizer) {
114136

115137
function isSinglechoiceTriggerFired(trigger, answer) {
116138

@@ -255,21 +277,36 @@ var AskLogic = angular.module('ask-logic', [])
255277

256278
isFired : function (trigger, field, answer) {
257279

280+
var fired = false ;
281+
258282
switch(field.type) {
259283

260284
case 'singlechoice' :
261-
return isSinglechoiceTriggerFired(trigger, answer) ;
285+
fired = isSinglechoiceTriggerFired(trigger, answer) ;
286+
break ;
262287
case 'multichoice' :
263-
return isMultichoiceTriggerFired(trigger, answer) ;
288+
fired = isMultichoiceTriggerFired(trigger, answer) ;
289+
break ;
264290
case 'numeric' :
265-
return isNumericTriggerFired(trigger, answer) ;
291+
fired = isNumericTriggerFired(trigger, answer) ;
292+
break ;
266293
case 'freetext' :
267-
return isFreetextTriggerFired(trigger, answer) ;
294+
fired = isFreetextTriggerFired(trigger, answer) ;
295+
break ;
268296
case 'mood' :
269-
return isMoodTriggerFired(trigger, answer) ;
297+
fired = isMoodTriggerFired(trigger, answer) ;
298+
break ;
299+
default :
300+
$log.warn("could not identify fire state of trigger for field type " + field.type) ;
301+
break ;
270302
}
271303

272-
return false ;
304+
if (fired)
305+
$log.debug("trigger " + JSON.stringify(trigger) + " IS fired") ;
306+
else
307+
$log.debug("trigger " + JSON.stringify(trigger) + " IS NOT fired") ;
308+
309+
return fired ;
273310
}
274311
}
275312
}])
@@ -281,7 +318,7 @@ var AskLogic = angular.module('ask-logic', [])
281318
Each SurveyState obj is instantiated with a schema and a response object, and provides methods to track what happens to the survey state
282319
(e.g current page, visible fields, etc).
283320
*/
284-
.factory('SurveyStates', ['TriggerStates', 'AnswerStates', function(TriggerStates, AnswerStates) {
321+
.factory('SurveyStates', ['$log','TriggerStates', 'AnswerStates', function($log, TriggerStates, AnswerStates) {
285322

286323

287324
function SurveyState(schema, response) {
@@ -574,12 +611,17 @@ var AskLogic = angular.module('ask-logic', [])
574611

575612
SurveyState.prototype.handleAnswerChanged = function(fieldId) {
576613

577-
//console.log("Answer changed:" + fieldId) ;
614+
$log.debug("answer changed for " + fieldId) ;
578615

579616
var field = this.fieldsById[fieldId] ;
580617
var answer = this.response.answers[fieldId] ;
581618

582-
//console.log(this.response) ;
619+
620+
if (field == undefined) {
621+
$log.warn("Could not find field " + fieldId) ;
622+
return ;
623+
}
624+
583625

584626
field.answered = AnswerStates.isAnswered(field, answer) ;
585627

@@ -588,7 +630,7 @@ var AskLogic = angular.module('ask-logic', [])
588630

589631
_.each(field.relevantTriggers, function(trigger) {
590632

591-
//console.log("checking trigger: " + trigger.fieldRuleIndex);
633+
$log.debug(" checking trigger: " + trigger.fieldRuleIndex);
592634

593635
var triggerFired = TriggerStates.isFired(trigger, field, answer) ;
594636

@@ -603,9 +645,8 @@ var AskLogic = angular.module('ask-logic', [])
603645

604646
SurveyState.prototype.handleTriggerStateChanged = function(trigger) {
605647

606-
//console.log("trigger state changed") ;
607-
//console.log(trigger);
608-
648+
$log.debug("state changed for trigger: " + JSON.stringify(trigger)) ;
649+
609650
var ruleType, rule ;
610651

611652
if (trigger.fieldRuleIndex != null) {
@@ -655,13 +696,15 @@ var AskLogic = angular.module('ask-logic', [])
655696

656697
SurveyState.prototype.handleFieldRuleStateChanged = function(rule) {
657698

658-
//console.log("fieldRule state changed to " + rule.fired) ;
699+
700+
701+
$log.debug("field rule state changed to " + rule.fired) ;
659702

660703
_.each(rule.actions, function(action) {
661704

662705
var field = this.fieldsById[action.fieldId] ;
663706

664-
//console.log(" - handling action to " + action.action + " " + action.fieldId) ;
707+
$log.debug(" - handling action to " + action.action + " " + action.fieldId) ;
665708

666709
if (action.action == 'show') {
667710
if (rule.fired)
@@ -678,23 +721,23 @@ var AskLogic = angular.module('ask-logic', [])
678721
//if a field gets hidden, wipe any answers to it
679722
if (field.fieldRuleState == "hide") {
680723
if (AnswerStates.isAnswered(field, this.response.answers[field.id])) {
681-
//console.log("Recursively clearing answer to " + field.id) ;
724+
725+
$log.debug("Recursively clearing answer to " + field.id) ;
726+
682727
this.response.answers[field.id] = {} ;
683728
this.handleAnswerChanged(field.id) ;
684729
}
685730
}
686731

687732
this.updateVisibility(field) ;
688733

689-
//console.log(" - " + field.fieldRuleState) ;
690-
691734
}, this) ;
692735
}
693736

694737
SurveyState.prototype.handlePageRuleStateChanged = function(rule) {
695738

696-
//console.log("rule state changed")
697-
//console.log(rule) ;
739+
$log.debug("page rule state changed to " + rule.fired) ;
740+
$log.debug(rule) ;
698741

699742
//identify earliest effected page, which is the next page after the last trigger
700743
var earliestEffectedPageIndex ;
@@ -707,8 +750,6 @@ var AskLogic = angular.module('ask-logic', [])
707750
}, this) ;
708751
earliestEffectedPageIndex ++ ;
709752

710-
//console.log("earliestEffectedPageIndex=" + earliestEffectedPageIndex) ;
711-
712753
_.each(rule.actions, function(action) {
713754

714755
switch (action.action) {

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ask-logic",
3-
"version": "0.0.1",
3+
"version": "0.0.5",
44
"dependencies": {
55
"angular": "latest",
66
"lodash": "latest"

karma.conf.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ module.exports = function(config) {
1919
'bower_components/lodash/dist/lodash.js',
2020
'bower_components/angular-mocks/angular-mocks.js',
2121
'bower_components/angular-resource/angular-resource.js',
22-
2322
'ask-logic.js',
24-
'test/**/*.js',
23+
'test/*.js',
2524

2625
{pattern: 'test/schemas/*.json', watched: true, served: true, included: false}
2726
],

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "angular-ask-2",
2+
"name": "ask-logic-testing",
33
"version": "0.0.0",
44
"description": "",
55
"main": "index.js",

test/chatScript-spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ describe('chatScript', function() {
130130
response.answers["qAge"] = {number:12} ;
131131
state.handleAnswerChanged("qAge") ;
132132
state.handleContinue() ;
133-
debugger;
134133
expect(response.completed).toEqual(true) ;
135134

136135
state.handleBack() ;

test/chatVisitorFeedback-spec.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ describe('chatVisitorFeedback', function() {
22

33
var SurveyStates ;
44

5-
beforeEach(function() {
6-
7-
module('ask-logic') ;
85

9-
inject(function ($injector) {
10-
SurveyStates = $injector.get('SurveyStates') ;
11-
}) ;
6+
beforeEach(module('ask-logic', function($provide) {
127

13-
jasmine.getJSONFixtures().fixturesPath='base/test/schemas';
8+
$provide.value('$log', console);
149

10+
jasmine.getJSONFixtures().fixturesPath='base/test/schemas';
1511
schema = getJSONFixture('chatVisitorFeedback.json') ;
12+
})) ;
1613

14+
beforeEach(function() {
15+
16+
inject(function ($injector) {
17+
SurveyStates = $injector.get('SurveyStates') ;
18+
}) ;
1719
}) ;
1820

1921
describe('initialization', function() {
@@ -47,6 +49,8 @@ describe('chatVisitorFeedback', function() {
4749
expect(state.fieldRules.length).toEqual(2) ;
4850
})
4951

52+
53+
5054
}) ;
5155

5256

test/genderAndParenthood-spec.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@ describe('genderAndParenthood', function() {
22

33
var SurveyStates ;
44

5-
beforeEach(function() {
5+
beforeEach(module('ask-logic', function($provide) {
66

7-
module('ask-logic') ;
7+
$provide.value('$log', console);
88

9-
inject(function ($injector) {
10-
SurveyStates = $injector.get('SurveyStates') ;
11-
}) ;
9+
jasmine.getJSONFixtures().fixturesPath='base/test/schemas';
10+
schema = getJSONFixture('genderAndParenthood.json') ;
1211

13-
jasmine.getJSONFixtures().fixturesPath='base/test/schemas';
12+
})) ;
1413

15-
schema = getJSONFixture('genderAndParenthood.json') ;
14+
beforeEach(
1615

17-
}) ;
16+
inject(function ($injector) {
17+
SurveyStates = $injector.get('SurveyStates') ;
18+
})
19+
);
1820

1921
it ("Should inject blank answers for question fields", function() {
2022

@@ -33,7 +35,6 @@ describe('genderAndParenthood', function() {
3335

3436
//can skip right to end if user doesn't give a gender,
3537
//and then skip right back to start if they ask to go back
36-
3738
var response = {
3839
answers:{
3940
qGender:{choice:"I'd rather not say"},

0 commit comments

Comments
 (0)