ember-data-factory-guy 0.6.3 → 0.7.0
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.
- checksums.yaml +4 -4
- data/README.md +25 -0
- data/bower.json +4 -4
- data/dist/ember-data-factory-guy.js +13 -183
- data/dist/ember-data-factory-guy.min.js +1 -1
- data/dist/factory_guy_has_many.js +11 -10
- data/ember-data-factory-guy.gemspec +1 -1
- data/package.json +1 -1
- data/src/factory_guy_test_mixin.js +10 -3
- data/src/has_many.js +11 -10
- data/src/store.js +3 -180
- data/tests/active_model_adapter_factory_test.js +36 -31
- data/tests/factory_guy_test_mixin_test.js +19 -0
- data/tests/fixture_adapter_factory_test.js +33 -43
- data/tests/rest_adapter_factory_test.js +47 -43
- data/vendor/assets/javascripts/ember_data_factory_guy.js +14 -183
- data/vendor/assets/javascripts/factory_guy_has_many.js +11 -10
- metadata +2 -2
@@ -495,7 +495,7 @@ DS.Store.reopen({
|
|
495
495
|
|
496
496
|
var model;
|
497
497
|
Em.run(function () {
|
498
|
-
store.
|
498
|
+
store.findEmbeddedAssociationsForRESTAdapter(modelType, fixture);
|
499
499
|
if (fixture.type) {
|
500
500
|
// assuming its polymorphic if there is a type attribute
|
501
501
|
// is this too bold an assumption?
|
@@ -503,7 +503,7 @@ DS.Store.reopen({
|
|
503
503
|
modelType = store.modelFor(modelName);
|
504
504
|
}
|
505
505
|
model = store.push(modelName, fixture);
|
506
|
-
store.setAssociationsForRESTAdapter(modelType, modelName, model);
|
506
|
+
// store.setAssociationsForRESTAdapter(modelType, modelName, model);
|
507
507
|
});
|
508
508
|
return model;
|
509
509
|
}
|
@@ -581,6 +581,7 @@ DS.Store.reopen({
|
|
581
581
|
FactoryGuy.pushFixture(relationship.type, belongsToRecord);
|
582
582
|
fixture[relationship.key] = belongsToRecord.id;
|
583
583
|
}
|
584
|
+
console.log('belongsToRecord',belongsToRecord)
|
584
585
|
var hasManyName = self.findHasManyRelationshipNameForFixtureAdapter(relationship.type, relationship.parentType);
|
585
586
|
var belongsToFixtures = adapter.fixturesForType(relationship.type);
|
586
587
|
var belongsTofixture = adapter.findFixtureById(belongsToFixtures, fixture[relationship.key]);
|
@@ -603,7 +604,7 @@ DS.Store.reopen({
|
|
603
604
|
@param modelType
|
604
605
|
@param fixture
|
605
606
|
*/
|
606
|
-
|
607
|
+
findEmbeddedAssociationsForRESTAdapter: function (modelType, fixture) {
|
607
608
|
var store = this;
|
608
609
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
609
610
|
if (relationship.kind == 'belongsTo') {
|
@@ -629,94 +630,6 @@ DS.Store.reopen({
|
|
629
630
|
})
|
630
631
|
},
|
631
632
|
|
632
|
-
/**
|
633
|
-
For the REST type models:
|
634
|
-
|
635
|
-
For example if a user hasMany projects, then set the user
|
636
|
-
on each project that the user hasMany of, so that the project
|
637
|
-
now has the belongsTo user association setup. As in this scenario:
|
638
|
-
|
639
|
-
```js
|
640
|
-
var project = store.makeFixture('project');
|
641
|
-
var user = store.makeFixture('user', {projects: [project]});
|
642
|
-
```
|
643
|
-
|
644
|
-
Or if you make a user, then a project with that user, then set the project
|
645
|
-
in the users list of 'projects' it hasMany of. As in this scenario:
|
646
|
-
|
647
|
-
```js
|
648
|
-
var user = store.makeFixture('user');
|
649
|
-
var project = store.makeFixture('project', {user: user});
|
650
|
-
```
|
651
|
-
|
652
|
-
@param {DS.Model} modelType model type like 'User'
|
653
|
-
@param {String} modelName model name like 'user'
|
654
|
-
@param {DS.Model} model model to check for needed association assignments
|
655
|
-
*/
|
656
|
-
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
657
|
-
var self = this;
|
658
|
-
|
659
|
-
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
660
|
-
if (relationship.kind == 'hasMany') {
|
661
|
-
var children = model.get(name) || [];
|
662
|
-
children.forEach(function (child) {
|
663
|
-
var belongsToName = self.findRelationshipName(
|
664
|
-
'belongsTo',
|
665
|
-
child.constructor,
|
666
|
-
model
|
667
|
-
);
|
668
|
-
var hasManyName = self.findRelationshipName(
|
669
|
-
'hasMany',
|
670
|
-
child.constructor,
|
671
|
-
model
|
672
|
-
);
|
673
|
-
var inverseName = (relationship.options && relationship.options.inverse)
|
674
|
-
if (belongsToName) {
|
675
|
-
child.set(belongsToName || inverseName, model);
|
676
|
-
} else if (hasManyName) {
|
677
|
-
relation = child.get(hasManyName || inverseName) || [];
|
678
|
-
relation.pushObject(model)
|
679
|
-
}
|
680
|
-
})
|
681
|
-
}
|
682
|
-
|
683
|
-
if (relationship.kind == 'belongsTo') {
|
684
|
-
var belongsToRecord = model.get(name);
|
685
|
-
if (belongsToRecord) {
|
686
|
-
var setAssociations = function() {
|
687
|
-
var hasManyName = self.findRelationshipName(
|
688
|
-
'hasMany',
|
689
|
-
belongsToRecord.constructor,
|
690
|
-
model
|
691
|
-
);
|
692
|
-
if (hasManyName) {
|
693
|
-
belongsToRecord.get(hasManyName).addObject(model);
|
694
|
-
return;
|
695
|
-
}
|
696
|
-
var oneToOneName = self.findRelationshipName(
|
697
|
-
'belongsTo',
|
698
|
-
belongsToRecord.constructor,
|
699
|
-
model
|
700
|
-
);
|
701
|
-
// Guard against a situation where a model can belong to itself.
|
702
|
-
// Do not want to set the belongsTo on this case.
|
703
|
-
if (oneToOneName && !(belongsToRecord.constructor == model.constructor)) {
|
704
|
-
belongsToRecord.set(oneToOneName, model);
|
705
|
-
}
|
706
|
-
}
|
707
|
-
if (belongsToRecord.then) {
|
708
|
-
belongsToRecord.then(function(record) {
|
709
|
-
belongsToRecord = record;
|
710
|
-
setAssociations();
|
711
|
-
})
|
712
|
-
} else {
|
713
|
-
setAssociations();
|
714
|
-
}
|
715
|
-
}
|
716
|
-
}
|
717
|
-
})
|
718
|
-
},
|
719
|
-
|
720
633
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
721
634
|
var relationshipName;
|
722
635
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
@@ -761,95 +674,6 @@ DS.Store.reopen({
|
|
761
674
|
}
|
762
675
|
});
|
763
676
|
|
764
|
-
|
765
|
-
DS.FixtureAdapter.reopen({
|
766
|
-
|
767
|
-
/**
|
768
|
-
Overriding createRecord to add the record created to the
|
769
|
-
hashMany records for all of the records that this record belongsTo.
|
770
|
-
|
771
|
-
For example:
|
772
|
-
|
773
|
-
If models are defined like so:
|
774
|
-
|
775
|
-
User = DS.Model.extend({
|
776
|
-
projects: DS.hasMany('project')
|
777
|
-
})
|
778
|
-
|
779
|
-
Project = DS.Model.extend({
|
780
|
-
user: DS.belongsTo('user')
|
781
|
-
})
|
782
|
-
|
783
|
-
and you create a project record with a user defined:
|
784
|
-
store.createRecord('project', {user: user})
|
785
|
-
|
786
|
-
this method will take the new project created and add it to the user's 'projects'
|
787
|
-
hasMany array.
|
788
|
-
|
789
|
-
And a full code example:
|
790
|
-
|
791
|
-
var userJson = store.makeFixture('user');
|
792
|
-
|
793
|
-
store.find('user', userJson.id).then(function(user) {
|
794
|
-
store.createRecord('project', {user: user}).save()
|
795
|
-
.then( function(project) {
|
796
|
-
// user.get('projects.length') == 1;
|
797
|
-
})
|
798
|
-
})
|
799
|
-
|
800
|
-
@method createRecord
|
801
|
-
@param {DS.Store} store
|
802
|
-
@param {subclass of DS.Model} type
|
803
|
-
@param {DS.Model} record
|
804
|
-
@return {Promise} promise
|
805
|
-
*/
|
806
|
-
createRecord: function (store, type, record) {
|
807
|
-
var promise = this._super(store, type, record);
|
808
|
-
promise.then(function () {
|
809
|
-
Em.RSVP.Promise.resolve(Ember.get(type, 'relationshipNames')).then(function (relationShips){
|
810
|
-
if (relationShips.belongsTo) {
|
811
|
-
relationShips.belongsTo.forEach(function (relationship) {
|
812
|
-
Em.RSVP.Promise.resolve(record.get(relationship)).then(function(belongsToRecord){
|
813
|
-
if (belongsToRecord) {
|
814
|
-
var hasManyName = store.findRelationshipName(
|
815
|
-
'hasMany',
|
816
|
-
belongsToRecord.constructor,
|
817
|
-
record
|
818
|
-
);
|
819
|
-
if (hasManyName) {
|
820
|
-
Ember.RSVP.resolve(belongsToRecord.get(hasManyName)).then (function(relationship){
|
821
|
-
relationship.addObject(record);
|
822
|
-
});
|
823
|
-
}
|
824
|
-
}
|
825
|
-
});
|
826
|
-
});
|
827
|
-
}
|
828
|
-
if (relationShips.hasMany) {
|
829
|
-
relationShips.hasMany.forEach(function (relationship) {
|
830
|
-
Em.RSVP.Promise.resolve(record.get(relationship)).then(function(belongsToRecord){
|
831
|
-
if (belongsToRecord && belongsToRecord.get('length') > 0) {
|
832
|
-
var hasManyName = store.findRelationshipName(
|
833
|
-
'hasMany',
|
834
|
-
belongsToRecord.get('firstObject').constructor,
|
835
|
-
record
|
836
|
-
);
|
837
|
-
belongsToRecord.forEach(function (child){
|
838
|
-
Em.RSVP.resolve(child.get(hasManyName)).then( function(value) {
|
839
|
-
value.addObjects(record);
|
840
|
-
});
|
841
|
-
});
|
842
|
-
}
|
843
|
-
});
|
844
|
-
})
|
845
|
-
}
|
846
|
-
});
|
847
|
-
});
|
848
|
-
|
849
|
-
return promise;
|
850
|
-
}
|
851
|
-
})
|
852
|
-
|
853
677
|
FactoryGuyTestMixin = Em.Mixin.create({
|
854
678
|
|
855
679
|
// Pass in the app root, which typically is App.
|
@@ -976,11 +800,18 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
976
800
|
},
|
977
801
|
|
978
802
|
|
979
|
-
|
980
|
-
var
|
981
|
-
var id = responseJson[modelName].id
|
803
|
+
handleSideloadFind: function (modelName, json, sideload) {
|
804
|
+
var id = json.id
|
982
805
|
var url = this.buildURL(modelName, id);
|
806
|
+
var responseJson = {};
|
807
|
+
responseJson[modelName] = json;
|
808
|
+
$.extend(responseJson, sideload)
|
983
809
|
|
810
|
+
this.stubEndpointForHttpRequest(
|
811
|
+
url,
|
812
|
+
responseJson,
|
813
|
+
{type: 'GET', status: (status || 200)}
|
814
|
+
)
|
984
815
|
},
|
985
816
|
|
986
817
|
|
@@ -78,18 +78,19 @@
|
|
78
78
|
// cache the promise so we can use it
|
79
79
|
// when we come back and don't need to rebuild
|
80
80
|
// the relationship.
|
81
|
-
set(rel, 'promise', resolver.promise);
|
82
|
-
return
|
81
|
+
// set(rel, 'promise', resolver.promise);
|
82
|
+
return relationship;
|
83
|
+
// return rel;
|
83
84
|
});
|
84
85
|
}
|
85
|
-
|
86
|
-
var promise = relationship.get('promise').then(function() {
|
87
|
-
return relationship;
|
88
|
-
}, null, "DS: Async hasMany records received");
|
89
|
-
|
90
|
-
return DS.PromiseArray.create({
|
91
|
-
promise: promise
|
92
|
-
});
|
86
|
+
return relationship;
|
87
|
+
// var promise = relationship.get('promise').then(function() {
|
88
|
+
// return relationship;
|
89
|
+
// }, null, "DS: Async hasMany records received");
|
90
|
+
//
|
91
|
+
// return DS.PromiseArray.create({
|
92
|
+
// promise: promise
|
93
|
+
// });
|
93
94
|
}
|
94
95
|
|
95
96
|
return buildRelationship(this, key, options, function(store, data) {
|
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.
|
4
|
+
version: 0.7.0
|
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-09-
|
12
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Easily create Fixtures for Ember Data
|
15
15
|
email:
|