ember-data-factory-guy 0.9.10 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e79cf8c600cf6d977adb4d9c988e0d31486785a
4
- data.tar.gz: 64dd2732df1804268becf7d76c3f3c593d05be12
3
+ metadata.gz: e855e2ca1b850446f44ca658109ecb36dadee68d
4
+ data.tar.gz: 45a768f6054ac593b17264a108dbf4bf7d576fa3
5
5
  SHA512:
6
- metadata.gz: d3b8ab0f269111f6b6583e4cae4936e3e7b3f055a1ae56bb2128494d61729790172fe6f5768f94f6a810077918fdfb9adf34502d5dc391ff07464e19c767ce25
7
- data.tar.gz: f2dba9d3a2e780cd58afadf3f32c913924a53e927c7c36886f8906116dc6497ffcdc39f80c437ff6920ff50406a31f6bd035feb7f0f7a89a9b246a36044a3d7d
6
+ metadata.gz: 27d190e0cb7914401149537061468ad75398c39618620d61360ae1819db71bf881c42aa0472bbff30900a2b5efee76396459720f8685717bf3e54fff99b5cade
7
+ data.tar.gz: 90e4cb0bc2b6613363aa8f0f0dbb13436367cf800f6cb2876429b94b9e5599c1302c51578997fa4ebf7d77498cf39725fe4934d35575cd77d809e90018785b8e
data/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.9.10",
3
+ "version": "0.9.11",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -98,8 +98,9 @@ var ModelDefinition = function (model, config) {
98
98
  // If it's an object and it's a model association attribute, build the json
99
99
  // for the association and replace the attribute with that json
100
100
  if (FactoryGuy.getStore()) {
101
- if (FactoryGuy.isAttributeRelationship(this.model, attribute)) {
102
- fixture[attribute] = FactoryGuy.build(attribute, fixture[attribute]);
101
+ var relationship = FactoryGuy.getAttributeRelationship(this.model, attribute);
102
+ if (relationship) {
103
+ fixture[attribute] = FactoryGuy.build(relationship.typeKey, fixture[attribute]);
103
104
  }
104
105
  } else {
105
106
  // For legacy reasons, if the store is not set in FactoryGuy, keep
@@ -222,11 +223,7 @@ var FactoryGuy = {
222
223
  @param {Object} config your model definition
223
224
  */
224
225
  define: function (model, config) {
225
- if (this.modelDefinitions[model]) {
226
- this.modelDefinitions[model].merge(config);
227
- } else {
228
- this.modelDefinitions[model] = new ModelDefinition(model, config);
229
- }
226
+ this.modelDefinitions[model] = new ModelDefinition(model, config);
230
227
  },
231
228
  /**
232
229
  Setting the store so FactoryGuy can do some model introspection.
@@ -245,14 +242,15 @@ var FactoryGuy = {
245
242
  @param {String} attribute attribute you want to check
246
243
  @returns {Boolean} true if the attribute is a relationship, false if not
247
244
  */
248
- isAttributeRelationship: function(typeName, attribute) {
245
+ getAttributeRelationship: function(typeName, attribute) {
249
246
  if (!this.store) {
250
247
  Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures")
251
248
  // The legacy value was true.
252
249
  return true;
253
250
  }
254
251
  var model = this.store.modelFor(typeName);
255
- return !!model.typeForRelationship(attribute);
252
+ var relationship = model.typeForRelationship(attribute);
253
+ return !!relationship ? relationship : null;
256
254
  },
257
255
  /**
258
256
  Used in model definitions to declare use of a sequence. For example:
@@ -575,6 +573,7 @@ var FactoryGuy = {
575
573
  };
576
574
 
577
575
  var MockCreateRequest = function(url, store, modelName, options) {
576
+ var status = options.status;
578
577
  var succeed = options.succeed === undefined ? true : options.succeed;
579
578
  var matchArgs = options.match;
580
579
  var returnArgs = options.returns;
@@ -584,6 +583,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
584
583
 
585
584
  this.calculate = function() {
586
585
  if (matchArgs) {
586
+ // although not ideal to create and delete a record, using this technique to
587
+ // get properly serialized payload.
588
+ // TODO: Need to figure out how to use serializer without a record
587
589
  var tmpRecord = store.createRecord(modelName, matchArgs);
588
590
  expectedRequest = tmpRecord.serialize(matchArgs);
589
591
  tmpRecord.deleteRecord();
@@ -591,12 +593,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
591
593
 
592
594
  if (succeed) {
593
595
  var definition = FactoryGuy.modelDefinitions[modelName];
594
- if (responseJson[modelName]) {
595
- // already calculated once, keep the same id
596
- responseJson[modelName] = $.extend({id: responseJson[modelName].id}, matchArgs, returnArgs);
597
- } else {
598
- responseJson[modelName] = $.extend({id: definition.nextId()}, matchArgs, returnArgs);
599
- }
596
+ // If already calculated once, keep the same id
597
+ var id = responseJson[modelName] ? responseJson[modelName].id : definition.nextId();
598
+ responseJson[modelName] = $.extend({id: id}, matchArgs, returnArgs);
600
599
  // Remove belongsTo associations since they will already be set when you called
601
600
  // createRecord, so they don't need to be returned.
602
601
  Ember.get(modelType, 'relationshipsByName').forEach(function (relationship) {
@@ -604,84 +603,96 @@ var MockCreateRequest = function(url, store, modelName, options) {
604
603
  delete responseJson[modelName][relationship.key];
605
604
  }
606
605
  })
606
+ } else {
607
+ this.andFail(options);
607
608
  }
608
-
609
- }
609
+ };
610
610
 
611
611
  this.match = function(matches) {
612
612
  matchArgs = matches;
613
613
  this.calculate();
614
614
  return this;
615
- }
615
+ };
616
616
 
617
617
  this.andReturn = function(returns) {
618
618
  returnArgs = returns;
619
619
  this.calculate();
620
620
  return this;
621
- }
621
+ };
622
622
 
623
- this.andFail = function() {
624
- succeed = false;
625
- return this;
626
- }
623
+ this.andFail = function(options) {
624
+ options = options || {}
625
+ succeed = false;
626
+ status = options.status || 500;
627
+ if (options.response) {
628
+ responseJson = options.response;
629
+ }
630
+ return this;
631
+ };
627
632
 
628
633
  this.handler = function(settings) {
629
- if (settings.url != url || settings.type != 'POST') { return false}
630
-
631
- if (matchArgs) {
632
- var requestData = JSON.parse(settings.data)[modelName];
633
- for (var attribute in expectedRequest) {
634
- if (expectedRequest[attribute] &&
635
- requestData[attribute] != expectedRequest[attribute]) {
636
- return false
634
+ if (succeed) {
635
+ if (matchArgs) {
636
+ var requestData = JSON.parse(settings.data)[modelName];
637
+ for (var attribute in expectedRequest) {
638
+ if (expectedRequest[attribute] &&
639
+ requestData[attribute] != expectedRequest[attribute]) {
640
+ return false;
641
+ }
637
642
  }
638
643
  }
644
+ this.status = 200;
645
+ } else {
646
+ this.status = status;
639
647
  }
640
- var responseStatus = (succeed ? 200: 500);
641
- return {
642
- responseText: responseJson,
643
- status: responseStatus
644
- };
645
- }
648
+ this.responseText = responseJson;
649
+ };
646
650
 
647
651
  this.calculate();
648
652
 
649
- $.mockjax(this.handler);
653
+ var requestConfig = {
654
+ url: url,
655
+ dataType: 'json',
656
+ type: 'POST',
657
+ response: this.handler
658
+ };
659
+
660
+ $.mockjax(requestConfig);
650
661
  };
651
662
 
652
663
  var MockUpdateRequest = function(url, model, mapFind, options) {
653
664
  var status = options.status || 200;
654
665
  var succeed = true;
655
- var response = null;
666
+ var response = null;
656
667
 
657
- if ('succeed' in options) {
658
- succeed = options.succeed;
659
- }
668
+ if ('succeed' in options) {
669
+ succeed = options.succeed;
670
+ }
660
671
 
661
- if ('response' in options) {
662
- response = options.response;
663
- }
672
+ if ('response' in options) {
673
+ response = options.response;
674
+ }
664
675
 
665
676
  this.andSucceed = function(options) {
666
- succeed = true;
677
+ succeed = true;
667
678
  return this;
668
679
  };
669
680
 
670
681
  this.andFail = function(options) {
671
682
  succeed = false;
672
683
  status = options.status || 500;
673
- if ('response' in options) {
674
- response = options.response;
675
- }
684
+ if ('response' in options) {
685
+ response = options.response;
686
+ }
676
687
  return this;
677
688
  };
678
689
 
679
690
  this.handler = function(settings) {
680
691
  if (!succeed) {
681
692
  this.status = status;
682
- if (response !== null) {
683
- this.responseText = response;
684
- }
693
+ if (response !== null) {
694
+ this.responseText = response;
695
+ }
685
696
  } else {
686
697
  var json = model.toJSON({includeId: true});
687
698
  this.responseText = mapFind(model.constructor.typeKey, json);
@@ -93,8 +93,9 @@ var ModelDefinition = function (model, config) {
93
93
  // If it's an object and it's a model association attribute, build the json
94
94
  // for the association and replace the attribute with that json
95
95
  if (FactoryGuy.getStore()) {
96
- if (FactoryGuy.isAttributeRelationship(this.model, attribute)) {
97
- fixture[attribute] = FactoryGuy.build(attribute, fixture[attribute]);
96
+ var relationship = FactoryGuy.getAttributeRelationship(this.model, attribute);
97
+ if (relationship) {
98
+ fixture[attribute] = FactoryGuy.build(relationship.typeKey, fixture[attribute]);
98
99
  }
99
100
  } else {
100
101
  // For legacy reasons, if the store is not set in FactoryGuy, keep
@@ -217,11 +218,7 @@ var FactoryGuy = {
217
218
  @param {Object} config your model definition
218
219
  */
219
220
  define: function (model, config) {
220
- if (this.modelDefinitions[model]) {
221
- this.modelDefinitions[model].merge(config);
222
- } else {
223
- this.modelDefinitions[model] = new ModelDefinition(model, config);
224
- }
221
+ this.modelDefinitions[model] = new ModelDefinition(model, config);
225
222
  },
226
223
  /**
227
224
  Setting the store so FactoryGuy can do some model introspection.
@@ -240,14 +237,15 @@ var FactoryGuy = {
240
237
  @param {String} attribute attribute you want to check
241
238
  @returns {Boolean} true if the attribute is a relationship, false if not
242
239
  */
243
- isAttributeRelationship: function(typeName, attribute) {
240
+ getAttributeRelationship: function(typeName, attribute) {
244
241
  if (!this.store) {
245
242
  Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures")
246
243
  // The legacy value was true.
247
244
  return true;
248
245
  }
249
246
  var model = this.store.modelFor(typeName);
250
- return !!model.typeForRelationship(attribute);
247
+ var relationship = model.typeForRelationship(attribute);
248
+ return !!relationship ? relationship : null;
251
249
  },
252
250
  /**
253
251
  Used in model definitions to declare use of a sequence. For example:
@@ -570,6 +568,7 @@ var FactoryGuy = {
570
568
  };
571
569
 
572
570
  var MockCreateRequest = function(url, store, modelName, options) {
571
+ var status = options.status;
573
572
  var succeed = options.succeed === undefined ? true : options.succeed;
574
573
  var matchArgs = options.match;
575
574
  var returnArgs = options.returns;
@@ -579,6 +578,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
579
578
 
580
579
  this.calculate = function() {
581
580
  if (matchArgs) {
581
+ // although not ideal to create and delete a record, using this technique to
582
+ // get properly serialized payload.
583
+ // TODO: Need to figure out how to use serializer without a record
582
584
  var tmpRecord = store.createRecord(modelName, matchArgs);
583
585
  expectedRequest = tmpRecord.serialize(matchArgs);
584
586
  tmpRecord.deleteRecord();
@@ -586,12 +588,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
586
588
 
587
589
  if (succeed) {
588
590
  var definition = FactoryGuy.modelDefinitions[modelName];
589
- if (responseJson[modelName]) {
590
- // already calculated once, keep the same id
591
- responseJson[modelName] = $.extend({id: responseJson[modelName].id}, matchArgs, returnArgs);
592
- } else {
593
- responseJson[modelName] = $.extend({id: definition.nextId()}, matchArgs, returnArgs);
594
- }
591
+ // If already calculated once, keep the same id
592
+ var id = responseJson[modelName] ? responseJson[modelName].id : definition.nextId();
593
+ responseJson[modelName] = $.extend({id: id}, matchArgs, returnArgs);
595
594
  // Remove belongsTo associations since they will already be set when you called
596
595
  // createRecord, so they don't need to be returned.
597
596
  Ember.get(modelType, 'relationshipsByName').forEach(function (relationship) {
@@ -599,84 +598,96 @@ var MockCreateRequest = function(url, store, modelName, options) {
599
598
  delete responseJson[modelName][relationship.key];
600
599
  }
601
600
  })
601
+ } else {
602
+ this.andFail(options);
602
603
  }
603
-
604
- }
604
+ };
605
605
 
606
606
  this.match = function(matches) {
607
607
  matchArgs = matches;
608
608
  this.calculate();
609
609
  return this;
610
- }
610
+ };
611
611
 
612
612
  this.andReturn = function(returns) {
613
613
  returnArgs = returns;
614
614
  this.calculate();
615
615
  return this;
616
- }
616
+ };
617
617
 
618
- this.andFail = function() {
619
- succeed = false;
620
- return this;
621
- }
618
+ this.andFail = function(options) {
619
+ options = options || {}
620
+ succeed = false;
621
+ status = options.status || 500;
622
+ if (options.response) {
623
+ responseJson = options.response;
624
+ }
625
+ return this;
626
+ };
622
627
 
623
628
  this.handler = function(settings) {
624
- if (settings.url != url || settings.type != 'POST') { return false}
625
-
626
- if (matchArgs) {
627
- var requestData = JSON.parse(settings.data)[modelName];
628
- for (var attribute in expectedRequest) {
629
- if (expectedRequest[attribute] &&
630
- requestData[attribute] != expectedRequest[attribute]) {
631
- return false
629
+ if (succeed) {
630
+ if (matchArgs) {
631
+ var requestData = JSON.parse(settings.data)[modelName];
632
+ for (var attribute in expectedRequest) {
633
+ if (expectedRequest[attribute] &&
634
+ requestData[attribute] != expectedRequest[attribute]) {
635
+ return false;
636
+ }
632
637
  }
633
638
  }
639
+ this.status = 200;
640
+ } else {
641
+ this.status = status;
634
642
  }
635
- var responseStatus = (succeed ? 200: 500);
636
- return {
637
- responseText: responseJson,
638
- status: responseStatus
639
- };
640
- }
643
+ this.responseText = responseJson;
644
+ };
641
645
 
642
646
  this.calculate();
643
647
 
644
- $.mockjax(this.handler);
648
+ var requestConfig = {
649
+ url: url,
650
+ dataType: 'json',
651
+ type: 'POST',
652
+ response: this.handler
653
+ };
654
+
655
+ $.mockjax(requestConfig);
645
656
  };
646
657
 
647
658
  var MockUpdateRequest = function(url, model, mapFind, options) {
648
659
  var status = options.status || 200;
649
660
  var succeed = true;
650
- var response = null;
661
+ var response = null;
651
662
 
652
- if ('succeed' in options) {
653
- succeed = options.succeed;
654
- }
663
+ if ('succeed' in options) {
664
+ succeed = options.succeed;
665
+ }
655
666
 
656
- if ('response' in options) {
657
- response = options.response;
658
- }
667
+ if ('response' in options) {
668
+ response = options.response;
669
+ }
659
670
 
660
671
  this.andSucceed = function(options) {
661
- succeed = true;
672
+ succeed = true;
662
673
  return this;
663
674
  };
664
675
 
665
676
  this.andFail = function(options) {
666
677
  succeed = false;
667
678
  status = options.status || 500;
668
- if ('response' in options) {
669
- response = options.response;
670
- }
679
+ if ('response' in options) {
680
+ response = options.response;
681
+ }
671
682
  return this;
672
683
  };
673
684
 
674
685
  this.handler = function(settings) {
675
686
  if (!succeed) {
676
687
  this.status = status;
677
- if (response !== null) {
678
- this.responseText = response;
679
- }
688
+ if (response !== null) {
689
+ this.responseText = response;
690
+ }
680
691
  } else {
681
692
  var json = model.toJSON({includeId: true});
682
693
  this.responseText = mapFind(model.constructor.typeKey, json);
@@ -1 +1 @@
1
- var Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};var MissingSequenceError=function(message){this.toString=function(){return message}};if(FactoryGuy!==undefined){FactoryGuy.sequence=Sequence;FactoryGuy.missingSequenceError=MissingSequenceError}var ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;var sequenceName=null;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.nextId=function(){return modelId++};this.generate=function(name,sequenceFn){if(sequenceFn){if(!sequences[name]){sequences[name]=new Sequence(sequenceFn)}}var sequence=sequences[name];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts,traitArgs){var traitsObj={};traitArgs.forEach(function(trait){$.extend(traitsObj,traits[trait])});var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,traitsObj,opts);for(var attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){if(FactoryGuy.getStore()){if(FactoryGuy.isAttributeRelationship(this.model,attribute)){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}else{fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}}if(!fixture.id){fixture.id=this.nextId()}return fixture};this.buildList=function(name,number,traits,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts,traits))}return arr};this.reset=function(){modelId=1;for(var name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseTraits=function(object){if(!object){return}traits=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(Ember.typeOf(sequenceFn)!="function"){throw new Error("Problem with ["+sequenceName+"] sequence definition. Sequences must be functions")}object[sequenceName]=new Sequence(sequenceFn)}sequences=object};var parseConfig=function(config){parseSequences(config.sequences);delete config.sequences;parseTraits(config.traits);delete config.traits;parseDefault(config.default);delete config.default;namedModels=config};parseConfig(config)};if(FactoryGuy!==undefined){FactoryGuy.modelDefiniton=ModelDefinition}var FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},setStore:function(store){Ember.assert("FactoryGuy#setStore needs a valid store instance.You passed in ["+store+"]",store instanceof DS.Store);this.store=store},getStore:function(){return this.store},isAttributeRelationship:function(typeName,attribute){if(!this.store){Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures");return true}var model=this.store.modelFor(typeName);return!!model.typeForRelationship(attribute)},generate:function(nameOrFunction){var sortaRandomName=Math.floor((1+Math.random())*65536).toString(16)+Date.now();return function(){if(Em.typeOf(nameOrFunction)=="function"){return this.generate(sortaRandomName,nameOrFunction)}else{return this.generate(nameOrFunction)}}},belongsTo:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,opts)}},association:function(fixtureName,opts){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.belongsTo instead");return this.belongsTo(fixtureName,opts)},hasMany:function(fixtureName,number,opts){return function(){return FactoryGuy.buildList(fixtureName,number,opts)}},lookupModelForFixtureName:function(name){var definition=this.lookupDefinitionForFixtureName(name);if(definition){return definition.model}},lookupDefinitionForFixtureName:function(name){for(var model in this.modelDefinitions){var definition=this.modelDefinitions[model];if(definition.matchesName(name)){return definition}}},build:function(){var args=Array.prototype.slice.call(arguments);var opts={};var name=args.shift();if(!name){throw new Error("Build needs a factory name to build")}if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts,traits)},buildList:function(){var args=Array.prototype.slice.call(arguments);var name=args.shift();var number=args.shift();if(!name||!number){throw new Error("buildList needs a name and a number ( at least ) to build with")}var opts={};if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,traits,opts)},make:function(){var store=this.store;Ember.assert("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures",store);var fixture=this.build.apply(this,arguments);var name=arguments[0];var modelName=this.lookupModelForFixtureName(name);var modelType=store.modelFor(modelName);if(store.usingFixtureAdapter()){store.setAssociationsForFixtureAdapter(modelType,modelName,fixture);fixture=FactoryGuy.pushFixture(modelType,fixture);store.loadModelForFixtureAdapter(modelType,fixture);return fixture}else{return store.makeModel(modelType,fixture)}},makeList:function(){Ember.assert("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures",this.store);var arr=[];var args=Array.prototype.slice.call(arguments);Ember.assert("makeList needs at least 2 arguments, a name and a number",args.length>=2);var number=args.splice(1,1)[0];Ember.assert("Second argument to makeList should be a number (of fixtures to make.)",typeof number=="number");for(var i=0;i<number;i++){arr.push(this.make.apply(this,args))}return arr},resetModels:function(store){for(var model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}store.unloadAll(modelType)}catch(e){console.log("resetModels",e)}}},pushFixture:function(modelClass,fixture){var index;if(!modelClass.FIXTURES){modelClass.FIXTURES=[]}index=this.indexOfFixture(modelClass.FIXTURES,fixture);if(index>-1){modelClass.FIXTURES.splice(index,1)}modelClass.FIXTURES.push(fixture);return fixture},indexOfFixture:function(fixtures,fixture){var index=-1,id=fixture.id+"";Ember.A(fixtures).find(function(r,i){if(""+Ember.get(r,"id")===id){index=i;return true}else{return false}});return index},clear:function(opts){if(!opts){this.modelDefinitions={}}}};var MockCreateRequest=function(url,store,modelName,options){var succeed=options.succeed===undefined?true:options.succeed;var matchArgs=options.match;var returnArgs=options.returns;var responseJson={};var expectedRequest={};var modelType=store.modelFor(modelName);this.calculate=function(){if(matchArgs){var tmpRecord=store.createRecord(modelName,matchArgs);expectedRequest=tmpRecord.serialize(matchArgs);tmpRecord.deleteRecord()}if(succeed){var definition=FactoryGuy.modelDefinitions[modelName];if(responseJson[modelName]){responseJson[modelName]=$.extend({id:responseJson[modelName].id},matchArgs,returnArgs)}else{responseJson[modelName]=$.extend({id:definition.nextId()},matchArgs,returnArgs)}Ember.get(modelType,"relationshipsByName").forEach(function(relationship){if(relationship.kind=="belongsTo"){delete responseJson[modelName][relationship.key]}})}};this.match=function(matches){matchArgs=matches;this.calculate();return this};this.andReturn=function(returns){returnArgs=returns;this.calculate();return this};this.andFail=function(){succeed=false;return this};this.handler=function(settings){if(settings.url!=url||settings.type!="POST"){return false}if(matchArgs){var requestData=JSON.parse(settings.data)[modelName];for(var attribute in expectedRequest){if(expectedRequest[attribute]&&requestData[attribute]!=expectedRequest[attribute]){return false}}}var responseStatus=succeed?200:500;return{responseText:responseJson,status:responseStatus}};this.calculate();$.mockjax(this.handler)};var MockUpdateRequest=function(url,model,mapFind,options){var status=options.status||200;var succeed=true;var response=null;if("succeed"in options){succeed=options.succeed}if("response"in options){response=options.response}this.andSucceed=function(options){succeed=true;return this};this.andFail=function(options){succeed=false;status=options.status||500;if("response"in options){response=options.response}return this};this.handler=function(settings){if(!succeed){this.status=status;if(response!==null){this.responseText=response}}else{var json=model.toJSON({includeId:true});this.responseText=mapFind(model.constructor.typeKey,json);this.status=200}};var requestConfig={url:url,dataType:"json",type:"PUT",response:this.handler};$.mockjax(requestConfig)};(function(){DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.make instead");FactoryGuy.make.call(FactoryGuy,arguments)},makeList:function(){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.makeList instead");FactoryGuy.makeList.call(FactoryGuy,arguments)},makeModel:function(modelType,fixture){var store=this,modelName=store.modelFor(modelType).typeKey,model;Em.run(function(){store.findEmbeddedAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore();modelType=store.modelFor(modelName)}model=store.push(modelName,fixture);store.setAssociationsForRESTAdapter(modelType,modelName,model)});return model},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){var hasManyRelation,belongsToRecord;if(relationship.kind=="hasMany"){hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){FactoryGuy.pushFixture(relationship.type,object);id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var hasManyFixture=adapter.findFixtureById(hasManyfixtures,id);hasManyFixture[modelName]=fixture.id;self.loadModelForFixtureAdapter(relationship.type,hasManyFixture)})}}if(relationship.kind=="belongsTo"){belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id);self.loadModelForFixtureAdapter(relationship.type,belongsTofixture)}}})},loadModelForFixtureAdapter:function(modelType,fixture){var storeModel=this.getById(modelType,fixture.id),that=this;if(!Ember.isPresent(storeModel)||storeModel.get("isEmpty")){Ember.run(function(){var dup=Ember.copy(fixture,true);that.push(modelType,fixture);Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(fixture[relationship.key]){fixture[relationship.key]=dup[relationship.key]}})})}},findEmbeddedAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,belongsToRecord);belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}if(relationship.kind=="hasMany"){var hasManyRecords=fixture[relationship.key];if(Ember.typeOf(hasManyRecords)=="array"){if(Ember.typeOf(hasManyRecords[0])=="object"){var records=Em.A();hasManyRecords.map(function(object){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,object);var record=store.push(relationship.type,object);records.push(record);return record});fixture[relationship.key]=records}}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);if(belongsToName){child.set(belongsToName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind==kind&&childModel instanceof relationship.type){relationshipName=relationship.key}});return relationshipName},findHasManyRelationshipNameForFixtureAdapter:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"&&childModelType==relationship.type){relationshipName=relationship.key}});return relationshipName},pushPayload:function(type,payload){var typeName,model;if(this.usingFixtureAdapter()){if(Ember.typeOf(type)==="string"&&Ember.isPresent(payload)&&Ember.isPresent(payload.id)){model=this.modelFor(type);FactoryGuy.pushFixture(model,payload);this.push(model,Ember.copy(payload,true))}else if(Ember.typeOf(type)==="object"||Ember.typeOf(payload)==="object"){if(Ember.isBlank(payload)){payload=type}for(var prop in payload){typeName=Ember.String.camelize(Ember.String.singularize(prop));model=this.modelFor(typeName);this.pushMany(model,Ember.makeArray(Ember.copy(payload[prop],true)));Ember.ArrayPolyfills.forEach.call(Ember.makeArray(payload[prop]),function(hash){FactoryGuy.pushFixture(model,hash)},this)}}else{throw new Ember.Error("Assertion Failed: You cannot use `store#pushPayload` with this method signature pushPayload("+type+","+payload+")")}}else{this._super(type,payload)}}})})();var FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);FactoryGuy.setStore(this.getStore());return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var modelType=store.modelFor(type);var serializer=store.serializerFor(modelType.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(){return FactoryGuy.make.apply(FactoryGuy,arguments)},getStore:function(){return this.get("container").lookup("store:main")},stubEndpointForHttpRequest:function(url,json,options){options=options||{};var request={url:url,dataType:"json",responseText:json,type:options.type||"GET",status:options.status||200};if(options.urlParams){request.urlParams=options.urlParams}if(options.data){request.data=options.data}$.mockjax(request)},buildURL:function(typeName,id){var type=this.getStore().modelFor(typeName);return this.getStore().adapterFor(type).buildURL(type.typeKey,id)},mapFindAll:function(modelName,json){var responseJson={};responseJson[modelName.pluralize()]=json;return responseJson},mapFind:function(modelName,json){var responseJson={};responseJson[modelName.pluralize()]=json;return responseJson},handleFindAll:function(){var records=FactoryGuy.makeList.apply(FactoryGuy,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var json=records.map(function(record){return record.toJSON({includeId:true})});var responseJson=this.mapFindAll(modelName,json);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson)},handleFindMany:function(){Ember.deprecate("DEPRECATION Warning: use handleFindAll instead");this.handleFindAll.apply(this,arguments)},handleFind:function(){var args=Array.prototype.slice.call(arguments);Ember.assert("To handleFindOne pass in a model instance or a type and model options",args.length>0);var record,modelName;if(args[0]instanceof DS.Model){record=args[0];modelName=record.constructor.typeKey}else{record=FactoryGuy.make.apply(FactoryGuy,arguments);var name=arguments[0];modelName=FactoryGuy.lookupModelForFixtureName(name)}var json=record.toJSON({includeId:true});var responseJson=this.mapFind(modelName,json);var url=this.buildURL(modelName,record.id);this.stubEndpointForHttpRequest(url,responseJson)},handleFindOne:function(){this.handleFind.apply(this,arguments)},handleFindQuery:function(modelName,searchParams,records){Ember.assert("The second argument of searchParams must be an array",Em.typeOf(searchParams)=="array");if(records){Ember.assert("The third argument ( records ) must be an array - found type:"+Em.typeOf(records),Em.typeOf(records)=="array")}else{records=[]}var json=records.map(function(record){return record.toJSON({includeId:true})});var responseJson=this.mapFindAll(modelName,json);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{urlParams:searchParams})},handleCreate:function(modelName,options){var url=this.buildURL(modelName);var store=this.getStore();var opts=options===undefined?{}:options;return new MockCreateRequest(url,store,modelName,opts)},handleUpdate:function(){var args=Array.prototype.slice.call(arguments);Ember.assert("To handleUpdate pass in a model instance or a type and an id",args.length>0);var options={};if(args.length>1&&typeof args[args.length-1]==="object"){options=args.pop()}var model,type,id;var store=this.getStore();if(args[0]instanceof DS.Model){model=args[0];id=model.id;type=model.constructor.typeKey}else if(typeof args[0]=="string"&&typeof parseInt(args[1])=="number"){type=args[0];id=args[1];model=store.getById(type,id)}Ember.assert("To handleUpdate pass in a model instance or a type and an id",type&&id);var url=this.buildURL(type,id);return new MockUpdateRequest(url,model,this.mapFind,options)},handleDelete:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:succeed?200:500})},teardown:function(){FactoryGuy.resetModels(this.getStore());$.mockjax.clear()}});if(FactoryGuy!==undefined){FactoryGuy.testMixin=FactoryGuyTestMixin}
1
+ var Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};var MissingSequenceError=function(message){this.toString=function(){return message}};if(FactoryGuy!==undefined){FactoryGuy.sequence=Sequence;FactoryGuy.missingSequenceError=MissingSequenceError}var ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;var sequenceName=null;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.nextId=function(){return modelId++};this.generate=function(name,sequenceFn){if(sequenceFn){if(!sequences[name]){sequences[name]=new Sequence(sequenceFn)}}var sequence=sequences[name];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts,traitArgs){var traitsObj={};traitArgs.forEach(function(trait){$.extend(traitsObj,traits[trait])});var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,traitsObj,opts);for(var attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){if(FactoryGuy.getStore()){var relationship=FactoryGuy.getAttributeRelationship(this.model,attribute);if(relationship){fixture[attribute]=FactoryGuy.build(relationship.typeKey,fixture[attribute])}}else{fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}}if(!fixture.id){fixture.id=this.nextId()}return fixture};this.buildList=function(name,number,traits,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts,traits))}return arr};this.reset=function(){modelId=1;for(var name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseTraits=function(object){if(!object){return}traits=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(Ember.typeOf(sequenceFn)!="function"){throw new Error("Problem with ["+sequenceName+"] sequence definition. Sequences must be functions")}object[sequenceName]=new Sequence(sequenceFn)}sequences=object};var parseConfig=function(config){parseSequences(config.sequences);delete config.sequences;parseTraits(config.traits);delete config.traits;parseDefault(config.default);delete config.default;namedModels=config};parseConfig(config)};if(FactoryGuy!==undefined){FactoryGuy.modelDefiniton=ModelDefinition}var FactoryGuy={modelDefinitions:{},define:function(model,config){this.modelDefinitions[model]=new ModelDefinition(model,config)},setStore:function(store){Ember.assert("FactoryGuy#setStore needs a valid store instance.You passed in ["+store+"]",store instanceof DS.Store);this.store=store},getStore:function(){return this.store},getAttributeRelationship:function(typeName,attribute){if(!this.store){Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures");return true}var model=this.store.modelFor(typeName);var relationship=model.typeForRelationship(attribute);return!!relationship?relationship:null},generate:function(nameOrFunction){var sortaRandomName=Math.floor((1+Math.random())*65536).toString(16)+Date.now();return function(){if(Em.typeOf(nameOrFunction)=="function"){return this.generate(sortaRandomName,nameOrFunction)}else{return this.generate(nameOrFunction)}}},belongsTo:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,opts)}},association:function(fixtureName,opts){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.belongsTo instead");return this.belongsTo(fixtureName,opts)},hasMany:function(fixtureName,number,opts){return function(){return FactoryGuy.buildList(fixtureName,number,opts)}},lookupModelForFixtureName:function(name){var definition=this.lookupDefinitionForFixtureName(name);if(definition){return definition.model}},lookupDefinitionForFixtureName:function(name){for(var model in this.modelDefinitions){var definition=this.modelDefinitions[model];if(definition.matchesName(name)){return definition}}},build:function(){var args=Array.prototype.slice.call(arguments);var opts={};var name=args.shift();if(!name){throw new Error("Build needs a factory name to build")}if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts,traits)},buildList:function(){var args=Array.prototype.slice.call(arguments);var name=args.shift();var number=args.shift();if(!name||!number){throw new Error("buildList needs a name and a number ( at least ) to build with")}var opts={};if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,traits,opts)},make:function(){var store=this.store;Ember.assert("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures",store);var fixture=this.build.apply(this,arguments);var name=arguments[0];var modelName=this.lookupModelForFixtureName(name);var modelType=store.modelFor(modelName);if(store.usingFixtureAdapter()){store.setAssociationsForFixtureAdapter(modelType,modelName,fixture);fixture=FactoryGuy.pushFixture(modelType,fixture);store.loadModelForFixtureAdapter(modelType,fixture);return fixture}else{return store.makeModel(modelType,fixture)}},makeList:function(){Ember.assert("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures",this.store);var arr=[];var args=Array.prototype.slice.call(arguments);Ember.assert("makeList needs at least 2 arguments, a name and a number",args.length>=2);var number=args.splice(1,1)[0];Ember.assert("Second argument to makeList should be a number (of fixtures to make.)",typeof number=="number");for(var i=0;i<number;i++){arr.push(this.make.apply(this,args))}return arr},resetModels:function(store){for(var model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}store.unloadAll(modelType)}catch(e){console.log("resetModels",e)}}},pushFixture:function(modelClass,fixture){var index;if(!modelClass.FIXTURES){modelClass.FIXTURES=[]}index=this.indexOfFixture(modelClass.FIXTURES,fixture);if(index>-1){modelClass.FIXTURES.splice(index,1)}modelClass.FIXTURES.push(fixture);return fixture},indexOfFixture:function(fixtures,fixture){var index=-1,id=fixture.id+"";Ember.A(fixtures).find(function(r,i){if(""+Ember.get(r,"id")===id){index=i;return true}else{return false}});return index},clear:function(opts){if(!opts){this.modelDefinitions={}}}};var MockCreateRequest=function(url,store,modelName,options){var status=options.status;var succeed=options.succeed===undefined?true:options.succeed;var matchArgs=options.match;var returnArgs=options.returns;var responseJson={};var expectedRequest={};var modelType=store.modelFor(modelName);this.calculate=function(){if(matchArgs){var tmpRecord=store.createRecord(modelName,matchArgs);expectedRequest=tmpRecord.serialize(matchArgs);tmpRecord.deleteRecord()}if(succeed){var definition=FactoryGuy.modelDefinitions[modelName];var id=responseJson[modelName]?responseJson[modelName].id:definition.nextId();responseJson[modelName]=$.extend({id:id},matchArgs,returnArgs);Ember.get(modelType,"relationshipsByName").forEach(function(relationship){if(relationship.kind=="belongsTo"){delete responseJson[modelName][relationship.key]}})}else{this.andFail(options)}};this.match=function(matches){matchArgs=matches;this.calculate();return this};this.andReturn=function(returns){returnArgs=returns;this.calculate();return this};this.andFail=function(options){options=options||{};succeed=false;status=options.status||500;if(options.response){responseJson=options.response}return this};this.handler=function(settings){if(succeed){if(matchArgs){var requestData=JSON.parse(settings.data)[modelName];for(var attribute in expectedRequest){if(expectedRequest[attribute]&&requestData[attribute]!=expectedRequest[attribute]){return false}}}this.status=200}else{this.status=status}this.responseText=responseJson};this.calculate();var requestConfig={url:url,dataType:"json",type:"POST",response:this.handler};$.mockjax(requestConfig)};var MockUpdateRequest=function(url,model,mapFind,options){var status=options.status||200;var succeed=true;var response=null;if("succeed"in options){succeed=options.succeed}if("response"in options){response=options.response}this.andSucceed=function(options){succeed=true;return this};this.andFail=function(options){succeed=false;status=options.status||500;if("response"in options){response=options.response}return this};this.handler=function(settings){if(!succeed){this.status=status;if(response!==null){this.responseText=response}}else{var json=model.toJSON({includeId:true});this.responseText=mapFind(model.constructor.typeKey,json);this.status=200}};var requestConfig={url:url,dataType:"json",type:"PUT",response:this.handler};$.mockjax(requestConfig)};(function(){DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.make instead");FactoryGuy.make.call(FactoryGuy,arguments)},makeList:function(){Ember.deprecate("DEPRECATION Warning: use FactoryGuy.makeList instead");FactoryGuy.makeList.call(FactoryGuy,arguments)},makeModel:function(modelType,fixture){var store=this,modelName=store.modelFor(modelType).typeKey,model;Em.run(function(){store.findEmbeddedAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore();modelType=store.modelFor(modelName)}model=store.push(modelName,fixture);store.setAssociationsForRESTAdapter(modelType,modelName,model)});return model},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){var hasManyRelation,belongsToRecord;if(relationship.kind=="hasMany"){hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){FactoryGuy.pushFixture(relationship.type,object);id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var hasManyFixture=adapter.findFixtureById(hasManyfixtures,id);hasManyFixture[modelName]=fixture.id;self.loadModelForFixtureAdapter(relationship.type,hasManyFixture)})}}if(relationship.kind=="belongsTo"){belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id);self.loadModelForFixtureAdapter(relationship.type,belongsTofixture)}}})},loadModelForFixtureAdapter:function(modelType,fixture){var storeModel=this.getById(modelType,fixture.id),that=this;if(!Ember.isPresent(storeModel)||storeModel.get("isEmpty")){Ember.run(function(){var dup=Ember.copy(fixture,true);that.push(modelType,fixture);Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(fixture[relationship.key]){fixture[relationship.key]=dup[relationship.key]}})})}},findEmbeddedAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,belongsToRecord);belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}if(relationship.kind=="hasMany"){var hasManyRecords=fixture[relationship.key];if(Ember.typeOf(hasManyRecords)=="array"){if(Ember.typeOf(hasManyRecords[0])=="object"){var records=Em.A();hasManyRecords.map(function(object){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,object);var record=store.push(relationship.type,object);records.push(record);return record});fixture[relationship.key]=records}}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);if(belongsToName){child.set(belongsToName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind==kind&&childModel instanceof relationship.type){relationshipName=relationship.key}});return relationshipName},findHasManyRelationshipNameForFixtureAdapter:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"&&childModelType==relationship.type){relationshipName=relationship.key}});return relationshipName},pushPayload:function(type,payload){var typeName,model;if(this.usingFixtureAdapter()){if(Ember.typeOf(type)==="string"&&Ember.isPresent(payload)&&Ember.isPresent(payload.id)){model=this.modelFor(type);FactoryGuy.pushFixture(model,payload);this.push(model,Ember.copy(payload,true))}else if(Ember.typeOf(type)==="object"||Ember.typeOf(payload)==="object"){if(Ember.isBlank(payload)){payload=type}for(var prop in payload){typeName=Ember.String.camelize(Ember.String.singularize(prop));model=this.modelFor(typeName);this.pushMany(model,Ember.makeArray(Ember.copy(payload[prop],true)));Ember.ArrayPolyfills.forEach.call(Ember.makeArray(payload[prop]),function(hash){FactoryGuy.pushFixture(model,hash)},this)}}else{throw new Ember.Error("Assertion Failed: You cannot use `store#pushPayload` with this method signature pushPayload("+type+","+payload+")")}}else{this._super(type,payload)}}})})();var FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);FactoryGuy.setStore(this.getStore());return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var modelType=store.modelFor(type);var serializer=store.serializerFor(modelType.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(){return FactoryGuy.make.apply(FactoryGuy,arguments)},getStore:function(){return this.get("container").lookup("store:main")},stubEndpointForHttpRequest:function(url,json,options){options=options||{};var request={url:url,dataType:"json",responseText:json,type:options.type||"GET",status:options.status||200};if(options.urlParams){request.urlParams=options.urlParams}if(options.data){request.data=options.data}$.mockjax(request)},buildURL:function(typeName,id){var type=this.getStore().modelFor(typeName);return this.getStore().adapterFor(type).buildURL(type.typeKey,id)},mapFindAll:function(modelName,json){var responseJson={};responseJson[modelName.pluralize()]=json;return responseJson},mapFind:function(modelName,json){var responseJson={};responseJson[modelName.pluralize()]=json;return responseJson},handleFindAll:function(){var records=FactoryGuy.makeList.apply(FactoryGuy,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var json=records.map(function(record){return record.toJSON({includeId:true})});var responseJson=this.mapFindAll(modelName,json);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson)},handleFindMany:function(){Ember.deprecate("DEPRECATION Warning: use handleFindAll instead");this.handleFindAll.apply(this,arguments)},handleFind:function(){var args=Array.prototype.slice.call(arguments);Ember.assert("To handleFindOne pass in a model instance or a type and model options",args.length>0);var record,modelName;if(args[0]instanceof DS.Model){record=args[0];modelName=record.constructor.typeKey}else{record=FactoryGuy.make.apply(FactoryGuy,arguments);var name=arguments[0];modelName=FactoryGuy.lookupModelForFixtureName(name)}var json=record.toJSON({includeId:true});var responseJson=this.mapFind(modelName,json);var url=this.buildURL(modelName,record.id);this.stubEndpointForHttpRequest(url,responseJson)},handleFindOne:function(){this.handleFind.apply(this,arguments)},handleFindQuery:function(modelName,searchParams,records){Ember.assert("The second argument of searchParams must be an array",Em.typeOf(searchParams)=="array");if(records){Ember.assert("The third argument ( records ) must be an array - found type:"+Em.typeOf(records),Em.typeOf(records)=="array")}else{records=[]}var json=records.map(function(record){return record.toJSON({includeId:true})});var responseJson=this.mapFindAll(modelName,json);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{urlParams:searchParams})},handleCreate:function(modelName,options){var url=this.buildURL(modelName);var store=this.getStore();var opts=options===undefined?{}:options;return new MockCreateRequest(url,store,modelName,opts)},handleUpdate:function(){var args=Array.prototype.slice.call(arguments);Ember.assert("To handleUpdate pass in a model instance or a type and an id",args.length>0);var options={};if(args.length>1&&typeof args[args.length-1]==="object"){options=args.pop()}var model,type,id;var store=this.getStore();if(args[0]instanceof DS.Model){model=args[0];id=model.id;type=model.constructor.typeKey}else if(typeof args[0]=="string"&&typeof parseInt(args[1])=="number"){type=args[0];id=args[1];model=store.getById(type,id)}Ember.assert("To handleUpdate pass in a model instance or a type and an id",type&&id);var url=this.buildURL(type,id);return new MockUpdateRequest(url,model,this.mapFind,options)},handleDelete:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:succeed?200:500})},teardown:function(){FactoryGuy.resetModels(this.getStore());$.mockjax.clear()}});if(FactoryGuy!==undefined){FactoryGuy.testMixin=FactoryGuyTestMixin}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.9.10",
3
+ "version": "0.9.11",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -39,11 +39,7 @@ var FactoryGuy = {
39
39
  @param {Object} config your model definition
40
40
  */
41
41
  define: function (model, config) {
42
- if (this.modelDefinitions[model]) {
43
- this.modelDefinitions[model].merge(config);
44
- } else {
45
- this.modelDefinitions[model] = new ModelDefinition(model, config);
46
- }
42
+ this.modelDefinitions[model] = new ModelDefinition(model, config);
47
43
  },
48
44
  /**
49
45
  Setting the store so FactoryGuy can do some model introspection.
@@ -62,14 +58,15 @@ var FactoryGuy = {
62
58
  @param {String} attribute attribute you want to check
63
59
  @returns {Boolean} true if the attribute is a relationship, false if not
64
60
  */
65
- isAttributeRelationship: function(typeName, attribute) {
61
+ getAttributeRelationship: function(typeName, attribute) {
66
62
  if (!this.store) {
67
63
  Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures")
68
64
  // The legacy value was true.
69
65
  return true;
70
66
  }
71
67
  var model = this.store.modelFor(typeName);
72
- return !!model.typeForRelationship(attribute);
68
+ var relationship = model.typeForRelationship(attribute);
69
+ return !!relationship ? relationship : null;
73
70
  },
74
71
  /**
75
72
  Used in model definitions to declare use of a sequence. For example:
@@ -1,4 +1,5 @@
1
1
  var MockCreateRequest = function(url, store, modelName, options) {
2
+ var status = options.status;
2
3
  var succeed = options.succeed === undefined ? true : options.succeed;
3
4
  var matchArgs = options.match;
4
5
  var returnArgs = options.returns;
@@ -8,6 +9,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
8
9
 
9
10
  this.calculate = function() {
10
11
  if (matchArgs) {
12
+ // although not ideal to create and delete a record, using this technique to
13
+ // get properly serialized payload.
14
+ // TODO: Need to figure out how to use serializer without a record
11
15
  var tmpRecord = store.createRecord(modelName, matchArgs);
12
16
  expectedRequest = tmpRecord.serialize(matchArgs);
13
17
  tmpRecord.deleteRecord();
@@ -15,12 +19,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
15
19
 
16
20
  if (succeed) {
17
21
  var definition = FactoryGuy.modelDefinitions[modelName];
18
- if (responseJson[modelName]) {
19
- // already calculated once, keep the same id
20
- responseJson[modelName] = $.extend({id: responseJson[modelName].id}, matchArgs, returnArgs);
21
- } else {
22
- responseJson[modelName] = $.extend({id: definition.nextId()}, matchArgs, returnArgs);
23
- }
22
+ // If already calculated once, keep the same id
23
+ var id = responseJson[modelName] ? responseJson[modelName].id : definition.nextId();
24
+ responseJson[modelName] = $.extend({id: id}, matchArgs, returnArgs);
24
25
  // Remove belongsTo associations since they will already be set when you called
25
26
  // createRecord, so they don't need to be returned.
26
27
  Ember.get(modelType, 'relationshipsByName').forEach(function (relationship) {
@@ -28,47 +29,59 @@ var MockCreateRequest = function(url, store, modelName, options) {
28
29
  delete responseJson[modelName][relationship.key];
29
30
  }
30
31
  })
32
+ } else {
33
+ this.andFail(options);
31
34
  }
32
-
33
- }
35
+ };
34
36
 
35
37
  this.match = function(matches) {
36
38
  matchArgs = matches;
37
39
  this.calculate();
38
40
  return this;
39
- }
41
+ };
40
42
 
41
43
  this.andReturn = function(returns) {
42
44
  returnArgs = returns;
43
45
  this.calculate();
44
46
  return this;
45
- }
47
+ };
46
48
 
47
- this.andFail = function() {
48
- succeed = false;
49
- return this;
50
- }
49
+ this.andFail = function(options) {
50
+ options = options || {}
51
+ succeed = false;
52
+ status = options.status || 500;
53
+ if (options.response) {
54
+ responseJson = options.response;
55
+ }
56
+ return this;
57
+ };
51
58
 
52
59
  this.handler = function(settings) {
53
- if (settings.url != url || settings.type != 'POST') { return false}
54
-
55
- if (matchArgs) {
56
- var requestData = JSON.parse(settings.data)[modelName];
57
- for (var attribute in expectedRequest) {
58
- if (expectedRequest[attribute] &&
59
- requestData[attribute] != expectedRequest[attribute]) {
60
- return false
60
+ if (succeed) {
61
+ if (matchArgs) {
62
+ var requestData = JSON.parse(settings.data)[modelName];
63
+ for (var attribute in expectedRequest) {
64
+ if (expectedRequest[attribute] &&
65
+ requestData[attribute] != expectedRequest[attribute]) {
66
+ return false;
67
+ }
61
68
  }
62
69
  }
70
+ this.status = 200;
71
+ } else {
72
+ this.status = status;
63
73
  }
64
- var responseStatus = (succeed ? 200: 500);
65
- return {
66
- responseText: responseJson,
67
- status: responseStatus
68
- };
69
- }
74
+ this.responseText = responseJson;
75
+ };
70
76
 
71
77
  this.calculate();
72
78
 
73
- $.mockjax(this.handler);
79
+ var requestConfig = {
80
+ url: url,
81
+ dataType: 'json',
82
+ type: 'POST',
83
+ response: this.handler
84
+ };
85
+
86
+ $.mockjax(requestConfig);
74
87
  };
@@ -1,36 +1,36 @@
1
1
  var MockUpdateRequest = function(url, model, mapFind, options) {
2
2
  var status = options.status || 200;
3
3
  var succeed = true;
4
- var response = null;
4
+ var response = null;
5
5
 
6
- if ('succeed' in options) {
7
- succeed = options.succeed;
8
- }
6
+ if ('succeed' in options) {
7
+ succeed = options.succeed;
8
+ }
9
9
 
10
- if ('response' in options) {
11
- response = options.response;
12
- }
10
+ if ('response' in options) {
11
+ response = options.response;
12
+ }
13
13
 
14
14
  this.andSucceed = function(options) {
15
- succeed = true;
15
+ succeed = true;
16
16
  return this;
17
17
  };
18
18
 
19
19
  this.andFail = function(options) {
20
20
  succeed = false;
21
21
  status = options.status || 500;
22
- if ('response' in options) {
23
- response = options.response;
24
- }
22
+ if ('response' in options) {
23
+ response = options.response;
24
+ }
25
25
  return this;
26
26
  };
27
27
 
28
28
  this.handler = function(settings) {
29
29
  if (!succeed) {
30
30
  this.status = status;
31
- if (response !== null) {
32
- this.responseText = response;
33
- }
31
+ if (response !== null) {
32
+ this.responseText = response;
33
+ }
34
34
  } else {
35
35
  var json = model.toJSON({includeId: true});
36
36
  this.responseText = mapFind(model.constructor.typeKey, json);
@@ -72,8 +72,9 @@ var ModelDefinition = function (model, config) {
72
72
  // If it's an object and it's a model association attribute, build the json
73
73
  // for the association and replace the attribute with that json
74
74
  if (FactoryGuy.getStore()) {
75
- if (FactoryGuy.isAttributeRelationship(this.model, attribute)) {
76
- fixture[attribute] = FactoryGuy.build(attribute, fixture[attribute]);
75
+ var relationship = FactoryGuy.getAttributeRelationship(this.model, attribute);
76
+ if (relationship) {
77
+ fixture[attribute] = FactoryGuy.build(relationship.typeKey, fixture[attribute]);
77
78
  }
78
79
  } else {
79
80
  // For legacy reasons, if the store is not set in FactoryGuy, keep
@@ -195,12 +195,12 @@ test("#buildList creates list of fixtures", function() {
195
195
  });
196
196
 
197
197
 
198
- test("#isAttributeRelationship", function() {
198
+ test("#getAttributeRelationship", function() {
199
199
  FactoryGuy.setStore(store);
200
200
  var typeName = 'user'
201
- equal(FactoryGuy.isAttributeRelationship(typeName,'company'),true);
202
- equal(FactoryGuy.isAttributeRelationship(typeName,'hats'),true);
203
- equal(FactoryGuy.isAttributeRelationship(typeName,'name'),false);
201
+ equal(FactoryGuy.getAttributeRelationship(typeName,'company').typeKey,'company');
202
+ equal(FactoryGuy.getAttributeRelationship(typeName,'hats').typeKey,'hat');
203
+ equal(FactoryGuy.getAttributeRelationship(typeName,'name'),null);
204
204
  });
205
205
 
206
206
 
@@ -403,6 +403,22 @@ asyncTest("#handleCreate failure", function() {
403
403
  });
404
404
  });
405
405
 
406
+ asyncTest("#handleCreate failure with status code 422 and errors in response", function() {
407
+ Em.run(function() {
408
+ testHelper.handleCreate('profile', {succeed: false, status: 422, response: {errors: {description: ['bad']}} } )
409
+
410
+ store.createRecord('profile').save()
411
+ .then(
412
+ function() {},
413
+ function(reason) {
414
+ equal(reason.errors.description, ['bad']+'');
415
+ ok(true)
416
+ start();
417
+ }
418
+ )
419
+ });
420
+ });
421
+
406
422
 
407
423
  asyncTest("#handleCreate match but still fail", function() {
408
424
  Em.run(function() {
@@ -543,7 +559,7 @@ asyncTest("#handleCreate failure with andFail method", function() {
543
559
  });
544
560
 
545
561
 
546
- asyncTest("#handleCreate match but still fail with chaining methods", function() {
562
+ asyncTest("#handleCreate match but still fail with andFail method", function() {
547
563
  Em.run(function() {
548
564
  var description = "special description"
549
565
 
@@ -560,7 +576,21 @@ asyncTest("#handleCreate match but still fail with chaining methods", function()
560
576
  });
561
577
  });
562
578
 
579
+ asyncTest("#handleCreate failure with status code 422 and errors in response with andFail method", function() {
580
+ Em.run(function() {
581
+ testHelper.handleCreate('profile').andFail({status: 422, response: {errors: {description: ['bad']}}});
563
582
 
583
+ store.createRecord('profile').save()
584
+ .then(
585
+ function() {},
586
+ function(reason) {
587
+ equal(reason.errors.description, ['bad']+'');
588
+ ok(true)
589
+ start();
590
+ }
591
+ )
592
+ });
593
+ });
564
594
 
565
595
 
566
596
 
@@ -27,11 +27,11 @@
27
27
  </head>
28
28
  <body>
29
29
  <div id="qunit"></div> <!-- QUnit fills this with results, etc -->
30
- <script src='active_model_adapter_factory_test.js'></script>
31
- <script src='rest_adapter_factory_test.js'></script>
30
+ <!--<script src='active_model_adapter_factory_test.js'></script>-->
31
+ <!--<script src='rest_adapter_factory_test.js'></script>-->
32
32
  <!--<script src='fixture_adapter_factory_test.js'></script>-->
33
- <script src='store_test.js'></script>
34
- <script src='factory_guy_test.js'></script>
33
+ <!--<script src='store_test.js'></script>-->
34
+ <!--<script src='factory_guy_test.js'></script>-->
35
35
  <script src='factory_guy_test_mixin_test.js'></script>
36
36
  <div id='qunit-fixture'>
37
37
 
@@ -93,8 +93,9 @@ var ModelDefinition = function (model, config) {
93
93
  // If it's an object and it's a model association attribute, build the json
94
94
  // for the association and replace the attribute with that json
95
95
  if (FactoryGuy.getStore()) {
96
- if (FactoryGuy.isAttributeRelationship(this.model, attribute)) {
97
- fixture[attribute] = FactoryGuy.build(attribute, fixture[attribute]);
96
+ var relationship = FactoryGuy.getAttributeRelationship(this.model, attribute);
97
+ if (relationship) {
98
+ fixture[attribute] = FactoryGuy.build(relationship.typeKey, fixture[attribute]);
98
99
  }
99
100
  } else {
100
101
  // For legacy reasons, if the store is not set in FactoryGuy, keep
@@ -217,11 +218,7 @@ var FactoryGuy = {
217
218
  @param {Object} config your model definition
218
219
  */
219
220
  define: function (model, config) {
220
- if (this.modelDefinitions[model]) {
221
- this.modelDefinitions[model].merge(config);
222
- } else {
223
- this.modelDefinitions[model] = new ModelDefinition(model, config);
224
- }
221
+ this.modelDefinitions[model] = new ModelDefinition(model, config);
225
222
  },
226
223
  /**
227
224
  Setting the store so FactoryGuy can do some model introspection.
@@ -240,14 +237,15 @@ var FactoryGuy = {
240
237
  @param {String} attribute attribute you want to check
241
238
  @returns {Boolean} true if the attribute is a relationship, false if not
242
239
  */
243
- isAttributeRelationship: function(typeName, attribute) {
240
+ getAttributeRelationship: function(typeName, attribute) {
244
241
  if (!this.store) {
245
242
  Ember.debug("FactoryGuy does not have the application's store. Use FactoryGuy.setStore(store) before making any fixtures")
246
243
  // The legacy value was true.
247
244
  return true;
248
245
  }
249
246
  var model = this.store.modelFor(typeName);
250
- return !!model.typeForRelationship(attribute);
247
+ var relationship = model.typeForRelationship(attribute);
248
+ return !!relationship ? relationship : null;
251
249
  },
252
250
  /**
253
251
  Used in model definitions to declare use of a sequence. For example:
@@ -570,6 +568,7 @@ var FactoryGuy = {
570
568
  };
571
569
 
572
570
  var MockCreateRequest = function(url, store, modelName, options) {
571
+ var status = options.status;
573
572
  var succeed = options.succeed === undefined ? true : options.succeed;
574
573
  var matchArgs = options.match;
575
574
  var returnArgs = options.returns;
@@ -579,6 +578,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
579
578
 
580
579
  this.calculate = function() {
581
580
  if (matchArgs) {
581
+ // although not ideal to create and delete a record, using this technique to
582
+ // get properly serialized payload.
583
+ // TODO: Need to figure out how to use serializer without a record
582
584
  var tmpRecord = store.createRecord(modelName, matchArgs);
583
585
  expectedRequest = tmpRecord.serialize(matchArgs);
584
586
  tmpRecord.deleteRecord();
@@ -586,12 +588,9 @@ var MockCreateRequest = function(url, store, modelName, options) {
586
588
 
587
589
  if (succeed) {
588
590
  var definition = FactoryGuy.modelDefinitions[modelName];
589
- if (responseJson[modelName]) {
590
- // already calculated once, keep the same id
591
- responseJson[modelName] = $.extend({id: responseJson[modelName].id}, matchArgs, returnArgs);
592
- } else {
593
- responseJson[modelName] = $.extend({id: definition.nextId()}, matchArgs, returnArgs);
594
- }
591
+ // If already calculated once, keep the same id
592
+ var id = responseJson[modelName] ? responseJson[modelName].id : definition.nextId();
593
+ responseJson[modelName] = $.extend({id: id}, matchArgs, returnArgs);
595
594
  // Remove belongsTo associations since they will already be set when you called
596
595
  // createRecord, so they don't need to be returned.
597
596
  Ember.get(modelType, 'relationshipsByName').forEach(function (relationship) {
@@ -599,84 +598,96 @@ var MockCreateRequest = function(url, store, modelName, options) {
599
598
  delete responseJson[modelName][relationship.key];
600
599
  }
601
600
  })
601
+ } else {
602
+ this.andFail(options);
602
603
  }
603
-
604
- }
604
+ };
605
605
 
606
606
  this.match = function(matches) {
607
607
  matchArgs = matches;
608
608
  this.calculate();
609
609
  return this;
610
- }
610
+ };
611
611
 
612
612
  this.andReturn = function(returns) {
613
613
  returnArgs = returns;
614
614
  this.calculate();
615
615
  return this;
616
- }
616
+ };
617
617
 
618
- this.andFail = function() {
619
- succeed = false;
620
- return this;
621
- }
618
+ this.andFail = function(options) {
619
+ options = options || {}
620
+ succeed = false;
621
+ status = options.status || 500;
622
+ if (options.response) {
623
+ responseJson = options.response;
624
+ }
625
+ return this;
626
+ };
622
627
 
623
628
  this.handler = function(settings) {
624
- if (settings.url != url || settings.type != 'POST') { return false}
625
-
626
- if (matchArgs) {
627
- var requestData = JSON.parse(settings.data)[modelName];
628
- for (var attribute in expectedRequest) {
629
- if (expectedRequest[attribute] &&
630
- requestData[attribute] != expectedRequest[attribute]) {
631
- return false
629
+ if (succeed) {
630
+ if (matchArgs) {
631
+ var requestData = JSON.parse(settings.data)[modelName];
632
+ for (var attribute in expectedRequest) {
633
+ if (expectedRequest[attribute] &&
634
+ requestData[attribute] != expectedRequest[attribute]) {
635
+ return false;
636
+ }
632
637
  }
633
638
  }
639
+ this.status = 200;
640
+ } else {
641
+ this.status = status;
634
642
  }
635
- var responseStatus = (succeed ? 200: 500);
636
- return {
637
- responseText: responseJson,
638
- status: responseStatus
639
- };
640
- }
643
+ this.responseText = responseJson;
644
+ };
641
645
 
642
646
  this.calculate();
643
647
 
644
- $.mockjax(this.handler);
648
+ var requestConfig = {
649
+ url: url,
650
+ dataType: 'json',
651
+ type: 'POST',
652
+ response: this.handler
653
+ };
654
+
655
+ $.mockjax(requestConfig);
645
656
  };
646
657
 
647
658
  var MockUpdateRequest = function(url, model, mapFind, options) {
648
659
  var status = options.status || 200;
649
660
  var succeed = true;
650
- var response = null;
661
+ var response = null;
651
662
 
652
- if ('succeed' in options) {
653
- succeed = options.succeed;
654
- }
663
+ if ('succeed' in options) {
664
+ succeed = options.succeed;
665
+ }
655
666
 
656
- if ('response' in options) {
657
- response = options.response;
658
- }
667
+ if ('response' in options) {
668
+ response = options.response;
669
+ }
659
670
 
660
671
  this.andSucceed = function(options) {
661
- succeed = true;
672
+ succeed = true;
662
673
  return this;
663
674
  };
664
675
 
665
676
  this.andFail = function(options) {
666
677
  succeed = false;
667
678
  status = options.status || 500;
668
- if ('response' in options) {
669
- response = options.response;
670
- }
679
+ if ('response' in options) {
680
+ response = options.response;
681
+ }
671
682
  return this;
672
683
  };
673
684
 
674
685
  this.handler = function(settings) {
675
686
  if (!succeed) {
676
687
  this.status = status;
677
- if (response !== null) {
678
- this.responseText = response;
679
- }
688
+ if (response !== null) {
689
+ this.responseText = response;
690
+ }
680
691
  } else {
681
692
  var json = model.toJSON({includeId: true});
682
693
  this.responseText = mapFind(model.constructor.typeKey, json);
@@ -1411,10 +1422,12 @@ if (FactoryGuy !== undefined) {
1411
1422
  return null;
1412
1423
  }
1413
1424
  }
1414
-
1415
1425
  // Inspect the data submitted in the request (either POST body or GET query string)
1416
1426
  if ( handler.data ) {
1417
- if ( ! requestSettings.data || !isMockDataEqual(handler.data, requestSettings.data) ) {
1427
+ // console.log('request.data', requestSettings.data )
1428
+ // console.log('handler.data', handler.data )
1429
+ // console.log('data equal', isMockDataEqual(handler.data, requestSettings.data) )
1430
+ if ( ! requestSettings.data || !isMockDataEqual(handler.data, requestSettings.data) ) {
1418
1431
  // They're not identical, do not mock this request
1419
1432
  return null;
1420
1433
  }
@@ -1425,7 +1438,6 @@ if (FactoryGuy !== undefined) {
1425
1438
  // The request type doesn't match (GET vs. POST)
1426
1439
  return null;
1427
1440
  }
1428
-
1429
1441
  return handler;
1430
1442
  }
1431
1443
 
@@ -1789,6 +1801,7 @@ if (FactoryGuy !== undefined) {
1789
1801
  }
1790
1802
 
1791
1803
  mockHandler = getMockForRequest( mockHandlers[k], requestSettings );
1804
+
1792
1805
  if(!mockHandler) {
1793
1806
  // No valid mock found for this request
1794
1807
  continue;
@@ -1840,7 +1853,7 @@ if (FactoryGuy !== undefined) {
1840
1853
  }
1841
1854
 
1842
1855
  copyUrlParameters(mockHandler, origSettings);
1843
-
1856
+ //console.log('here copyUrlParameters', 'mockHandler=>',mockHandler, 'requestSettings=>',requestSettings, 'origSettings=>',origSettings)
1844
1857
  (function(mockHandler, requestSettings, origSettings, origHandler) {
1845
1858
 
1846
1859
  mockRequest = _ajax.call($, $.extend(true, {}, origSettings, {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ember-data-factory-guy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10
4
+ version: 0.9.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Sudol
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-23 00:00:00.000000000 Z
12
+ date: 2015-03-19 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Easily create Fixtures for Ember Data
15
15
  email: