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 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