ember-data-factory-guy 0.3.0 → 0.3.1

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.
@@ -53,7 +53,7 @@ module.exports = function(grunt) {
53
53
 
54
54
  bump: {
55
55
  options: {
56
- files: ['package.json', 'bower.json', 'ember-data-factory-guy.gemspec'],
56
+ files: ['package.json', 'bower.json'],
57
57
  commitFiles: ["-a"],
58
58
  push: false
59
59
  }
data/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -461,7 +461,7 @@ DS.Store.reopen({
461
461
  FactoryGuy.pushFixture(relationship.type, belongsToRecord);
462
462
  fixture[relationship.key] = belongsToRecord.id;
463
463
  }
464
- var hasManyName = self.findHasManyRelationshipName(relationship.type, relationship.parentType);
464
+ var hasManyName = self.findHasManyRelationshipNameForFixtureAdapter(relationship.type, relationship.parentType);
465
465
  var belongsToFixtures = adapter.fixturesForType(relationship.type);
466
466
  var belongsTofixture = adapter.findFixtureById(belongsToFixtures, fixture[relationship.key]);
467
467
  if (!belongsTofixture[hasManyName]) {
@@ -538,7 +538,7 @@ DS.Store.reopen({
538
538
  if (belongsToRecord) {
539
539
  var hasManyName = self.findHasManyRelationshipName(
540
540
  belongsToRecord.constructor,
541
- model.constructor
541
+ model
542
542
  )
543
543
  belongsToRecord.get(hasManyName).addObject(model);
544
544
  }
@@ -546,12 +546,25 @@ DS.Store.reopen({
546
546
  })
547
547
  },
548
548
 
549
- findHasManyRelationshipName: function (belongToModelType, childModelType) {
549
+ findHasManyRelationshipName: function (belongToModelType, childModel) {
550
550
  var relationshipName;
551
551
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
552
552
  function (name, relationship) {
553
553
  if (relationship.kind == 'hasMany' &&
554
- relationship.type == childModelType) {
554
+ childModel instanceof relationship.type) {
555
+ relationshipName = relationship.key;
556
+ }
557
+ }
558
+ )
559
+ return relationshipName;
560
+ },
561
+
562
+ findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
563
+ var relationshipName;
564
+ Ember.get(belongToModelType, 'relationshipsByName').forEach(
565
+ function (name, relationship) {
566
+ if (relationship.kind == 'hasMany' &&
567
+ childModelType == relationship.type) {
555
568
  relationshipName = relationship.key;
556
569
  }
557
570
  }
@@ -629,7 +642,7 @@ DS.FixtureAdapter.reopen({
629
642
  if (belongsToRecord) {
630
643
  var hasManyName = store.findHasManyRelationshipName(
631
644
  belongsToRecord.constructor,
632
- record.constructor
645
+ record
633
646
  );
634
647
  belongsToRecord.get(hasManyName).addObject(record);
635
648
  }
@@ -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.findHasManyRelationshipName(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.constructor);belongsToRecord.get(hasManyName).addObject(model)}}})},findHasManyRelationshipName:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"&&relationship.type==childModelType){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.constructor);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(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,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.0"
4
+ s.version = "0.3.1"
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"]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -103,7 +103,7 @@ DS.Store.reopen({
103
103
  FactoryGuy.pushFixture(relationship.type, belongsToRecord);
104
104
  fixture[relationship.key] = belongsToRecord.id;
105
105
  }
106
- var hasManyName = self.findHasManyRelationshipName(relationship.type, relationship.parentType);
106
+ var hasManyName = self.findHasManyRelationshipNameForFixtureAdapter(relationship.type, relationship.parentType);
107
107
  var belongsToFixtures = adapter.fixturesForType(relationship.type);
108
108
  var belongsTofixture = adapter.findFixtureById(belongsToFixtures, fixture[relationship.key]);
109
109
  if (!belongsTofixture[hasManyName]) {
@@ -180,7 +180,7 @@ DS.Store.reopen({
180
180
  if (belongsToRecord) {
181
181
  var hasManyName = self.findHasManyRelationshipName(
182
182
  belongsToRecord.constructor,
183
- model.constructor
183
+ model
184
184
  )
185
185
  belongsToRecord.get(hasManyName).addObject(model);
186
186
  }
@@ -188,12 +188,25 @@ DS.Store.reopen({
188
188
  })
189
189
  },
190
190
 
191
- findHasManyRelationshipName: function (belongToModelType, childModelType) {
191
+ findHasManyRelationshipName: function (belongToModelType, childModel) {
192
192
  var relationshipName;
193
193
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
194
194
  function (name, relationship) {
195
195
  if (relationship.kind == 'hasMany' &&
196
- relationship.type == childModelType) {
196
+ childModel instanceof relationship.type) {
197
+ relationshipName = relationship.key;
198
+ }
199
+ }
200
+ )
201
+ return relationshipName;
202
+ },
203
+
204
+ findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
205
+ var relationshipName;
206
+ Ember.get(belongToModelType, 'relationshipsByName').forEach(
207
+ function (name, relationship) {
208
+ if (relationship.kind == 'hasMany' &&
209
+ childModelType == relationship.type) {
197
210
  relationshipName = relationship.key;
198
211
  }
199
212
  }
@@ -271,7 +284,7 @@ DS.FixtureAdapter.reopen({
271
284
  if (belongsToRecord) {
272
285
  var hasManyName = store.findHasManyRelationshipName(
273
286
  belongsToRecord.constructor,
274
- record.constructor
287
+ record
275
288
  );
276
289
  belongsToRecord.get(hasManyName).addObject(record);
277
290
  }
@@ -67,13 +67,24 @@ test("supports hasMany associations", function() {
67
67
  });
68
68
 
69
69
 
70
- test("supports hasMany polymorphic associations", function() {
70
+ test("when polymorphic hasMany associations are assigned, belongTo parent is assigned", function() {
71
71
  var sh = store.makeFixture('big_hat');
72
72
  var bh = store.makeFixture('small_hat');
73
73
  var user = store.makeFixture('user', {hats: [sh, bh]})
74
74
  equal(user.get('hats.length'), 2);
75
75
  ok(user.get('hats.firstObject') instanceof BigHat)
76
76
  ok(user.get('hats.lastObject') instanceof SmallHat)
77
+ // sets the belongTo user association
78
+ ok(sh.get('user') == user)
79
+ ok(bh.get('user') == user)
80
+ });
81
+
82
+
83
+ test("when belongTo parent is assigned, parent adds to polymorphic hasMany records", function() {
84
+ var user = store.makeFixture('user');
85
+ store.makeFixture('big_hat', {user: user});
86
+ equal(user.get('hats.length'), 1);
87
+ ok(user.get('hats.firstObject') instanceof BigHat)
77
88
  });
78
89
 
79
90
 
@@ -461,7 +461,7 @@ DS.Store.reopen({
461
461
  FactoryGuy.pushFixture(relationship.type, belongsToRecord);
462
462
  fixture[relationship.key] = belongsToRecord.id;
463
463
  }
464
- var hasManyName = self.findHasManyRelationshipName(relationship.type, relationship.parentType);
464
+ var hasManyName = self.findHasManyRelationshipNameForFixtureAdapter(relationship.type, relationship.parentType);
465
465
  var belongsToFixtures = adapter.fixturesForType(relationship.type);
466
466
  var belongsTofixture = adapter.findFixtureById(belongsToFixtures, fixture[relationship.key]);
467
467
  if (!belongsTofixture[hasManyName]) {
@@ -538,7 +538,7 @@ DS.Store.reopen({
538
538
  if (belongsToRecord) {
539
539
  var hasManyName = self.findHasManyRelationshipName(
540
540
  belongsToRecord.constructor,
541
- model.constructor
541
+ model
542
542
  )
543
543
  belongsToRecord.get(hasManyName).addObject(model);
544
544
  }
@@ -546,12 +546,25 @@ DS.Store.reopen({
546
546
  })
547
547
  },
548
548
 
549
- findHasManyRelationshipName: function (belongToModelType, childModelType) {
549
+ findHasManyRelationshipName: function (belongToModelType, childModel) {
550
550
  var relationshipName;
551
551
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
552
552
  function (name, relationship) {
553
553
  if (relationship.kind == 'hasMany' &&
554
- relationship.type == childModelType) {
554
+ childModel instanceof relationship.type) {
555
+ relationshipName = relationship.key;
556
+ }
557
+ }
558
+ )
559
+ return relationshipName;
560
+ },
561
+
562
+ findHasManyRelationshipNameForFixtureAdapter: function (belongToModelType, childModelType) {
563
+ var relationshipName;
564
+ Ember.get(belongToModelType, 'relationshipsByName').forEach(
565
+ function (name, relationship) {
566
+ if (relationship.kind == 'hasMany' &&
567
+ childModelType == relationship.type) {
555
568
  relationshipName = relationship.key;
556
569
  }
557
570
  }
@@ -629,7 +642,7 @@ DS.FixtureAdapter.reopen({
629
642
  if (belongsToRecord) {
630
643
  var hasManyName = store.findHasManyRelationshipName(
631
644
  belongsToRecord.constructor,
632
- record.constructor
645
+ record
633
646
  );
634
647
  belongsToRecord.get(hasManyName).addObject(record);
635
648
  }
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.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: