ember-data-factory-guy 0.3.1 → 0.3.2
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.
- data/README.md +12 -0
- data/bower.json +1 -1
- data/dist/ember-data-factory-guy.js +4 -2
- 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 +4 -2
- data/tests/active_model_adapter_factory_test.js +24 -6
- data/tests/rest_adapter_factory_test.js +23 -7
- data/tests/support/models/hat.js +3 -1
- data/tests/test_setup.js +3 -1
- data/vendor/assets/javascripts/ember_data_factory_guy.js +4 -2
- metadata +2 -2
data/README.md
CHANGED
|
@@ -210,9 +210,11 @@ var user = store.makeFixture('admin', {name: 'Fred'}); // user.toJSON() = {id: 6
|
|
|
210
210
|
###### associations
|
|
211
211
|
|
|
212
212
|
``` javascript
|
|
213
|
+
// setting models on the hasMany association
|
|
213
214
|
var project = store.makeFixture('project');
|
|
214
215
|
var user = store.makeFixture('user', {projects: [project]});
|
|
215
216
|
// OR
|
|
217
|
+
// setting a model on the belongsTo association
|
|
216
218
|
var user = store.makeFixture('user');
|
|
217
219
|
var project = store.makeFixture('project', {user: user});
|
|
218
220
|
|
|
@@ -225,12 +227,22 @@ var project = store.makeFixture('project', {user: user});
|
|
|
225
227
|
###### polymorphic hasMany associations
|
|
226
228
|
|
|
227
229
|
```javascript
|
|
230
|
+
// setting polymorphic models on the (polymorphic) hasMany association
|
|
228
231
|
var sh = store.makeFixture('big_hat');
|
|
229
232
|
var bh = store.makeFixture('small_hat');
|
|
230
233
|
var user = store.makeFixture('user', {hats: [sh, bh]})
|
|
231
234
|
// user.get('hats.length') == 2;
|
|
232
235
|
// (user.get('hats.firstObject') instanceof BigHat) == true
|
|
233
236
|
// (user.get('hats.lastObject') instanceof SmallHat) == true
|
|
237
|
+
|
|
238
|
+
// OR
|
|
239
|
+
|
|
240
|
+
// setting belongTo association on polymorphic model
|
|
241
|
+
var user = store.makeFixture('user');
|
|
242
|
+
store.makeFixture('big_hat', {user: user});
|
|
243
|
+
// user.get('hats.length') == 1;
|
|
244
|
+
// (user.get('hats.firstObject') instanceof BigHat) == true
|
|
245
|
+
|
|
234
246
|
```
|
|
235
247
|
|
|
236
248
|
###### create lists
|
data/bower.json
CHANGED
|
@@ -491,7 +491,7 @@ DS.Store.reopen({
|
|
|
491
491
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
|
492
492
|
if (relationship.kind == 'belongsTo') {
|
|
493
493
|
var belongsToRecord = fixture[relationship.key];
|
|
494
|
-
if (
|
|
494
|
+
if (Ember.typeOf(belongsToRecord) == 'object') {
|
|
495
495
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
|
496
496
|
fixture[relationship.key] = belongsToRecord;
|
|
497
497
|
}
|
|
@@ -540,7 +540,9 @@ DS.Store.reopen({
|
|
|
540
540
|
belongsToRecord.constructor,
|
|
541
541
|
model
|
|
542
542
|
)
|
|
543
|
-
|
|
543
|
+
if (hasManyName) {
|
|
544
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
|
545
|
+
}
|
|
544
546
|
}
|
|
545
547
|
}
|
|
546
548
|
})
|
|
@@ -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}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(
|
|
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}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(modelName,model)})}if(relationship.kind=="belongsTo"){var belongsToRecord=model.get(name);if(belongsToRecord){var hasManyName=self.findHasManyRelationshipName(belongsToRecord.constructor,model);if(hasManyName){belongsToRecord.get(hasManyName).addObject(model)}}}})},findHasManyRelationshipName:function(belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"&&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.findHasManyRelationshipName(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.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
|
@@ -133,7 +133,7 @@ DS.Store.reopen({
|
|
|
133
133
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
|
134
134
|
if (relationship.kind == 'belongsTo') {
|
|
135
135
|
var belongsToRecord = fixture[relationship.key];
|
|
136
|
-
if (
|
|
136
|
+
if (Ember.typeOf(belongsToRecord) == 'object') {
|
|
137
137
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
|
138
138
|
fixture[relationship.key] = belongsToRecord;
|
|
139
139
|
}
|
|
@@ -182,7 +182,9 @@ DS.Store.reopen({
|
|
|
182
182
|
belongsToRecord.constructor,
|
|
183
183
|
model
|
|
184
184
|
)
|
|
185
|
-
|
|
185
|
+
if (hasManyName) {
|
|
186
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
|
187
|
+
}
|
|
186
188
|
}
|
|
187
189
|
}
|
|
188
190
|
})
|
|
@@ -59,6 +59,7 @@ asyncTest("creates record in the store", function() {
|
|
|
59
59
|
});
|
|
60
60
|
});
|
|
61
61
|
|
|
62
|
+
|
|
62
63
|
test("supports hasMany associations", function() {
|
|
63
64
|
var p1 = store.makeFixture('project');
|
|
64
65
|
var p2 = store.makeFixture('project');
|
|
@@ -67,10 +68,26 @@ test("supports hasMany associations", function() {
|
|
|
67
68
|
equal(user.get('projects.length'), 2);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
var bh = store.makeFixture('
|
|
73
|
-
var
|
|
71
|
+
|
|
72
|
+
test("when polymorphic hasMany associations are assigned, belongTo parent is assigned", function() {
|
|
73
|
+
var bh = store.makeFixture('big_hat');
|
|
74
|
+
var sh = store.makeFixture('small_hat');
|
|
75
|
+
var user = store.makeFixture('user', {hats: [bh, sh]})
|
|
76
|
+
|
|
77
|
+
equal(user.get('hats.length'), 2);
|
|
78
|
+
ok(user.get('hats.firstObject') instanceof BigHat)
|
|
79
|
+
ok(user.get('hats.lastObject') instanceof SmallHat)
|
|
80
|
+
// sets the belongTo user association
|
|
81
|
+
ok(bh.get('user') == user)
|
|
82
|
+
ok(sh.get('user') == user)
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
test("when belongTo parent is assigned, parent adds to polymorphic hasMany records", function() {
|
|
87
|
+
var user = store.makeFixture('user');
|
|
88
|
+
store.makeFixture('big_hat', {user: user});
|
|
89
|
+
store.makeFixture('small_hat', {user: user});
|
|
90
|
+
|
|
74
91
|
equal(user.get('hats.length'), 2);
|
|
75
92
|
ok(user.get('hats.firstObject') instanceof BigHat)
|
|
76
93
|
ok(user.get('hats.lastObject') instanceof SmallHat)
|
|
@@ -87,9 +104,10 @@ test("when hasMany associations assigned, belongTo parent is assigned", function
|
|
|
87
104
|
|
|
88
105
|
test("when belongTo parent is assigned, parent adds to hasMany records", function() {
|
|
89
106
|
var user = store.makeFixture('user');
|
|
90
|
-
|
|
107
|
+
store.makeFixture('project', {user: user});
|
|
108
|
+
store.makeFixture('project', {user: user});
|
|
91
109
|
|
|
92
|
-
equal(user.get('projects.length'),
|
|
110
|
+
equal(user.get('projects.length'), 2);
|
|
93
111
|
});
|
|
94
112
|
|
|
95
113
|
|
|
@@ -68,23 +68,38 @@ test("supports hasMany associations", function() {
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
test("when polymorphic hasMany associations are assigned, belongTo parent is assigned", function() {
|
|
71
|
-
var
|
|
72
|
-
var
|
|
73
|
-
var user = store.makeFixture('user', {hats: [
|
|
71
|
+
var bh = store.makeFixture('big_hat');
|
|
72
|
+
var sh = store.makeFixture('small_hat');
|
|
73
|
+
var user = store.makeFixture('user', {hats: [bh, sh]})
|
|
74
|
+
|
|
74
75
|
equal(user.get('hats.length'), 2);
|
|
75
76
|
ok(user.get('hats.firstObject') instanceof BigHat)
|
|
76
77
|
ok(user.get('hats.lastObject') instanceof SmallHat)
|
|
77
78
|
// sets the belongTo user association
|
|
78
|
-
ok(sh.get('user') == user)
|
|
79
79
|
ok(bh.get('user') == user)
|
|
80
|
+
ok(sh.get('user') == user)
|
|
80
81
|
});
|
|
81
82
|
|
|
82
83
|
|
|
83
84
|
test("when belongTo parent is assigned, parent adds to polymorphic hasMany records", function() {
|
|
84
85
|
var user = store.makeFixture('user');
|
|
85
86
|
store.makeFixture('big_hat', {user: user});
|
|
86
|
-
|
|
87
|
+
store.makeFixture('small_hat', {user: user});
|
|
88
|
+
|
|
89
|
+
equal(user.get('hats.length'), 2);
|
|
87
90
|
ok(user.get('hats.firstObject') instanceof BigHat)
|
|
91
|
+
ok(user.get('hats.lastObject') instanceof SmallHat)
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
test("when belongTo parent is assigned, parent adds to polymorphic hasMany records", function() {
|
|
96
|
+
var user = store.makeFixture('user');
|
|
97
|
+
store.makeFixture('big_hat', {user: user});
|
|
98
|
+
store.makeFixture('small_hat', {user: user});
|
|
99
|
+
|
|
100
|
+
equal(user.get('hats.length'), 2);
|
|
101
|
+
ok(user.get('hats.firstObject') instanceof BigHat)
|
|
102
|
+
ok(user.get('hats.lastObject') instanceof SmallHat)
|
|
88
103
|
});
|
|
89
104
|
|
|
90
105
|
|
|
@@ -98,9 +113,10 @@ test("when hasMany associations assigned, belongTo parent is assigned", function
|
|
|
98
113
|
|
|
99
114
|
test("when belongTo parent is assigned, parent adds to hasMany records", function() {
|
|
100
115
|
var user = store.makeFixture('user');
|
|
101
|
-
|
|
116
|
+
store.makeFixture('project', {user: user});
|
|
117
|
+
store.makeFixture('project', {user: user});
|
|
102
118
|
|
|
103
|
-
equal(user.get('projects.length'),
|
|
119
|
+
equal(user.get('projects.length'), 2);
|
|
104
120
|
});
|
|
105
121
|
|
|
106
122
|
|
data/tests/support/models/hat.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
Hat = DS.Model.extend({
|
|
2
2
|
type: DS.attr('string'),
|
|
3
|
-
user: DS.belongsTo('user')
|
|
3
|
+
user: DS.belongsTo('user'),
|
|
4
|
+
hat: DS.belongsTo('hat', {inverse: 'hats',polymorphic: true}),
|
|
5
|
+
hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
|
|
4
6
|
})
|
|
5
7
|
|
|
6
8
|
BigHat = Hat.extend()
|
data/tests/test_setup.js
CHANGED
|
@@ -36,7 +36,9 @@ FactoryGuy.define('user', {
|
|
|
36
36
|
});
|
|
37
37
|
Hat = DS.Model.extend({
|
|
38
38
|
type: DS.attr('string'),
|
|
39
|
-
user: DS.belongsTo('user')
|
|
39
|
+
user: DS.belongsTo('user'),
|
|
40
|
+
hat: DS.belongsTo('hat', {inverse: 'hats',polymorphic: true}),
|
|
41
|
+
hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
|
|
40
42
|
})
|
|
41
43
|
|
|
42
44
|
BigHat = Hat.extend()
|
|
@@ -491,7 +491,7 @@ DS.Store.reopen({
|
|
|
491
491
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
|
492
492
|
if (relationship.kind == 'belongsTo') {
|
|
493
493
|
var belongsToRecord = fixture[relationship.key];
|
|
494
|
-
if (
|
|
494
|
+
if (Ember.typeOf(belongsToRecord) == 'object') {
|
|
495
495
|
belongsToRecord = store.push(relationship.type, belongsToRecord);
|
|
496
496
|
fixture[relationship.key] = belongsToRecord;
|
|
497
497
|
}
|
|
@@ -540,7 +540,9 @@ DS.Store.reopen({
|
|
|
540
540
|
belongsToRecord.constructor,
|
|
541
541
|
model
|
|
542
542
|
)
|
|
543
|
-
|
|
543
|
+
if (hasManyName) {
|
|
544
|
+
belongsToRecord.get(hasManyName).addObject(model);
|
|
545
|
+
}
|
|
544
546
|
}
|
|
545
547
|
}
|
|
546
548
|
})
|
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.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2014-05-
|
|
13
|
+
date: 2014-05-24 00:00:00.000000000 +03:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies: []
|
|
16
16
|
description: Easily create Fixtures for Ember Data
|