ember-data-factory-guy 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba3f2a078115f1ac18c7a5e4502bda094ac6d68c
4
- data.tar.gz: b9baceeda91d911aeeaf113bd2faf8b2a7359ad3
3
+ metadata.gz: 9c2abf7589fecda0e42120d5c2e9bf8efc2caef7
4
+ data.tar.gz: 93fb335e1e15c4ad91be1b1716b7b30c71483f03
5
5
  SHA512:
6
- metadata.gz: a4b2779dd07b5abd725131d34b0a49c4d0e961e649fb65c1183868ff716fa16bf55defbc6e79bd62502a529b443d7ad341e7526fd998361cbb0b6aacfb22a95a
7
- data.tar.gz: bae5b33e21690265d59056fedcc4f6b3ef4a90b5136f9ee105c0d602cfa13d391a3fc21d432f58c778a7581ee18194170aae305fac7225456c5005d8917cffcc
6
+ metadata.gz: 0b84a2d29390fd35426e6eb4e5fa5b04338999f5e2c859bebc8a76f53a24ad5b1487a18bacb2d0d110fc482b1211fdf6b4d412d91df557913eea1af496ce438a
7
+ data.tar.gz: 4f707a3a8702fb5ab142bf97c1e5a9dbb94ee709989e929d3b4356ba847b6798c86c571dba925c8412678bc926024df409438078f4034a041148e6d2d710fefc
data/README.md CHANGED
@@ -5,9 +5,14 @@
5
5
  ember-data is changing the way they are doing relationships in 1.0.0-beta.10 and above
6
6
  so, if you are using ember-data-1.0.0-beta.8 and earlier, then be sure to use version 0.6.4
7
7
  ( or below ) of ember-data-factory-guy.
8
-
9
- ember-data-factory-guy version 0.7.0 and above will work on the newer versions of ember-data ( 1.0.0-beta.10 and above. )
10
- **For the current version ( 0.7.1 ) though, support for the fixture adapter is currently broken.**
8
+
9
+ - Versions:
10
+ - 0.6.4 -> ember-data-1.0.0-beta.8 and under
11
+ - 0.7.1 -> ember-data-1.0.0-beta.10
12
+ - 0.7.3 -> ember-data-1.0.0-beta.11
13
+ - 0.7.3 -> ember-data-1.0.0-beta.12
14
+
15
+ **For versions ( 0.7.1 -> 0.7.3 ), support for the fixture adapter is currently broken.**
11
16
 
12
17
  ## Using as Gem
13
18
 
@@ -22,7 +27,7 @@ gem 'ember-data-factory-guy', group: test
22
27
  or for particular version:
23
28
 
24
29
  ```ruby
25
- gem 'ember-data-factory-guy', '0.7.0', group: test
30
+ gem 'ember-data-factory-guy', '0.7.3', group: test
26
31
  ```
27
32
 
28
33
  then:
@@ -57,7 +62,7 @@ or for particular version:
57
62
  "dependencies": {
58
63
  "foo-dependency": "latest",
59
64
  "other-foo-dependency": "latest",
60
- "ember-data-factory-guy": "0.7.0"
65
+ "ember-data-factory-guy": "0.7.3"
61
66
  }
