ember-data-factory-guy 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -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 (typeof belongsToRecord == 'object') {
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
- belongsToRecord.get(hasManyName).addObject(model);
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(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);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
+ 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.1"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
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 (typeof belongsToRecord == 'object') {
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
- belongsToRecord.get(hasManyName).addObject(model);
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
- test("supports hasMany polymorphic associations", function() {
71
- var sh = store.makeFixture('big_hat');
72
- var bh = store.makeFixture('small_hat');
73
- var user = store.makeFixture('user', {hats: [sh, bh]})
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
- var project = store.makeFixture('project', {user: user});
107
+ store.makeFixture('project', {user: user});
108
+ store.makeFixture('project', {user: user});
91
109
 
92
- equal(user.get('projects.length'), 1);
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 sh = store.makeFixture('big_hat');
72
- var bh = store.makeFixture('small_hat');
73
- var user = store.makeFixture('user', {hats: [sh, bh]})
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
- equal(user.get('hats.length'), 1);
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
- var project = store.makeFixture('project', {user: user});
116
+ store.makeFixture('project', {user: user});
117
+ store.makeFixture('project', {user: user});
102
118
 
103
- equal(user.get('projects.length'), 1);
119
+ equal(user.get('projects.length'), 2);
104
120
  });
105
121
 
106
122
 
@@ -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 (typeof belongsToRecord == 'object') {
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
- belongsToRecord.get(hasManyName).addObject(model);
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.1
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-23 00:00:00.000000000 +03:00
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