ember-data-factory-guy 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48d0f7da6694aabe215b16806d8924e7309faa32
4
- data.tar.gz: ebbbd5dd37fd458feb67ab3d15428d729aa201ed
3
+ metadata.gz: ee062dcdf9d9bc4fb670a1fc9bdf0828fd5b3e02
4
+ data.tar.gz: 708c6fc94c00e38a1713e96430eaab7b5d78eaa7
5
5
  SHA512:
6
- metadata.gz: f63cbaedb8e9e6b09f3d4b58ed393be3d3e865a05470cfe4bbf6f5c47780479526178f4d7b32e670886fa482af2e137c880c171d1a066ec1e29e5bd8d23bd758
7
- data.tar.gz: 09185a49e347fcd4c4e96d19d5f5e0958a2dc55483977157fb7ddc0714f3b4db420a063009e50ba66f9824e901fb43fbc3b7b3cf07087bd83300d3f7ef75cde6
6
+ metadata.gz: 7e5132bf51410a64650cca36188fa02c92658a12e14b0e6192e29b957274f4cb01a2363058f1b589984fd2bbc8ce6834ea6efb67112d1374d12ff7de05983a0f
7
+ data.tar.gz: a4a26146f2374e475915b6c1a4bbdae9e9caaf35dff62f6ea3591704ff3af5dbd1f752efd8ba37b3f71b41e442962d296a442af9df5e04e07f8e6eba684fbcdc
data/bower.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
@@ -527,42 +527,55 @@ DS.Store.reopen({
527
527
  var self = this;
528
528
  Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
529
529
  if (relationship.kind == 'hasMany') {
530
+ var belongsToName = modelName;
531
+ if (relationship.options && relationship.options.inverse) {
532
+ belongsToName = relationship.options.inverse;
533
+ }
530
534
  var children = model.get(name) || [];
531
535
  children.forEach(function (child) {
532
- child.set(modelName, model)
536
+ child.set(belongsToName, model);
533
537
  })
534
538
  }
535
539
 
536
540
  if (relationship.kind == 'belongsTo') {
537
541
  var belongsToRecord = model.get(name);
538
- var setAssociation = function() {
539
- var hasManyName = self.findHasManyRelationshipName(
540
- belongsToRecord.constructor,
541
- model
542
- )
543
- if (hasManyName) {
544
- belongsToRecord.get(hasManyName).addObject(model);
545
- }
546
- }
547
542
  if (belongsToRecord) {
543
+ var setAssociations = function() {
544
+ var hasManyName = self.findRelationshipName(
545
+ 'hasMany',
546
+ belongsToRecord.constructor,
547
+ model
548
+ )
549
+ if (hasManyName) {
550
+ belongsToRecord.get(hasManyName).addObject(model);
551
+ }
552
+ var oneToOneName = self.findRelationshipName(
553
+ 'belongsTo',
554
+ belongsToRecord.constructor,
555
+ model
556
+ )
557
+ if (oneToOneName) {
558
+ belongsToRecord.set(oneToOneName, model);
559
+ }
560
+ }
548
561
  if (belongsToRecord.then) {
549
562
  belongsToRecord.then(function(record) {
550
563
  belongsToRecord = record;
551
- setAssociation();
564
+ setAssociations();
552
565
  })
553
566
  } else {
554
- setAssociation();
567
+ setAssociations();
555
568
  }
556
569
  }
557
570
  }
558
571
  })
559
572
  },
560
573
 