62
67
  ```
63
68
 
data/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -432,8 +432,11 @@ FactoryGuy = {
432
432
  if (store.usingFixtureAdapter()) {
433
433
  modelType.FIXTURES = [];
434
434
  }
435
- store.unloadAll(modelType);
435
+ Ember.run(function(){
436
+ store.unloadAll(modelType);
437
+ })
436
438
  } catch (e) {
439
+ // console.log(e)
437
440
  }
438
441
  }
439
442
  },
@@ -609,6 +612,7 @@ DS.Store.reopen({
609
612
  if (relationship.kind == 'belongsTo') {
610
613
  var belongsToRecord = fixture[relationship.key];
611
614
  if (Ember.typeOf(belongsToRecord) == 'object') {
615
+ store.findEmbeddedAssociationsForRESTAdapter(relationship.type, belongsToRecord);
612
616
  belongsToRecord = store.push(relationship.type, belongsToRecord);
613
617
  fixture[relationship.key] = belongsToRecord;
614
618
  }
@@ -1 +1 @@
1
- Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};function MissingSequenceError(message){this.toString=function(){return message}}ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.merge=function(config){};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(attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}if(!fixture.id){fixture.id=modelId++}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(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)};FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},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){console.log("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(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)},resetModels:function(store){for(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){}}},pushFixture:function(modelClass,fixture){if(!modelClass["FIXTURES"]){modelClass["FIXTURES"]=[]}modelClass["FIXTURES"].push(fixture);return fixture},clear:function(opts){if(!opts){this.modelDefinitions={}}}};DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(name,options){var store=this;var modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{var store=this;var 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}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"){var hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var 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)}}})},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"){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){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){if(this.usingFixtureAdapter()){var model=this.modelFor(modelName);FactoryGuy.pushFixture(model,payload)}else{this._super(type,payload)}}});FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var type=store.modelFor(type);var serializer=store.serializerFor(type.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(name,opts){return this.getStore().makeFixture(name,opts)},getStore:function(){return this.get("container").lookup("store:main")},pushPayload:function(type,hash){return this.getStore().pushPayload(type,hash)},pushRecord:function(type,hash){return this.getStore().push(type,hash)},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.data){request.data=options.data}$.mockjax(request)},buildAjaxHttpResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var modelName=FactoryGuy.lookupModelForFixtureName(name);if(this.usingActiveModelSerializer(modelName)){this.toSnakeCase(fixture)}var hash={};hash[modelName]=fixture;return hash},toSnakeCase:function(fixture){for(key in fixture){if(key!=Em.String.decamelize(key)){var value=fixture[key];delete fixture[key];fixture[Em.String.decamelize(key)]=value}}},buildURL:function(type,id){return this.getStore().adapterFor("application").buildURL(type,id)},handleSideloadFind:function(modelName,json,sideload){var id=json.id;var url=this.buildURL(modelName,id);var responseJson={};responseJson[modelName]=json;$.extend(responseJson,sideload);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200})},handleFind:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var id=responseJson[modelName].id;var url=this.buildURL(modelName,id);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200});return responseJson},handleCreate:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"POST",status:status||200});return responseJson},handleUpdate:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:status||200})},handleDelete:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:status||200})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});
1
+ Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};function MissingSequenceError(message){this.toString=function(){return message}}ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.merge=function(config){};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(attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}if(!fixture.id){fixture.id=modelId++}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(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)};FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},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){console.log("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(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)},resetModels:function(store){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}Ember.run(function(){store.unloadAll(modelType)})}catch(e){}}},pushFixture:function(modelClass,fixture){if(!modelClass["FIXTURES"]){modelClass["FIXTURES"]=[]}modelClass["FIXTURES"].push(fixture);return fixture},clear:function(opts){if(!opts){this.modelDefinitions={}}}};DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(name,options){var store=this;var modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{var store=this;var 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}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){if(relationship.kind=="hasMany"){var hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var 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)}}})},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){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){if(this.usingFixtureAdapter()){var model=this.modelFor(modelName);FactoryGuy.pushFixture(model,payload)}else{this._super(type,payload)}}});FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var type=store.modelFor(type);var serializer=store.serializerFor(type.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(name,opts){return this.getStore().makeFixture(name,opts)},getStore:function(){return this.get("container").lookup("store:main")},pushPayload:function(type,hash){return this.getStore().pushPayload(type,hash)},pushRecord:function(type,hash){return this.getStore().push(type,hash)},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.data){request.data=options.data}$.mockjax(request)},buildAjaxHttpResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var modelName=FactoryGuy.lookupModelForFixtureName(name);if(this.usingActiveModelSerializer(modelName)){this.toSnakeCase(fixture)}var hash={};hash[modelName]=fixture;return hash},toSnakeCase:function(fixture){for(key in fixture){if(key!=Em.String.decamelize(key)){var value=fixture[key];delete fixture[key];fixture[Em.String.decamelize(key)]=value}}},buildURL:function(type,id){return this.getStore().adapterFor("application").buildURL(type,id)},handleSideloadFind:function(modelName,json,sideload){var id=json.id;var url=this.buildURL(modelName,id);var responseJson={};responseJson[modelName]=json;$.extend(responseJson,sideload);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200})},handleFind:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var id=responseJson[modelName].id;var url=this.buildURL(modelName,id);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200});return responseJson},handleCreate:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"POST",status:status||200});return responseJson},handleUpdate:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:status||200})},handleDelete:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:status||200})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "ember-data-factory-guy"
4
- s.version = "0.7.2"
4
+ s.version = "0.7.3"
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ["Daniel Sudol", "Alex Opak"]
7
7
  s.email = ["dansudol@yahoo.com", "opak.alexandr@gmail.com"]
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
data/src/factory_guy.js CHANGED
@@ -262,8 +262,11 @@ FactoryGuy = {
262
262
  if (store.usingFixtureAdapter()) {
263
263
  modelType.FIXTURES = [];
264
264
  }
265
- store.unloadAll(modelType);
265
+ Ember.run(function(){
266
+ store.unloadAll(modelType);
267
+ })
266
268
  } catch (e) {
269
+ // console.log(e)
267
270
  }
268
271
  }
269
272
  },
data/src/store.js CHANGED
@@ -143,6 +143,7 @@ DS.Store.reopen({
143
143
  if (relationship.kind == 'belongsTo') {
144
144
  var belongsToRecord = fixture[relationship.key];
145
145
  if (Ember.typeOf(belongsToRecord) == 'object') {
146
+ store.findEmbeddedAssociationsForRESTAdapter(relationship.type, belongsToRecord);
146
147
  belongsToRecord = store.push(relationship.type, belongsToRecord);
147
148
  fixture[relationship.key] = belongsToRecord;
148
149
  }
@@ -22,8 +22,8 @@ test("#resetModels clears the store of models, and resets the model definition",
22
22
 
23
23
  FactoryGuy.resetModels(store);
24
24
 
25
- // equal(store.all('user').get('content.length'),0)
26
- // equal(store.all('project').get('content.length'),0)
25
+ equal(store.all('user').get('content.length'),0)
26
+ equal(store.all('project').get('content.length'),0)
27
27
 
28
28
  for (model in FactoryGuy.modelDefinitions) {
29
29
  var definition = FactoryGuy.modelDefinitions[model];
@@ -219,6 +219,31 @@ test("belongsTo associations defined as attributes in fixture", function() {
219
219
  ok(project.get('user.name') == 'Admin');
220
220
  });
221
221
 
222
+ test("belongsTo with embedded hasMany associations", function() {
223
+ var project = store.makeFixture('project', 'with_user_having_hats');
224
+ var user = project.get('user');
225
+ var hats = user.get('hats');
226
+
227
+ ok(user.get('projects.firstObject') == project)
228
+ ok(hats.get('firstObject.user') == user)
229
+ });
230
+
231
+
232
+ test("hasMany associations defined as attributes in fixture", function() {
233
+ var user = store.makeFixture('user_with_projects');
234
+ equal(user.get('projects.length'), 2)
235
+ ok(user.get('projects.firstObject.user') == user)
236
+ ok(user.get('projects.lastObject.user') == user)
237
+ })
238
+
239
+
240
+ test("hasMany associations defined with traits", function() {
241
+ var user = store.makeFixture('user', 'with_projects');
242
+ equal(user.get('projects.length'), 2)
243
+ ok(user.get('projects.firstObject.user') == user)
244
+ ok(user.get('projects.lastObject.user') == user)
245
+ })
246
+
222
247
 
223
248
  module('DS.Store#makeList with ActiveModelAdapter', {
224
249
  setup: function() {
@@ -22,8 +22,8 @@ test("#resetModels clears the store of models, and resets the model definition",
22
22
 
23
23
  FactoryGuy.resetModels(store);
24
24
 
25
- // equal(store.all('user').get('content.length'), 0)
26
- // equal(store.all('project').get('content.length'), 0)
25
+ equal(store.all('user').get('content.length'), 0)
26
+ equal(store.all('project').get('content.length'), 0)
27
27
 
28
28
  for (model in FactoryGuy.modelDefinitions) {
29
29
  var definition = FactoryGuy.modelDefinitions[model];
@@ -214,6 +214,16 @@ test("belongsTo associations defined as attributes in fixture", function() {
214
214
  });
215
215
 
216
216
 
217
+ test("belongsTo with embedded hasMany associations", function() {
218
+ var project = store.makeFixture('project', 'with_user_having_hats');
219
+ var user = project.get('user');
220
+ var hats = user.get('hats');
221
+
222
+ ok(user.get('projects.firstObject') == project)
223
+ ok(hats.get('firstObject.user') == user)
224
+ });
225
+
226
+
217
227
  test("hasMany associations defined as attributes in fixture", function() {
218
228
  var user = store.makeFixture('user_with_projects');
219
229
  equal(user.get('projects.length'), 2)
@@ -230,6 +240,7 @@ test("hasMany associations defined with traits", function() {
230
240
  })
231
241
 
232
242
 
243
+
233
244
  module('DS.Store#makeList with DS.RESTAdapter', {
234
245
  setup: function() {
235
246
  testHelper = TestHelper.setup(DS.RESTAdapter);
@@ -1,5 +1,18 @@
1
1
  FactoryGuy.define("company", {
2
2
  default: {
3
3
  name: 'Silly corp'
4
+ },
5
+ traits: {
6
+ with_projects: {
7
+ projects: FactoryGuy.hasMany('project', 2)
8
+ }
9
+ }
10
+
11
+ })
12
+
13
+ FactoryGuy.define("small_company", {
14
+ default: {
15
+ name: 'Small Corp',
16
+ projects: FactoryGuy.hasMany('project', 2)
4
17
  }
5
18
  })
@@ -6,6 +6,7 @@ FactoryGuy.define("project", {
6
6
  big: { title: 'Big Project' },
7
7
  with_title_sequence: { title: FactoryGuy.generate('title') },
8
8
  with_user: { user: {} },
9
+ with_user_having_hats: { user: FactoryGuy.belongsTo('user', 'with_hats') },
9
10
  with_dude: { user: {name: 'Dude'} },
10
11
  with_admin: { user: FactoryGuy.belongsTo('admin') }
11
12
  },
@@ -13,6 +13,39 @@ FactoryGuy.define('user', {
13
13
  traits: {
14
14
  with_projects: {
15
15
  projects: FactoryGuy.hasMany('project', 2)
16
+ },
17
+ with_hats: {
18
+ hats: FactoryGuy.hasMany('big_hat', 2)
16
19
  }
17
20
  }
18
- });
21
+ });
22
+
23
+
24
+ //Unit = DS.Model.extend({
25
+ // lesson: DS.belongsTo('lesson')
26
+ //})
27
+ //
28
+ //Lesson = DS.Model.extend({
29
+ // steps: DS.hasMany('step')
30
+ //})
31
+ //
32
+ //Step = DS.Model.extend({
33
+ // lesson: DS.belongsTo ('lesson')
34
+ //})
35
+ //
36
+ //
37
+ //FactoryGuy.define('unit', {
38
+ // default: {
39
+ // lesson: FactoryGuy.belongsTo('lesson')
40
+ // }
41
+ //})
42
+ //
43
+ //FactoryGuy.define('lesson', {
44
+ // default: {
45
+ // steps: FactoryGuy.hasMany('step', 2)
46
+ // }
47
+ //})
48
+ //
49
+ //FactoryGuy.define('step', {
50
+ // default: {}
51
+ //})
@@ -1,10 +1,11 @@
1
1
  Company = DS.Model.extend({
2
2
  name: DS.attr('string'),
3
3
  profile: DS.belongsTo('profile'),
4
- users: DS.hasMany('user', {async: true, inverse: 'company'})
4
+ users: DS.hasMany('user', {async: true, inverse: 'company'}),
5
+ projects: DS.hasMany('project', {async: true})
5
6
  });
6
7
 
7
8
  SmallCompany = Company.extend({
8
9
  owner: DS.belongsTo('user', {async: true}),
9
- projects: DS.hasMany('project', {async: true})
10
+ projects: DS.hasMany('project')
10
11
  });
@@ -1,6 +1,6 @@
1
1
  User = DS.Model.extend({
2
2
  name: DS.attr('string'),
3
- company: DS.belongsTo('company', {async: true, inverse: 'users'}),
3
+ company: DS.belongsTo('company', {async: true, inverse: 'users', polymorphic: true}),
4
4
  properties: DS.hasMany('property', {async: true, inverse: 'owners'}),
5
5
  projects: DS.hasMany('project'),
6
6
  hats: DS.hasMany('hat', {polymorphic: true})
@@ -19,6 +19,7 @@ TestHelper = Ember.Object.createWithMixins(FactoryGuyTestMixin,{
19
19
  profile: Profile,
20
20
  user: User,
21
21
  company: Company,
22
+ small_company: SmallCompany,
22
23
  property: Property,
23
24
  project: Project,
24
25
  group: Group,
data/tests/test_setup.js CHANGED
@@ -1,6 +1,19 @@
1
1
  FactoryGuy.define("company", {
2
2
  default: {
3
3
  name: 'Silly corp'
4
+ },
5
+ traits: {
6
+ with_projects: {
7
+ projects: FactoryGuy.hasMany('project', 2)
8
+ }
9
+ }
10
+
11
+ })
12
+
13
+ FactoryGuy.define("small_company", {
14
+ default: {
15
+ name: 'Small Corp',
16
+ projects: FactoryGuy.hasMany('project', 2)
4
17
  }
5
18
  })
6
19
  FactoryGuy.define("group", {
@@ -71,6 +84,7 @@ FactoryGuy.define("project", {
71
84
  big: { title: 'Big Project' },
72
85
  with_title_sequence: { title: FactoryGuy.generate('title') },
73
86
  with_user: { user: {} },
87
+ with_user_having_hats: { user: FactoryGuy.belongsTo('user', 'with_hats') },
74
88
  with_dude: { user: {name: 'Dude'} },
75
89
  with_admin: { user: FactoryGuy.belongsTo('admin') }
76
90
  },
@@ -126,18 +140,53 @@ FactoryGuy.define('user', {
126
140
  traits: {
127
141
  with_projects: {
128
142
  projects: FactoryGuy.hasMany('project', 2)
143
+ },
144
+ with_hats: {
145
+ hats: FactoryGuy.hasMany('big_hat', 2)
129
146
  }
130
147
  }
131
148
  });
149
+
150
+
151
+ //Unit = DS.Model.extend({
152
+ // lesson: DS.belongsTo('lesson')
153
+ //})
154
+ //
155
+ //Lesson = DS.Model.extend({
156
+ // steps: DS.hasMany('step')
157
+ //})
158
+ //
159
+ //Step = DS.Model.extend({
160
+ // lesson: DS.belongsTo ('lesson')
161
+ //})
162
+ //
163
+ //
164
+ //FactoryGuy.define('unit', {
165
+ // default: {
166
+ // lesson: FactoryGuy.belongsTo('lesson')
167
+ // }
168
+ //})
169
+ //
170
+ //FactoryGuy.define('lesson', {
171
+ // default: {
172
+ // steps: FactoryGuy.hasMany('step', 2)
173
+ // }
174
+ //})
175
+ //
176
+ //FactoryGuy.define('step', {
177
+ // default: {}
178
+ //})
179
+
132
180
  Company = DS.Model.extend({
133
181
  name: DS.attr('string'),
134
182
  profile: DS.belongsTo('profile'),
135
- users: DS.hasMany('user', {async: true, inverse: 'company'})
183
+ users: DS.hasMany('user', {async: true, inverse: 'company'}),
184
+ projects: DS.hasMany('project', {async: true})
136
185
  });
137
186
 
138
187
  SmallCompany = Company.extend({
139
188
  owner: DS.belongsTo('user', {async: true}),
140
- projects: DS.hasMany('project', {async: true})
189
+ projects: DS.hasMany('project')
141
190
  });
142
191
 
143
192
  Group = DS.Model.extend({
@@ -204,7 +253,7 @@ Property = DS.Model.extend({
204
253
  });
205
254
  User = DS.Model.extend({
206
255
  name: DS.attr('string'),
207
- company: DS.belongsTo('company', {async: true, inverse: 'users'}),
256
+ company: DS.belongsTo('company', {async: true, inverse: 'users', polymorphic: true}),
208
257
  properties: DS.hasMany('property', {async: true, inverse: 'owners'}),
209
258
  projects: DS.hasMany('project'),
210
259
  hats: DS.hasMany('hat', {polymorphic: true})
@@ -432,8 +432,11 @@ FactoryGuy = {
432
432
  if (store.usingFixtureAdapter()) {
433
433
  modelType.FIXTURES = [];
434
434
  }
435
- store.unloadAll(modelType);
435
+ Ember.run(function(){
436
+ store.unloadAll(modelType);
437
+ })
436
438
  } catch (e) {
439
+ // console.log(e)
437
440
  }
438
441
  }
439
442
  },
@@ -609,6 +612,7 @@ DS.Store.reopen({
609
612
  if (relationship.kind == 'belongsTo') {
610
613
  var belongsToRecord = fixture[relationship.key];
611
614
  if (Ember.typeOf(belongsToRecord) == 'object') {
615
+ store.findEmbeddedAssociationsForRESTAdapter(relationship.type, belongsToRecord);
612
616
  belongsToRecord = store.push(relationship.type, belongsToRecord);
613
617
  fixture[relationship.key] = belongsToRecord;
614
618
  }
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.7.2
4
+ version: 0.7.3
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: 2014-10-17 00:00:00.000000000 Z
12
+ date: 2014-10-27 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Easily create Fixtures for Ember Data
15
15
  email: