ember-data-factory-guy 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bower.json +1 -1
- data/dist/ember-data-factory-guy.js +29 -15
- 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 +29 -15
- data/tests/active_model_adapter_factory_test.js +23 -0
- data/tests/factory_guy_test.js +3 -3
- data/tests/rest_adapter_factory_test.js +23 -0
- data/tests/support/factories/profile_factory.js +5 -0
- data/tests/support/factories/project_factory.js +4 -1
- data/tests/support/models/company.js +4 -3
- data/tests/support/models/hat.js +4 -4
- data/tests/support/models/profile.js +4 -0
- data/tests/support/models/project.js +5 -3
- data/tests/support/models/user.js +3 -3
- data/tests/support/test_helper.js +1 -0
- data/tests/test_setup.js +30 -14
- data/vendor/assets/javascripts/ember_data_factory_guy.js +29 -15
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee062dcdf9d9bc4fb670a1fc9bdf0828fd5b3e02
|
4
|
+
data.tar.gz: 708c6fc94c00e38a1713e96430eaab7b5d78eaa7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e5132bf51410a64650cca36188fa02c92658a12e14b0e6192e29b957274f4cb01a2363058f1b589984fd2bbc8ce6834ea6efb67112d1374d12ff7de05983a0f
|
7
|
+
data.tar.gz: a4a26146f2374e475915b6c1a4bbdae9e9caaf35dff62f6ea3591704ff3af5dbd1f752efd8ba37b3f71b41e442962d296a442af9df5e04e07f8e6eba684fbcdc
|
data/bower.json
CHANGED
@@ -527,42 +527,55 @@ DS.Store.reopen({
|
|
527
527
|
var self = this;
|
528
528
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
529
529
|
if (relationship.kind == 'hasMany') {
|
530
|
+
var belongsToName = modelName;
|
531
|
+
if (relationship.options && relationship.options.inverse) {
|
532
|
+
belongsToName = relationship.options.inverse;
|
533
|
+
}
|
530
534
|
var children = model.get(name) || [];
|
531
535
|
children.forEach(function (child) {
|
532
|
-
child.set(
|
536
|
+
child.set(belongsToName, model);
|
533
537
|
})
|
534
538
|
}
|
535
539
|
|
536
540
|
if (relationship.kind == 'belongsTo') {
|
537
541
|
var belongsToRecord = model.get(name);
|
538
|
-
var setAssociation = function() {
|
539
|
-
var hasManyName = self.findHasManyRelationshipName(
|
540
|
-
belongsToRecord.constructor,
|
541
|
-
model
|
542
|
-
)
|
543
|
-
if (hasManyName) {
|
544
|
-
belongsToRecord.get(hasManyName).addObject(model);
|
545
|
-
}
|
546
|
-
}
|
547
542
|
if (belongsToRecord) {
|
543
|
+
var setAssociations = function() {
|
544
|
+
var hasManyName = self.findRelationshipName(
|
545
|
+
'hasMany',
|
546
|
+
belongsToRecord.constructor,
|
547
|
+
model
|
548
|
+
)
|
549
|
+
if (hasManyName) {
|
550
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
551
|
+
}
|
552
|
+
var oneToOneName = self.findRelationshipName(
|
553
|
+
'belongsTo',
|
554
|
+
belongsToRecord.constructor,
|
555
|
+
model
|
556
|
+
)
|
557
|
+
if (oneToOneName) {
|
558
|
+
belongsToRecord.set(oneToOneName, model);
|
559
|
+
}
|
560
|
+
}
|
548
561
|
if (belongsToRecord.then) {
|
549
562
|
belongsToRecord.then(function(record) {
|
550
563
|
belongsToRecord = record;
|
551
|
-
|
564
|
+
setAssociations();
|
552
565
|
})
|
553
566
|
} else {
|
554
|
-
|
567
|
+
setAssociations();
|
555
568
|
}
|
556
569
|
}
|
557
570
|
}
|
558
571
|
})
|
559
572
|
},
|
560
573
|
|
561
|
-
|
574
|
+
findRelationshipName: function (kind, belongToModelType, childModel) {
|
562
575
|
var relationshipName;
|
563
576
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
564
577
|
function (name, relationship) {
|
565
|
-
if (relationship.kind ==
|
578
|
+
if (relationship.kind == kind &&
|
566
579
|
childModel instanceof relationship.type) {
|
567
580
|
relationshipName = relationship.key;
|
568
581
|
}
|
@@ -652,7 +665,8 @@ DS.FixtureAdapter.reopen({
|
|
652
665
|
relationShips.belongsTo.forEach(function (relationship) {
|
653
666
|
var belongsToRecord = record.get(relationship);
|
654
667
|
if (belongsToRecord) {
|
655
|
-
var hasManyName = store.
|
668
|
+
var hasManyName = store.findRelationshipName(
|
669
|
+
'hasMany',
|
656
670
|
belongsToRecord.constructor,
|
657
671
|
record
|
658
672
|
);
|
@@ -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 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(sequenceName){var sequence=sequences[sequenceName];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts){var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,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,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts))}return arr};this.reset=function(){modelId=1;for(name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(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;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(sequenceName){return function(){return this.generate(sequenceName)}},association:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,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(name,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts)},buildList:function(name,number,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,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 modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=this.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.findEmbeddedBelongsToAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore()}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"){if(fixture[relationship.key]){fixture[relationship.key].forEach(function(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)}}})},findEmbeddedBelongsToAssociationsForRESTAdapter: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"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}})},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){child.set(
|
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 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(sequenceName){var sequence=sequences[sequenceName];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts){var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,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,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts))}return arr};this.reset=function(){modelId=1;for(name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(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;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(sequenceName){return function(){return this.generate(sequenceName)}},association:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,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(name,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts)},buildList:function(name,number,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,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 modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=this.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.findEmbeddedBelongsToAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore()}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"){if(fixture[relationship.key]){fixture[relationship.key].forEach(function(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)}}})},findEmbeddedBelongsToAssociationsForRESTAdapter: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"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var belongsToName=modelName;if(relationship.options&&relationship.options.inverse){belongsToName=relationship.options.inverse}var children=model.get(name)||[];children.forEach(function(child){child.set(belongsToName,model)})}if(relationship.kind=="belongsTo"){var belongsToRecord=model.get(name);if(belongsToRecord){var setAssociations=function(){var hasManyName=self.findRelationshipName("hasMany",belongsToRecord.constructor,model);if(hasManyName){belongsToRecord.get(hasManyName).addObject(model)}var oneToOneName=self.findRelationshipName("belongsTo",belongsToRecord.constructor,model);if(oneToOneName){belongsToRecord.set(oneToOneName,model)}};if(belongsToRecord.then){belongsToRecord.then(function(record){belongsToRecord=record;setAssociations()})}else{setAssociations()}}}})},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)}}});DS.FixtureAdapter.reopen({createRecord:function(store,type,record){var promise=this._super(store,type,record);promise.then(function(){var relationShips=Ember.get(type,"relationshipNames");if(relationShips.belongsTo){relationShips.belongsTo.forEach(function(relationship){var belongsToRecord=record.get(relationship);if(belongsToRecord){var hasManyName=store.findRelationshipName("hasMany",belongsToRecord.constructor,record);belongsToRecord.get(hasManyName).addObject(record)}})}});return promise}});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},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)},handleCreate:function(name,opts){var model=FactoryGuy.lookupModelForFixtureName(name);this.stubEndpointForHttpRequest("/"+Em.String.pluralize(model),this.buildAjaxCreateResponse(name,opts),{type:"POST"})},buildAjaxCreateResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var model=FactoryGuy.lookupModelForFixtureName(name);var hash={};hash[model]=fixture;return hash},handleUpdate:function(root,id){this.stubEndpointForHttpRequest("/"+Em.String.pluralize(root)+"/"+id,{},{type:"PUT"})},handleDelete:function(root,id){this.stubEndpointForHttpRequest("/"+Em.String.pluralize(root)+"/"+id,{},{type:"DELETE"})},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.3.
|
4
|
+
s.version = "0.3.7"
|
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
@@ -169,42 +169,55 @@ DS.Store.reopen({
|
|
169
169
|
var self = this;
|
170
170
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
171
171
|
if (relationship.kind == 'hasMany') {
|
172
|
+
var belongsToName = modelName;
|
173
|
+
if (relationship.options && relationship.options.inverse) {
|
174
|
+
belongsToName = relationship.options.inverse;
|
175
|
+
}
|
172
176
|
var children = model.get(name) || [];
|
173
177
|
children.forEach(function (child) {
|
174
|
-
child.set(
|
178
|
+
child.set(belongsToName, model);
|
175
179
|
})
|
176
180
|
}
|
177
181
|
|
178
182
|
if (relationship.kind == 'belongsTo') {
|
179
183
|
var belongsToRecord = model.get(name);
|
180
|
-
var setAssociation = function() {
|
181
|
-
var hasManyName = self.findHasManyRelationshipName(
|
182
|
-
belongsToRecord.constructor,
|
183
|
-
model
|
184
|
-
)
|
185
|
-
if (hasManyName) {
|
186
|
-
belongsToRecord.get(hasManyName).addObject(model);
|
187
|
-
}
|
188
|
-
}
|
189
184
|
if (belongsToRecord) {
|
185
|
+
var setAssociations = function() {
|
186
|
+
var hasManyName = self.findRelationshipName(
|
187
|
+
'hasMany',
|
188
|
+
belongsToRecord.constructor,
|
189
|
+
model
|
190
|
+
)
|
191
|
+
if (hasManyName) {
|
192
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
193
|
+
}
|
194
|
+
var oneToOneName = self.findRelationshipName(
|
195
|
+
'belongsTo',
|
196
|
+
belongsToRecord.constructor,
|
197
|
+
model
|
198
|
+
)
|
199
|
+
if (oneToOneName) {
|
200
|
+
belongsToRecord.set(oneToOneName, model);
|
201
|
+
}
|
202
|
+
}
|
190
203
|
if (belongsToRecord.then) {
|
191
204
|
belongsToRecord.then(function(record) {
|
192
205
|
belongsToRecord = record;
|
193
|
-
|
206
|
+
setAssociations();
|
194
207
|
})
|
195
208
|
} else {
|
196
|
-
|
209
|
+
setAssociations();
|
197
210
|
}
|
198
211
|
}
|
199
212
|
}
|
200
213
|
})
|
201
214
|
},
|
202
215
|
|
203
|
-
|
216
|
+
findRelationshipName: function (kind, belongToModelType, childModel) {
|
204
217
|
var relationshipName;
|
205
218
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
206
219
|
function (name, relationship) {
|
207
|
-
if (relationship.kind ==
|
220
|
+
if (relationship.kind == kind &&
|
208
221
|
childModel instanceof relationship.type) {
|
209
222
|
relationshipName = relationship.key;
|
210
223
|
}
|
@@ -294,7 +307,8 @@ DS.FixtureAdapter.reopen({
|
|
294
307
|
relationShips.belongsTo.forEach(function (relationship) {
|
295
308
|
var belongsToRecord = record.get(relationship);
|
296
309
|
if (belongsToRecord) {
|
297
|
-
var hasManyName = store.
|
310
|
+
var hasManyName = store.findRelationshipName(
|
311
|
+
'hasMany',
|
298
312
|
belongsToRecord.constructor,
|
299
313
|
record
|
300
314
|
);
|
@@ -59,6 +59,7 @@ asyncTest("creates records in the store", function() {
|
|
59
59
|
});
|
60
60
|
});
|
61
61
|
|
62
|
+
|
62
63
|
test("when hasMany associations assigned, belongTo parent is assigned", function() {
|
63
64
|
var project = store.makeFixture('project');
|
64
65
|
var user = store.makeFixture('user', {projects: [project]})
|
@@ -92,6 +93,13 @@ test("when polymorphic hasMany associations are assigned, belongTo parent is ass
|
|
92
93
|
});
|
93
94
|
|
94
95
|
|
96
|
+
test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
|
97
|
+
var project = store.makeFixture('project');
|
98
|
+
var project2 = store.makeFixture('project', {children: [project]});
|
99
|
+
deepEqual(project.get('parent').toJSON(), project2.toJSON());
|
100
|
+
});
|
101
|
+
|
102
|
+
|
95
103
|
test("when belongTo parent is assigned, parent adds to hasMany records", function() {
|
96
104
|
var user = store.makeFixture('user');
|
97
105
|
var project1 = store.makeFixture('project', {user: user});
|
@@ -126,6 +134,21 @@ asyncTest("when async belongsTo parent is assigned, parent adds to hasMany recor
|
|
126
134
|
});
|
127
135
|
|
128
136
|
|
137
|
+
test("when belongTo parent is assigned, parent adds to hasMany record using inverse", function() {
|
138
|
+
var project = store.makeFixture('project');
|
139
|
+
var project2 = store.makeFixture('project', {parent: project});
|
140
|
+
equal(project.get('children.length'), 1);
|
141
|
+
deepEqual(project.get('children.firstObject').toJSON(), project2.toJSON());
|
142
|
+
});
|
143
|
+
|
144
|
+
|
145
|
+
test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
|
146
|
+
var company = store.makeFixture('company');
|
147
|
+
var profile = store.makeFixture('profile', {company: company});
|
148
|
+
deepEqual(company.get('profile').toJSON(), profile.toJSON());
|
149
|
+
});
|
150
|
+
|
151
|
+
|
129
152
|
test("belongsTo associations defined as attributes in fixture", function() {
|
130
153
|
var project = store.makeFixture('project_with_user');
|
131
154
|
equal(project.get('user') instanceof User, true)
|
data/tests/factory_guy_test.js
CHANGED
@@ -82,13 +82,13 @@ test("Referring to other attributes in attribute definition", function() {
|
|
82
82
|
|
83
83
|
test("Using associations in attribute definition", function() {
|
84
84
|
var json = FactoryGuy.build('project_with_user');
|
85
|
-
deepEqual(json, {id: 1, title: '
|
85
|
+
deepEqual(json, {id: 1, title: 'Project1', user: {id: 1, name: 'User1'}}, 'creates default user for "user" belongsTo attribute');
|
86
86
|
|
87
87
|
var json = FactoryGuy.build('project_with_dude');
|
88
|
-
deepEqual(json, {id: 2, title: '
|
88
|
+
deepEqual(json, {id: 2, title: 'Project2', user: {id: 2, name: 'Dude'}}, 'creates user with optional attributes for "user" belongsTo attribute');
|
89
89
|
|
90
90
|
var json = FactoryGuy.build('project_with_admin');
|
91
|
-
deepEqual(json, {id: 3, title: '
|
91
|
+
deepEqual(json, {id: 3, title: 'Project3', user: {id: 3, name: 'Admin'}}, 'creates named user for "user" belongsTo attribute');
|
92
92
|
});
|
93
93
|
|
94
94
|
|
@@ -59,6 +59,7 @@ asyncTest("creates records in the store", function() {
|
|
59
59
|
});
|
60
60
|
});
|
61
61
|
|
62
|
+
|
62
63
|
test("when hasMany associations assigned, belongTo parent is assigned", function() {
|
63
64
|
var project = store.makeFixture('project');
|
64
65
|
var user = store.makeFixture('user', {projects: [project]})
|
@@ -92,6 +93,13 @@ test("when polymorphic hasMany associations are assigned, belongTo parent is ass
|
|
92
93
|
});
|
93
94
|
|
94
95
|
|
96
|
+
test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
|
97
|
+
var project = store.makeFixture('project');
|
98
|
+
var project2 = store.makeFixture('project', {children: [project]});
|
99
|
+
deepEqual(project.get('parent').toJSON(), project2.toJSON());
|
100
|
+
});
|
101
|
+
|
102
|
+
|
95
103
|
test("when belongTo parent is assigned, parent adds to hasMany records", function() {
|
96
104
|
var user = store.makeFixture('user');
|
97
105
|
var project1 = store.makeFixture('project', {user: user});
|
@@ -126,6 +134,21 @@ asyncTest("when async belongsTo parent is assigned, parent adds to hasMany recor
|
|
126
134
|
});
|
127
135
|
|
128
136
|
|
137
|
+
test("when belongTo parent is assigned, parent adds to hasMany record using inverse", function() {
|
138
|
+
var project = store.makeFixture('project');
|
139
|
+
var project2 = store.makeFixture('project', {parent: project});
|
140
|
+
equal(project.get('children.length'), 1);
|
141
|
+
deepEqual(project.get('children.firstObject').toJSON(), project2.toJSON());
|
142
|
+
});
|
143
|
+
|
144
|
+
|
145
|
+
test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
|
146
|
+
var company = store.makeFixture('company');
|
147
|
+
var profile = store.makeFixture('profile', {company: company});
|
148
|
+
deepEqual(company.get('profile').toJSON(), profile.toJSON());
|
149
|
+
});
|
150
|
+
|
151
|
+
|
129
152
|
test("belongsTo associations defined as attributes in fixture", function() {
|
130
153
|
var project = store.makeFixture('project_with_user');
|
131
154
|
equal(project.get('user') instanceof User, true)
|
data/tests/support/models/hat.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Hat = DS.Model.extend({
|
2
2
|
type: DS.attr('string'),
|
3
3
|
user: DS.belongsTo('user'),
|
4
|
-
hat:
|
4
|
+
hat: DS.belongsTo('hat', {inverse: 'hats', polymorphic: true}),
|
5
5
|
hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
|
6
|
-
})
|
6
|
+
});
|
7
7
|
|
8
|
-
BigHat = Hat.extend()
|
9
|
-
SmallHat = Hat.extend()
|
8
|
+
BigHat = Hat.extend();
|
9
|
+
SmallHat = Hat.extend();
|
10
10
|
|
@@ -1,4 +1,6 @@
|
|
1
1
|
Project = DS.Model.extend({
|
2
|
-
title:
|
3
|
-
user:
|
4
|
-
})
|
2
|
+
title: DS.attr('string'),
|
3
|
+
user: DS.belongsTo('user'),
|
4
|
+
parent: DS.belongsTo('project', {inverse: 'children'}),
|
5
|
+
children: DS.hasMany('project', {inverse: 'parent'})
|
6
|
+
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
User = DS.Model.extend({
|
2
2
|
name: DS.attr('string'),
|
3
|
-
company:
|
3
|
+
company: DS.belongsTo('company', {async: true}),
|
4
4
|
projects: DS.hasMany('project'),
|
5
|
-
hats:
|
6
|
-
})
|
5
|
+
hats: DS.hasMany('hat', {polymorphic: true})
|
6
|
+
});
|
@@ -13,6 +13,7 @@ TestHelper = Ember.Object.createWithMixins(FactoryGuyTestMixin,{
|
|
13
13
|
container.register("model:small_hat", SmallHat);
|
14
14
|
container.register("model:big_hat", BigHat);
|
15
15
|
container.register("model:user", User);
|
16
|
+
container.register("model:profile", Profile);
|
16
17
|
container.register("model:company", Company);
|
17
18
|
container.register("model:project", Project);
|
18
19
|
container.register("store:main", DS.Store.extend({adapter: adapter}));
|
data/tests/test_setup.js
CHANGED
@@ -12,9 +12,17 @@ FactoryGuy.define('hat', {
|
|
12
12
|
type: 'BigHat'
|
13
13
|
}
|
14
14
|
})
|
15
|
+
FactoryGuy.define('profile', {
|
16
|
+
default: {
|
17
|
+
description: 'Text goes here'
|
18
|
+
}
|
19
|
+
})
|
15
20
|
FactoryGuy.define('project', {
|
21
|
+
sequences: {
|
22
|
+
title: function(num) {return 'Project' + num}
|
23
|
+
},
|
16
24
|
default: {
|
17
|
-
title: '
|
25
|
+
title: FactoryGuy.generate('title')
|
18
26
|
},
|
19
27
|
project_with_user: {
|
20
28
|
// user model with default attributes
|
@@ -40,32 +48,40 @@ FactoryGuy.define('user', {
|
|
40
48
|
}
|
41
49
|
});
|
42
50
|
Company = DS.Model.extend({
|
43
|
-
name:
|
44
|
-
|
45
|
-
})
|
51
|
+
name: DS.attr('string'),
|
52
|
+
profile: DS.belongsTo('profile'),
|
53
|
+
users: DS.hasMany('user', {async: true})
|
54
|
+
});
|
46
55
|
|
47
56
|
Hat = DS.Model.extend({
|
48
57
|
type: DS.attr('string'),
|
49
58
|
user: DS.belongsTo('user'),
|
50
|
-
hat:
|
59
|
+
hat: DS.belongsTo('hat', {inverse: 'hats', polymorphic: true}),
|
51
60
|
hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
|
52
|
-
})
|
61
|
+
});
|
62
|
+
|
63
|
+
BigHat = Hat.extend();
|
64
|
+
SmallHat = Hat.extend();
|
53
65
|
|
54
|
-
BigHat = Hat.extend()
|
55
|
-
SmallHat = Hat.extend()
|
56
66
|
|
67
|
+
Profile = DS.Model.extend({
|
68
|
+
description: DS.attr('string'),
|
69
|
+
company: DS.belongsTo('company')
|
70
|
+
});
|
57
71
|
|
58
72
|
Project = DS.Model.extend({
|
59
|
-
title:
|
60
|
-
user:
|
61
|
-
})
|
73
|
+
title: DS.attr('string'),
|
74
|
+
user: DS.belongsTo('user'),
|
75
|
+
parent: DS.belongsTo('project', {inverse: 'children'}),
|
76
|
+
children: DS.hasMany('project', {inverse: 'parent'})
|
77
|
+
});
|
62
78
|
|
63
79
|
User = DS.Model.extend({
|
64
80
|
name: DS.attr('string'),
|
65
|
-
company:
|
81
|
+
company: DS.belongsTo('company', {async: true}),
|
66
82
|
projects: DS.hasMany('project'),
|
67
|
-
hats:
|
68
|
-
})
|
83
|
+
hats: DS.hasMany('hat', {polymorphic: true})
|
84
|
+
});
|
69
85
|
/**
|
70
86
|
* Sinon.JS 1.6.0, 2013/02/18
|
71
87
|
*
|
@@ -527,42 +527,55 @@ DS.Store.reopen({
|
|
527
527
|
var self = this;
|
528
528
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
529
529
|
if (relationship.kind == 'hasMany') {
|
530
|
+
var belongsToName = modelName;
|
531
|
+
if (relationship.options && relationship.options.inverse) {
|
532
|
+
belongsToName = relationship.options.inverse;
|
533
|
+
}
|
530
534
|
var children = model.get(name) || [];
|
531
535
|
children.forEach(function (child) {
|
532
|
-
child.set(
|
536
|
+
child.set(belongsToName, model);
|
533
537
|
})
|
534
538
|
}
|
535
539
|
|
536
540
|
if (relationship.kind == 'belongsTo') {
|
537
541
|
var belongsToRecord = model.get(name);
|
538
|
-
var setAssociation = function() {
|
539
|
-
var hasManyName = self.findHasManyRelationshipName(
|
540
|
-
belongsToRecord.constructor,
|
541
|
-
model
|
542
|
-
)
|
543
|
-
if (hasManyName) {
|
544
|
-
belongsToRecord.get(hasManyName).addObject(model);
|
545
|
-
}
|
546
|
-
}
|
547
542
|
if (belongsToRecord) {
|
543
|
+
var setAssociations = function() {
|
544
|
+
var hasManyName = self.findRelationshipName(
|
545
|
+
'hasMany',
|
546
|
+
belongsToRecord.constructor,
|
547
|
+
model
|
548
|
+
)
|
549
|
+
if (hasManyName) {
|
550
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
551
|
+
}
|
552
|
+
var oneToOneName = self.findRelationshipName(
|
553
|
+
'belongsTo',
|
554
|
+
belongsToRecord.constructor,
|
555
|
+
model
|
556
|
+
)
|
557
|
+
if (oneToOneName) {
|
558
|
+
belongsToRecord.set(oneToOneName, model);
|
559
|
+
}
|
560
|
+
}
|
548
561
|
if (belongsToRecord.then) {
|
549
562
|
belongsToRecord.then(function(record) {
|
550
563
|
belongsToRecord = record;
|
551
|
-
|
564
|
+
setAssociations();
|
552
565
|
})
|
553
566
|
} else {
|
554
|
-
|
567
|
+
setAssociations();
|
555
568
|
}
|
556
569
|
}
|
557
570
|
}
|
558
571
|
})
|
559
572
|
},
|
560
573
|
|
561
|
-
|
574
|
+
findRelationshipName: function (kind, belongToModelType, childModel) {
|
562
575
|
var relationshipName;
|
563
576
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
564
577
|
function (name, relationship) {
|
565
|
-
if (relationship.kind ==
|
578
|
+
if (relationship.kind == kind &&
|
566
579
|
childModel instanceof relationship.type) {
|
567
580
|
relationshipName = relationship.key;
|
568
581
|
}
|
@@ -652,7 +665,8 @@ DS.FixtureAdapter.reopen({
|
|
652
665
|
relationShips.belongsTo.forEach(function (relationship) {
|
653
666
|
var belongsToRecord = record.get(relationship);
|
654
667
|
if (belongsToRecord) {
|
655
|
-
var hasManyName = store.
|
668
|
+
var hasManyName = store.findRelationshipName(
|
669
|
+
'hasMany',
|
656
670
|
belongsToRecord.constructor,
|
657
671
|
record
|
658
672
|
);
|
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.3.
|
4
|
+
version: 0.3.7
|
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-
|
12
|
+
date: 2014-06-02 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Easily create Fixtures for Ember Data
|
15
15
|
email:
|
@@ -44,11 +44,13 @@ files:
|
|
44
44
|
- tests/store_test.js
|
45
45
|
- tests/support/factories/company_factory.js
|
46
46
|
- tests/support/factories/hat_factory.js
|
47
|
+
- tests/support/factories/profile_factory.js
|
47
48
|
- tests/support/factories/project_factory.js
|
48
49
|
- tests/support/factories/user_factory.js
|
49
50
|
- tests/support/libs/sinon.js
|
50
51
|
- tests/support/models/company.js
|
51
52
|
- tests/support/models/hat.js
|
53
|
+
- tests/support/models/profile.js
|
52
54
|
- tests/support/models/project.js
|
53
55
|
- tests/support/models/user.js
|
54
56
|
- tests/support/test_helper.js
|