561
- findHasManyRelationshipName: function (belongToModelType, childModel) {
574
+ findRelationshipName: function (kind, belongToModelType, childModel) {
562
575
  var relationshipName;
563
576
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
564
577
  function (name, relationship) {
565
- if (relationship.kind == 'hasMany' &&
578
+ if (relationship.kind == kind &&
566
579
  childModel instanceof relationship.type) {
567
580
  relationshipName = relationship.key;
568
581
  }
@@ -652,7 +665,8 @@ DS.FixtureAdapter.reopen({
652
665
  relationShips.belongsTo.forEach(function (relationship) {
653
666
  var belongsToRecord = record.get(relationship);
654
667
  if (belongsToRecord) {
655
- var hasManyName = store.findHasManyRelationshipName(
668
+ var hasManyName = store.findRelationshipName(
669
+ 'hasMany',
656
670
  belongsToRecord.constructor,
657
671
  record
658
672
  );
@@ -1 +1 @@
1
- Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};function MissingSequenceError(message){this.toString=function(){return message}}ModelDefinition=function(model,config){var sequences={};var defaultAttributes={};var namedModels={};var modelId=1;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.merge=function(config){};this.generate=function(sequenceName){var sequence=sequences[sequenceName];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts){var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,opts);for(attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}if(!fixture.id){fixture.id=modelId++}return fixture};this.buildList=function(name,number,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts))}return arr};this.reset=function(){modelId=1;for(name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(typeof sequenceFn!="function"){throw new Error("Problem with ["+sequenceName+"] sequence definition. Sequences must be functions")}object[sequenceName]=new Sequence(sequenceFn)}sequences=object};var parseConfig=function(config){parseSequences(config.sequences);delete config.sequences;parseDefault(config.default);delete config.default;namedModels=config};parseConfig(config)};FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},generate:function(sequenceName){return function(){return this.generate(sequenceName)}},association:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,opts)}},lookupModelForFixtureName:function(name){var definition=this.lookupDefinitionForFixtureName(name);if(definition){return definition.model}},lookupDefinitionForFixtureName:function(name){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];if(definition.matchesName(name)){return definition}}},build:function(name,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts)},buildList:function(name,number,opts){var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,opts)},resetModels:function(store){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}store.unloadAll(modelType)}catch(e){}}},pushFixture:function(modelClass,fixture){if(!modelClass["FIXTURES"]){modelClass["FIXTURES"]=[]}modelClass["FIXTURES"].push(fixture);return fixture},clear:function(opts){if(!opts){this.modelDefinitions={}}}};DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(name,options){var modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=this.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{var store=this;var model;Em.run(function(){store.findEmbeddedBelongsToAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore()}model=store.push(modelName,fixture);store.setAssociationsForRESTAdapter(modelType,modelName,model)});return model}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){if(fixture[relationship.key]){fixture[relationship.key].forEach(function(id){var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id)}}})},findEmbeddedBelongsToAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){child.set(modelName,model)})}if(relationship.kind=="belongsTo"){var belongsToRecord=model.get(name);var setAssociation=function(){var hasManyName=self.findHasManyRelationshipName(belongsToRecord.constructor,model);if(hasManyName){belongsToRecord.get(hasManyName).addObject(model)}};if(belongsToRecord){if(belongsToRecord.then){belongsToRecord.then(function(record){belongsToRecord=record;setAssociation()})}else{setAssociation()}}}})},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.underscore()}model=store.push(modelName,fixture);store.setAssociationsForRESTAdapter(modelType,modelName,model)});return model}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){if(fixture[relationship.key]){fixture[relationship.key].forEach(function(id){var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id)}}})},findEmbeddedBelongsToAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var belongsToName=modelName;if(relationship.options&&relationship.options.inverse){belongsToName=relationship.options.inverse}var children=model.get(name)||[];children.forEach(function(child){child.set(belongsToName,model)})}if(relationship.kind=="belongsTo"){var belongsToRecord=model.get(name);if(belongsToRecord){var setAssociations=function(){var hasManyName=self.findRelationshipName("hasMany",belongsToRecord.constructor,model);if(hasManyName){belongsToRecord.get(hasManyName).addObject(model)}var oneToOneName=self.findRelationshipName("belongsTo",belongsToRecord.constructor,model);if(oneToOneName){belongsToRecord.set(oneToOneName,model)}};if(belongsToRecord.then){belongsToRecord.then(function(record){belongsToRecord=record;setAssociations()})}else{setAssociations()}}}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind==kind&&childModel instanceof relationship.type){relationshipName=relationship.key}});return relationshipName},findHasManyRelationshipNameForFixtureAdapter:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"&&childModelType==relationship.type){relationshipName=relationship.key}});return relationshipName},pushPayload:function(type,payload){if(this.usingFixtureAdapter()){var model=this.modelFor(modelName);FactoryGuy.pushFixture(model,payload)}else{this._super(type,payload)}}});DS.FixtureAdapter.reopen({createRecord:function(store,type,record){var promise=this._super(store,type,record);promise.then(function(){var relationShips=Ember.get(type,"relationshipNames");if(relationShips.belongsTo){relationShips.belongsTo.forEach(function(relationship){var belongsToRecord=record.get(relationship);if(belongsToRecord){var hasManyName=store.findRelationshipName("hasMany",belongsToRecord.constructor,record);belongsToRecord.get(hasManyName).addObject(record)}})}});return promise}});FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},find:function(type,id){return this.getStore().find(type,id)},make:function(name,opts){return this.getStore().makeFixture(name,opts)},getStore:function(){return this.get("container").lookup("store:main")},pushPayload:function(type,hash){return this.getStore().pushPayload(type,hash)},pushRecord:function(type,hash){return this.getStore().push(type,hash)},stubEndpointForHttpRequest:function(url,json,options){options=options||{};var request={url:url,dataType:"json",responseText:json,type:options.type||"GET",status:options.status||200};if(options.data){request.data=options.data}$.mockjax(request)},handleCreate:function(name,opts){var model=FactoryGuy.lookupModelForFixtureName(name);this.stubEndpointForHttpRequest("/"+Em.String.pluralize(model),this.buildAjaxCreateResponse(name,opts),{type:"POST"})},buildAjaxCreateResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var model=FactoryGuy.lookupModelForFixtureName(name);var hash={};hash[model]=fixture;return hash},handleUpdate:function(root,id){this.stubEndpointForHttpRequest("/"+Em.String.pluralize(root)+"/"+id,{},{type:"PUT"})},handleDelete:function(root,id){this.stubEndpointForHttpRequest("/"+Em.String.pluralize(root)+"/"+id,{},{type:"DELETE"})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "ember-data-factory-guy"
4
- s.version = "0.3.6"
4
+ s.version = "0.3.7"
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ["Daniel Sudol", "Alex Opak"]
7
7
  s.email = ["dansudol@yahoo.com", "opak.alexandr@gmail.com"]
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-data-factory-guy",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "authors": [
5
5
  "Daniel Sudol <dansudol@yahoo.com>",
