ember-data-factory-guy 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|