ember-data-factory-guy 0.7.1.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bower.json +2 -2
- data/dist/ember-data-factory-guy.js +11 -11
- data/dist/ember-data-factory-guy.min.js +1 -1
- data/ember-data-factory-guy.gemspec +1 -1
- data/package.json +1 -1
- data/src/store.js +11 -11
- data/tests/rest_adapter_factory_test.js +22 -10
- data/tests/support/factories/company_factory.js +0 -13
- data/tests/support/factories/project_factory.js +0 -1
- data/tests/support/models/user.js +0 -1
- data/tests/test_setup.js +0 -15
- data/vendor/assets/javascripts/ember_data_factory_guy.js +11 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba3f2a078115f1ac18c7a5e4502bda094ac6d68c
|
4
|
+
data.tar.gz: b9baceeda91d911aeeaf113bd2faf8b2a7359ad3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4b2779dd07b5abd725131d34b0a49c4d0e961e649fb65c1183868ff716fa16bf55defbc6e79bd62502a529b443d7ad341e7526fd998361cbb0b6aacfb22a95a
|
7
|
+
data.tar.gz: bae5b33e21690265d59056fedcc4f6b3ef4a90b5136f9ee105c0d602cfa13d391a3fc21d432f58c778a7581ee18194170aae305fac7225456c5005d8917cffcc
|
data/bower.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ember-data-factory-guy",
|
3
|
-
"version": "0.7.
|
3
|
+
"version": "0.7.2",
|
4
4
|
"authors": [
|
5
5
|
"Daniel Sudol <dansudol@yahoo.com>",
|
6
6
|
"Opak Alex <opak.alexandr@gmail.com>"
|
@@ -19,7 +19,7 @@
|
|
19
19
|
"handlebars": "~1.1.2",
|
20
20
|
"jquery": "2.0.3",
|
21
21
|
"ember": "1.7.0",
|
22
|
-
"ember-data": "1.0.0-beta.
|
22
|
+
"ember-data": "1.0.0-beta.11",
|
23
23
|
"chance": "latest",
|
24
24
|
"qunit": "latest"
|
25
25
|
},
|
@@ -554,7 +554,7 @@ DS.Store.reopen({
|
|
554
554
|
setAssociationsForFixtureAdapter: function (modelType, modelName, fixture) {
|
555
555
|
var self = this;
|
556
556
|
var adapter = this.adapterFor('application');
|
557
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
557
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
558
558
|
if (relationship.kind == 'hasMany') {
|
559
559
|
var hasManyRelation = fixture[relationship.key];
|
560
560
|
if (hasManyRelation) {
|
@@ -605,11 +605,10 @@ DS.Store.reopen({
|
|
605
605
|
*/
|
606
606
|
findEmbeddedAssociationsForRESTAdapter: function (modelType, fixture) {
|
607
607
|
var store = this;
|
608
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
608
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
609
609
|
if (relationship.kind == 'belongsTo') {
|
610
610
|
var belongsToRecord = fixture[relationship.key];
|
611
611
|
if (Ember.typeOf(belongsToRecord) == 'object') {
|
612
|
-
store.findEmbeddedAssociationsForRESTAdapter(relationship.type, belongsToRecord);
|
613
612
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
614
613
|
fixture[relationship.key] = belongsToRecord;
|
615
614
|
}
|
@@ -654,8 +653,9 @@ DS.Store.reopen({
|
|
654
653
|
```
|
655
654
|
|
656
655
|
NOTE:
|
657
|
-
As of ember-data-1.0.0-beta.10
|
658
|
-
|
656
|
+
As of ember-data-1.0.0-beta.10 and ember-data-1.0.0-beta.12,
|
657
|
+
this method is only needed because the belongsTo is not assigned when
|
658
|
+
there is a self referential polymorphic has many association.
|
659
659
|
|
660
660
|
@param {DS.Model} modelType model type like 'User'
|
661
661
|
@param {String} modelName model name like 'user'
|
@@ -663,7 +663,7 @@ DS.Store.reopen({
|
|
663
663
|
*/
|
664
664
|
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
665
665
|
var self = this;
|
666
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
666
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
667
667
|
if (relationship.kind == 'hasMany') {
|
668
668
|
var children = model.get(name) || [];
|
669
669
|
children.forEach(function (child) {
|
@@ -672,12 +672,12 @@ DS.Store.reopen({
|
|
672
672
|
child.constructor,
|
673
673
|
model
|
674
674
|
);
|
675
|
-
|
676
|
-
|
677
|
-
child.set(belongsToName || inverseName, model);
|
675
|
+
if (belongsToName) {
|
676
|
+
child.set(belongsToName, model);
|
678
677
|
}
|
679
678
|
})
|
680
679
|
}
|
680
|
+
|
681
681
|
})
|
682
682
|
},
|
683
683
|
|
@@ -685,7 +685,7 @@ DS.Store.reopen({
|
|
685
685
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
686
686
|
var relationshipName;
|
687
687
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
688
|
-
function (
|
688
|
+
function (relationship, name) {
|
689
689
|
if (relationship.kind == kind &&
|
690
690
|
childModel instanceof relationship.type) {
|
691
691
|
relationshipName = relationship.key;
|
@@ -698,7 +698,7 @@ DS.Store.reopen({
|
|
698
698
|
findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
|
699
699
|
var relationshipName;
|
700
700
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
701
|
-
function (
|
701
|
+
function (relationship, name) {
|
702
702
|
if (relationship.kind == 'hasMany' &&
|
703
703
|
childModelType == relationship.type) {
|
704
704
|
relationshipName = relationship.key;
|
@@ -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(name,relationship){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(name,relationship){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(name,relationship){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);var inverseName=relationship.options&&relationship.options.inverse;if(belongsToName||inverseName){child.set(belongsToName||inverseName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){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(name,relationship){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=[]}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,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.
|
4
|
+
s.version = "0.7.2"
|
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
data/src/store.js
CHANGED
@@ -88,7 +88,7 @@ DS.Store.reopen({
|
|
88
88
|
setAssociationsForFixtureAdapter: function (modelType, modelName, fixture) {
|
89
89
|
var self = this;
|
90
90
|
var adapter = this.adapterFor('application');
|
91
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
91
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
92
92
|
if (relationship.kind == 'hasMany') {
|
93
93
|
var hasManyRelation = fixture[relationship.key];
|
94
94
|
if (hasManyRelation) {
|
@@ -139,11 +139,10 @@ DS.Store.reopen({
|
|
139
139
|
*/
|
140
140
|
findEmbeddedAssociationsForRESTAdapter: function (modelType, fixture) {
|
141
141
|
var store = this;
|
142
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
142
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
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);
|
147
146
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
148
147
|
fixture[relationship.key] = belongsToRecord;
|
149
148
|
}
|
@@ -188,8 +187,9 @@ DS.Store.reopen({
|
|
188
187
|
```
|
189
188
|
|
190
189
|
NOTE:
|
191
|
-
As of ember-data-1.0.0-beta.10
|
192
|
-
|
190
|
+
As of ember-data-1.0.0-beta.10 and ember-data-1.0.0-beta.12,
|
191
|
+
this method is only needed because the belongsTo is not assigned when
|
192
|
+
there is a self referential polymorphic has many association.
|
193
193
|
|
194
194
|
@param {DS.Model} modelType model type like 'User'
|
195
195
|
@param {String} modelName model name like 'user'
|
@@ -197,7 +197,7 @@ DS.Store.reopen({
|
|
197
197
|
*/
|
198
198
|
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
199
199
|
var self = this;
|
200
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
200
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
201
201
|
if (relationship.kind == 'hasMany') {
|
202
202
|
var children = model.get(name) || [];
|
203
203
|
children.forEach(function (child) {
|
@@ -206,12 +206,12 @@ DS.Store.reopen({
|
|
206
206
|
child.constructor,
|
207
207
|
model
|
208
208
|
);
|
209
|
-
|
210
|
-
|
211
|
-
child.set(belongsToName || inverseName, model);
|
209
|
+
if (belongsToName) {
|
210
|
+
child.set(belongsToName, model);
|
212
211
|
}
|
213
212
|
})
|
214
213
|
}
|
214
|
+
|
215
215
|
})
|
216
216
|
},
|
217
217
|
|
@@ -219,7 +219,7 @@ DS.Store.reopen({
|
|
219
219
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
220
220
|
var relationshipName;
|
221
221
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
222
|
-
function (
|
222
|
+
function (relationship, name) {
|
223
223
|
if (relationship.kind == kind &&
|
224
224
|
childModel instanceof relationship.type) {
|
225
225
|
relationshipName = relationship.key;
|
@@ -232,7 +232,7 @@ DS.Store.reopen({
|
|
232
232
|
findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
|
233
233
|
var relationshipName;
|
234
234
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
235
|
-
function (
|
235
|
+
function (relationship, name) {
|
236
236
|
if (relationship.kind == 'hasMany' &&
|
237
237
|
childModelType == relationship.type) {
|
238
238
|
relationshipName = relationship.key;
|
@@ -68,16 +68,6 @@ test("when hasMany associations assigned, belongTo parent is assigned", function
|
|
68
68
|
});
|
69
69
|
|
70
70
|
|
71
|
-
test("when belongsTo has a hasMany associations in the definition", function() {
|
72
|
-
var project = store.makeFixture('project', 'with_user_having_hats');
|
73
|
-
var user = project.get('user');
|
74
|
-
var hats = user.get('hats');
|
75
|
-
|
76
|
-
ok(user.get('projects.firstObject') == project)
|
77
|
-
ok(hats.get('firstObject.user') == user)
|
78
|
-
});
|
79
|
-
|
80
|
-
|
81
71
|
asyncTest("when hasMany ( asnyc ) associations assigned, belongTo parent is assigned", function() {
|
82
72
|
var user = store.makeFixture('user');
|
83
73
|
var company = store.makeFixture('company', {users: [user]});
|
@@ -265,3 +255,25 @@ test("creates records in the store", function() {
|
|
265
255
|
ok(storeUsers[0] == users[0]);
|
266
256
|
ok(storeUsers[1] == users[1]);
|
267
257
|
});
|
258
|
+
|
259
|
+
//test("creates records in the store", function() {
|
260
|
+
// var lesson = store.makeFixture('lesson');
|
261
|
+
// var unit = store.makeFixture('unit');
|
262
|
+
// var unit = store.makeFixture('unit', {lesson: lesson});
|
263
|
+
// console.log('@@###',unit+'', unit.get('lesson')+'')
|
264
|
+
|
265
|
+
// var unit = FactoryGuy.build('unit_with_lesson')
|
266
|
+
// store.push('unit' , unit)
|
267
|
+
// console.log(store.modelFor('lesson')+'')
|
268
|
+
// var relationshipsByName = Ember.get(Lesson, 'relationshipsByName');
|
269
|
+
// console.log(relationshipsByName)
|
270
|
+
|
271
|
+
// var unit = store.makeFixture('unit_with_lesson');
|
272
|
+
// console.log('@@###',unit+'', unit.get('lesson')+'')
|
273
|
+
|
274
|
+
// console.log(FactoryGuy.build('unit_with_lesson'));
|
275
|
+
// unit.get('lesson').then(function(lesson) {
|
276
|
+
// ok(lesson instanceof Lesson == true)
|
277
|
+
// })
|
278
|
+
|
279
|
+
//})
|
@@ -1,18 +1,5 @@
|
|
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)
|
17
4
|
}
|
18
5
|
})
|
@@ -6,7 +6,6 @@ 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') },
|
10
9
|
with_dude: { user: {name: 'Dude'} },
|
11
10
|
with_admin: { user: FactoryGuy.belongsTo('admin') }
|
12
11
|
},
|
data/tests/test_setup.js
CHANGED
@@ -1,19 +1,6 @@
|
|
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)
|
17
4
|
}
|
18
5
|
})
|
19
6
|
FactoryGuy.define("group", {
|
@@ -84,7 +71,6 @@ FactoryGuy.define("project", {
|
|
84
71
|
big: { title: 'Big Project' },
|
85
72
|
with_title_sequence: { title: FactoryGuy.generate('title') },
|
86
73
|
with_user: { user: {} },
|
87
|
-
with_user_having_hats: { user: FactoryGuy.belongsTo('user', 'with_hats') },
|
88
74
|
with_dude: { user: {name: 'Dude'} },
|
89
75
|
with_admin: { user: FactoryGuy.belongsTo('admin') }
|
90
76
|
},
|
@@ -224,7 +210,6 @@ User = DS.Model.extend({
|
|
224
210
|
hats: DS.hasMany('hat', {polymorphic: true})
|
225
211
|
});
|
226
212
|
|
227
|
-
|
228
213
|
/*!
|
229
214
|
* MockJax - jQuery Plugin to Mock Ajax requests
|
230
215
|
*
|
@@ -554,7 +554,7 @@ DS.Store.reopen({
|
|
554
554
|
setAssociationsForFixtureAdapter: function (modelType, modelName, fixture) {
|
555
555
|
var self = this;
|
556
556
|
var adapter = this.adapterFor('application');
|
557
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
557
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
558
558
|
if (relationship.kind == 'hasMany') {
|
559
559
|
var hasManyRelation = fixture[relationship.key];
|
560
560
|
if (hasManyRelation) {
|
@@ -605,11 +605,10 @@ DS.Store.reopen({
|
|
605
605
|
*/
|
606
606
|
findEmbeddedAssociationsForRESTAdapter: function (modelType, fixture) {
|
607
607
|
var store = this;
|
608
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
608
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
609
609
|
if (relationship.kind == 'belongsTo') {
|
610
610
|
var belongsToRecord = fixture[relationship.key];
|
611
611
|
if (Ember.typeOf(belongsToRecord) == 'object') {
|
612
|
-
store.findEmbeddedAssociationsForRESTAdapter(relationship.type, belongsToRecord);
|
613
612
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
614
613
|
fixture[relationship.key] = belongsToRecord;
|
615
614
|
}
|
@@ -654,8 +653,9 @@ DS.Store.reopen({
|
|
654
653
|
```
|
655
654
|
|
656
655
|
NOTE:
|
657
|
-
As of ember-data-1.0.0-beta.10
|
658
|
-
|
656
|
+
As of ember-data-1.0.0-beta.10 and ember-data-1.0.0-beta.12,
|
657
|
+
this method is only needed because the belongsTo is not assigned when
|
658
|
+
there is a self referential polymorphic has many association.
|
659
659
|
|
660
660
|
@param {DS.Model} modelType model type like 'User'
|
661
661
|
@param {String} modelName model name like 'user'
|
@@ -663,7 +663,7 @@ DS.Store.reopen({
|
|
663
663
|
*/
|
664
664
|
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
665
665
|
var self = this;
|
666
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (
|
666
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (relationship, name) {
|
667
667
|
if (relationship.kind == 'hasMany') {
|
668
668
|
var children = model.get(name) || [];
|
669
669
|
children.forEach(function (child) {
|
@@ -672,12 +672,12 @@ DS.Store.reopen({
|
|
672
672
|
child.constructor,
|
673
673
|
model
|
674
674
|
);
|
675
|
-
|
676
|
-
|
677
|
-
child.set(belongsToName || inverseName, model);
|
675
|
+
if (belongsToName) {
|
676
|
+
child.set(belongsToName, model);
|
678
677
|
}
|
679
678
|
})
|
680
679
|
}
|
680
|
+
|
681
681
|
})
|
682
682
|
},
|
683
683
|
|
@@ -685,7 +685,7 @@ DS.Store.reopen({
|
|
685
685
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
686
686
|
var relationshipName;
|
687
687
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
688
|
-
function (
|
688
|
+
function (relationship, name) {
|
689
689
|
if (relationship.kind == kind &&
|
690
690
|
childModel instanceof relationship.type) {
|
691
691
|
relationshipName = relationship.key;
|
@@ -698,7 +698,7 @@ DS.Store.reopen({
|
|
698
698
|
findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
|
699
699
|
var relationshipName;
|
700
700
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
701
|
-
function (
|
701
|
+
function (relationship, name) {
|
702
702
|
if (relationship.kind == 'hasMany' &&
|
703
703
|
childModelType == relationship.type) {
|
704
704
|
relationshipName = relationship.key;
|
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.
|
4
|
+
version: 0.7.2
|
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-
|
12
|
+
date: 2014-10-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Easily create Fixtures for Ember Data
|
15
15
|
email:
|