6
6
  "Opak Alex <opak.alexandr@gmail.com>"
data/src/store.js CHANGED
@@ -169,42 +169,55 @@ DS.Store.reopen({
169
169
  var self = this;
170
170
  Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
171
171
  if (relationship.kind == 'hasMany') {
172
+ var belongsToName = modelName;
173
+ if (relationship.options && relationship.options.inverse) {
174
+ belongsToName = relationship.options.inverse;
175
+ }
172
176
  var children = model.get(name) || [];
173
177
  children.forEach(function (child) {
174
- child.set(modelName, model)
178
+ child.set(belongsToName, model);
175
179
  })
176
180
  }
177
181
 
178
182
  if (relationship.kind == 'belongsTo') {
179
183
  var belongsToRecord = model.get(name);
180
- var setAssociation = function() {
181
- var hasManyName = self.findHasManyRelationshipName(
182
- belongsToRecord.constructor,
183
- model
184
- )
185
- if (hasManyName) {
186
- belongsToRecord.get(hasManyName).addObject(model);
187
- }
188
- }
189
184
  if (belongsToRecord) {
185
+ var setAssociations = function() {
186
+ var hasManyName = self.findRelationshipName(
187
+ 'hasMany',
188
+ belongsToRecord.constructor,
189
+ model
190
+ )
191
+ if (hasManyName) {
192
+ belongsToRecord.get(hasManyName).addObject(model);
193
+ }
194
+ var oneToOneName = self.findRelationshipName(
195
+ 'belongsTo',
196
+ belongsToRecord.constructor,
197
+ model
198
+ )
199
+ if (oneToOneName) {
200
+ belongsToRecord.set(oneToOneName, model);
201
+ }
202
+ }
190
203
  if (belongsToRecord.then) {
191
204
  belongsToRecord.then(function(record) {
192
205
  belongsToRecord = record;
193
- setAssociation();
206
+ setAssociations();
194
207
  })
195
208
  } else {
196
- setAssociation();
209
+ setAssociations();
197
210
  }
198
211
  }
199
212
  }
200
213
  })
201
214
  },
202
215
 
203
- findHasManyRelationshipName: function (belongToModelType, childModel) {
216
+ findRelationshipName: function (kind, belongToModelType, childModel) {
204
217
  var relationshipName;
205
218
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
206
219
  function (name, relationship) {
207
- if (relationship.kind == 'hasMany' &&
220
+ if (relationship.kind == kind &&
208
221
  childModel instanceof relationship.type) {
209
222
  relationshipName = relationship.key;
210
223
  }
@@ -294,7 +307,8 @@ DS.FixtureAdapter.reopen({
294
307
  relationShips.belongsTo.forEach(function (relationship) {
295
308
  var belongsToRecord = record.get(relationship);
296
309
  if (belongsToRecord) {
297
- var hasManyName = store.findHasManyRelationshipName(
310
+ var hasManyName = store.findRelationshipName(
311
+ 'hasMany',
298
312
  belongsToRecord.constructor,
299
313
  record
300
314
  );
@@ -59,6 +59,7 @@ asyncTest("creates records in the store", function() {
59
59
  });
60
60
  });
61
61
 
62
+
62
63
  test("when hasMany associations assigned, belongTo parent is assigned", function() {
63
64
  var project = store.makeFixture('project');
64
65
  var user = store.makeFixture('user', {projects: [project]})
@@ -92,6 +93,13 @@ test("when polymorphic hasMany associations are assigned, belongTo parent is ass
92
93
  });
93
94
 
94
95
 
96
+ test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
97
+ var project = store.makeFixture('project');
98
+ var project2 = store.makeFixture('project', {children: [project]});
99
+ deepEqual(project.get('parent').toJSON(), project2.toJSON());
100
+ });
101
+
102
+
95
103
  test("when belongTo parent is assigned, parent adds to hasMany records", function() {
96
104
  var user = store.makeFixture('user');
97
105
  var project1 = store.makeFixture('project', {user: user});
@@ -126,6 +134,21 @@ asyncTest("when async belongsTo parent is assigned, parent adds to hasMany recor
126
134
  });
127
135
 
128
136
 
137
+ test("when belongTo parent is assigned, parent adds to hasMany record using inverse", function() {
138
+ var project = store.makeFixture('project');
139
+ var project2 = store.makeFixture('project', {parent: project});
140
+ equal(project.get('children.length'), 1);
141
+ deepEqual(project.get('children.firstObject').toJSON(), project2.toJSON());
142
+ });
143
+
144
+
145
+ test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
146
+ var company = store.makeFixture('company');
147
+ var profile = store.makeFixture('profile', {company: company});
148
+ deepEqual(company.get('profile').toJSON(), profile.toJSON());
149
+ });
150
+
151
+
129
152
  test("belongsTo associations defined as attributes in fixture", function() {
130
153
  var project = store.makeFixture('project_with_user');
131
154
  equal(project.get('user') instanceof User, true)
@@ -82,13 +82,13 @@ test("Referring to other attributes in attribute definition", function() {
82
82
 
83
83
  test("Using associations in attribute definition", function() {
84
84
  var json = FactoryGuy.build('project_with_user');
85
- deepEqual(json, {id: 1, title: 'Project', user: {id: 1, name: 'User1'}}, 'creates default user for "user" belongsTo attribute');
85
+ deepEqual(json, {id: 1, title: 'Project1', user: {id: 1, name: 'User1'}}, 'creates default user for "user" belongsTo attribute');
86
86
 
87
87
  var json = FactoryGuy.build('project_with_dude');
88
- deepEqual(json, {id: 2, title: 'Project', user: {id: 2, name: 'Dude'}}, 'creates user with optional attributes for "user" belongsTo attribute');
88
+ deepEqual(json, {id: 2, title: 'Project2', user: {id: 2, name: 'Dude'}}, 'creates user with optional attributes for "user" belongsTo attribute');
89
89
 
90
90
  var json = FactoryGuy.build('project_with_admin');
91
- deepEqual(json, {id: 3, title: 'Project', user: {id: 3, name: 'Admin'}}, 'creates named user for "user" belongsTo attribute');
91
+ deepEqual(json, {id: 3, title: 'Project3', user: {id: 3, name: 'Admin'}}, 'creates named user for "user" belongsTo attribute');
92
92
  });
93
93
 
94
94
 
@@ -59,6 +59,7 @@ asyncTest("creates records in the store", function() {
59
59
  });
60
60
  });
61
61
 
62
+
62
63
  test("when hasMany associations assigned, belongTo parent is assigned", function() {
63
64
  var project = store.makeFixture('project');
64
65
  var user = store.makeFixture('user', {projects: [project]})
@@ -92,6 +93,13 @@ test("when polymorphic hasMany associations are assigned, belongTo parent is ass
92
93
  });
93
94
 
94
95
 
96
+ test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
97
+ var project = store.makeFixture('project');
98
+ var project2 = store.makeFixture('project', {children: [project]});
99
+ deepEqual(project.get('parent').toJSON(), project2.toJSON());
100
+ });
101
+
102
+
95
103
  test("when belongTo parent is assigned, parent adds to hasMany records", function() {
96
104
  var user = store.makeFixture('user');
97
105
  var project1 = store.makeFixture('project', {user: user});
@@ -126,6 +134,21 @@ asyncTest("when async belongsTo parent is assigned, parent adds to hasMany recor
126
134
  });
127
135
 
128
136
 
137
+ test("when belongTo parent is assigned, parent adds to hasMany record using inverse", function() {
138
+ var project = store.makeFixture('project');
139
+ var project2 = store.makeFixture('project', {parent: project});
140
+ equal(project.get('children.length'), 1);
141
+ deepEqual(project.get('children.firstObject').toJSON(), project2.toJSON());
142
+ });
143
+
144
+
145
+ test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
146
+ var company = store.makeFixture('company');
147
+ var profile = store.makeFixture('profile', {company: company});
148
+ deepEqual(company.get('profile').toJSON(), profile.toJSON());
149
+ });
150
+
151
+
129
152
  test("belongsTo associations defined as attributes in fixture", function() {
130
153
  var project = store.makeFixture('project_with_user');
131
154
  equal(project.get('user') instanceof User, true)
@@ -0,0 +1,5 @@
1
+ FactoryGuy.define('profile', {
2
+ default: {
3
+ description: 'Text goes here'
4
+ }
5
+ })
@@ -1,6 +1,9 @@
1
1
  FactoryGuy.define('project', {
2
+ sequences: {
3
+ title: function(num) {return 'Project' + num}
4
+ },
2
5
  default: {
3
- title: 'Project'
6
+ title: FactoryGuy.generate('title')
4
7
  },
5
8
  project_with_user: {
6
9
  // user model with default attributes
@@ -1,4 +1,5 @@
1
1
  Company = DS.Model.extend({
2
- name: DS.attr('string'),
3
- users: DS.hasMany('user', {async: true})
4
- })
2
+ name: DS.attr('string'),
3
+ profile: DS.belongsTo('profile'),
4
+ users: DS.hasMany('user', {async: true})
5
+ });
@@ -1,10 +1,10 @@
1
1
  Hat = DS.Model.extend({
2
2
  type: DS.attr('string'),
3
3
  user: DS.belongsTo('user'),
4
- hat: DS.belongsTo('hat', {inverse: 'hats',polymorphic: true}),
4
+ hat: DS.belongsTo('hat', {inverse: 'hats', polymorphic: true}),
5
5
  hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
6
- })
6
+ });
7
7
 
8
- BigHat = Hat.extend()
9
- SmallHat = Hat.extend()
8
+ BigHat = Hat.extend();
9
+ SmallHat = Hat.extend();
10
10
 
@@ -0,0 +1,4 @@
1
+ Profile = DS.Model.extend({
2
+ description: DS.attr('string'),
3
+ company: DS.belongsTo('company')
4
+ });
@@ -1,4 +1,6 @@
1
1
  Project = DS.Model.extend({
2
- title: DS.attr('string'),
3
- user: DS.belongsTo('user')
4
- })
2
+ title: DS.attr('string'),
3
+ user: DS.belongsTo('user'),
4
+ parent: DS.belongsTo('project', {inverse: 'children'}),
5
+ children: DS.hasMany('project', {inverse: 'parent'})
6
+ });
@@ -1,6 +1,6 @@
1
1
  User = DS.Model.extend({
2
2
  name: DS.attr('string'),
3
- company: DS.belongsTo('company', {async: true}),
3
+ company: DS.belongsTo('company', {async: true}),
4
4
  projects: DS.hasMany('project'),
5
- hats: DS.hasMany('hat', {polymorphic: true})
6
- })
5
+ hats: DS.hasMany('hat', {polymorphic: true})
6
+ });
@@ -13,6 +13,7 @@ TestHelper = Ember.Object.createWithMixins(FactoryGuyTestMixin,{
13
13
  container.register("model:small_hat", SmallHat);
14
14
  container.register("model:big_hat", BigHat);
15
15
  container.register("model:user", User);
16
+ container.register("model:profile", Profile);
16
17
  container.register("model:company", Company);
17
18
  container.register("model:project", Project);
18
19
  container.register("store:main", DS.Store.extend({adapter: adapter}));
data/tests/test_setup.js CHANGED
@@ -12,9 +12,17 @@ FactoryGuy.define('hat', {
12
12
  type: 'BigHat'
13
13
  }
14
14
  })
15
+ FactoryGuy.define('profile', {
16
+ default: {
17
+ description: 'Text goes here'
18
+ }
19
+ })
15
20
  FactoryGuy.define('project', {
21
+ sequences: {
22
+ title: function(num) {return 'Project' + num}
23
+ },
16
24
  default: {
17
- title: 'Project'
25
+ title: FactoryGuy.generate('title')
18
26
  },
19
27
  project_with_user: {
20
28
  // user model with default attributes
@@ -40,32 +48,40 @@ FactoryGuy.define('user', {
40
48
  }
41
49
  });
42
50
  Company = DS.Model.extend({
43
- name: DS.attr('string'),
44
- users: DS.hasMany('user', {async: true})
45
- })
51
+ name: DS.attr('string'),
52
+ profile: DS.belongsTo('profile'),
53
+ users: DS.hasMany('user', {async: true})
54
+ });
46
55
 
47
56
  Hat = DS.Model.extend({
48
57
  type: DS.attr('string'),
49
58
  user: DS.belongsTo('user'),
50
- hat: DS.belongsTo('hat', {inverse: 'hats',polymorphic: true}),
59
+ hat: DS.belongsTo('hat', {inverse: 'hats', polymorphic: true}),
51
60
  hats: DS.hasMany('hat', {inverse: 'hat', polymorphic: true})
52
- })
61
+ });
62
+
63
+ BigHat = Hat.extend();
64
+ SmallHat = Hat.extend();
53
65
 
54
- BigHat = Hat.extend()
55
- SmallHat = Hat.extend()
56
66
 
67
+ Profile = DS.Model.extend({
68
+ description: DS.attr('string'),
69
+ company: DS.belongsTo('company')
70
+ });
57
71
 
58
72
  Project = DS.Model.extend({
59
- title: DS.attr('string'),
60
- user: DS.belongsTo('user')
61
- })
73
+ title: DS.attr('string'),
74
+ user: DS.belongsTo('user'),
75
+ parent: DS.belongsTo('project', {inverse: 'children'}),
76
+ children: DS.hasMany('project', {inverse: 'parent'})
77
+ });
62
78
 
63
79
  User = DS.Model.extend({
64
80
  name: DS.attr('string'),
65
- company: DS.belongsTo('company', {async: true}),
81
+ company: DS.belongsTo('company', {async: true}),
66
82
  projects: DS.hasMany('project'),
67
- hats: DS.hasMany('hat', {polymorphic: true})
68
- })
83
+ hats: DS.hasMany('hat', {polymorphic: true})
84
+ });
69
85
  /**
70
86
  * Sinon.JS 1.6.0, 2013/02/18
71
87
  *
@@ -527,42 +527,55 @@ DS.Store.reopen({
527
527
  var self = this;
528
528
  Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
529
529
  if (relationship.kind == 'hasMany') {
530
+ var belongsToName = modelName;
531
+ if (relationship.options && relationship.options.inverse) {
532
+ belongsToName = relationship.options.inverse;
533
+ }
530
534
  var children = model.get(name) || [];
531
535
  children.forEach(function (child) {
532
- child.set(modelName, model)
536
+ child.set(belongsToName, model);
533
537
  })
534
538
  }
535
539
 
536
540
  if (relationship.kind == 'belongsTo') {
537
541
  var belongsToRecord = model.get(name);
538
- var setAssociation = function() {
539
- var hasManyName = self.findHasManyRelationshipName(
540
- belongsToRecord.constructor,
541
- model
542
- )
543
- if (hasManyName) {
544
- belongsToRecord.get(hasManyName).addObject(model);
545
- }
546
- }
547
542
  if (belongsToRecord) {
543
+ var setAssociations = function() {
544
+ var hasManyName = self.findRelationshipName(
545
+ 'hasMany',
546
+ belongsToRecord.constructor,
547
+ model
548
+ )
549
+ if (hasManyName) {
550
+ belongsToRecord.get(hasManyName).addObject(model);
551
+ }
552
+ var oneToOneName = self.findRelationshipName(
553
+ 'belongsTo',
554
+ belongsToRecord.constructor,
555
+ model
556
+ )
557
+ if (oneToOneName) {
558
+ belongsToRecord.set(oneToOneName, model);
559
+ }
560
+ }
548
561
  if (belongsToRecord.then) {
549
562
  belongsToRecord.then(function(record) {
550
563
  belongsToRecord = record;
551
- setAssociation();
564
+ setAssociations();
552
565
  })
553
566
  } else {
554
- setAssociation();
567
+ setAssociations();
555
568
  }
556
569
  }
557
570
  }
558
571
  })
559
572
  },
560
573
 
561
- findHasManyRelationshipName: function (belongToModelType, childModel) {
574
+ findRelationshipName: function (kind, belongToModelType, childModel) {
562
575
  var relationshipName;
563
576
  Ember.get(belongToModelType, 'relationshipsByName').forEach(
564
577
  function (name, relationship) {
565
- if (relationship.kind == 'hasMany' &&
578
+ if (relationship.kind == kind &&
566
579
  childModel instanceof relationship.type) {
567
580
  relationshipName = relationship.key;
568
581
  }
@@ -652,7 +665,8 @@ DS.FixtureAdapter.reopen({
652
665
  relationShips.belongsTo.forEach(function (relationship) {
653
666
  var belongsToRecord = record.get(relationship);
654
667
  if (belongsToRecord) {
655
- var hasManyName = store.findHasManyRelationshipName(
668
+ var hasManyName = store.findRelationshipName(
669
+ 'hasMany',
656
670
  belongsToRecord.constructor,
657
671
  record
658
672
  );
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ember-data-factory-guy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Sudol
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-30 00:00:00.000000000 Z
12
+ date: 2014-06-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Easily create Fixtures for Ember Data
15
15
  email:
@@ -44,11 +44,13 @@ files:
44
44
  - tests/store_test.js
45
45
  - tests/support/factories/company_factory.js
46
46
  - tests/support/factories/hat_factory.js
47
+ - tests/support/factories/profile_factory.js
47
48
  - tests/support/factories/project_factory.js
48
49
  - tests/support/factories/user_factory.js
49
50
  - tests/support/libs/sinon.js
50
51
  - tests/support/models/company.js
51
52
  - tests/support/models/hat.js
53
+ - tests/support/models/profile.js
52
54
  - tests/support/models/project.js
53
55
  - tests/support/models/user.js
54
56
  - tests/support/test_helper.js