backbone-relational-rails 0.8.5 → 0.8.6
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 +7 -0
- data/README.md +2 -2
- data/lib/backbone-relational-rails/version.rb +1 -1
- data/vendor/assets/javascripts/backbone-relational.js +148 -77
- metadata +10 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a358ff7e2c4cabae8dbddc3fbe53df8a87ff168c
|
4
|
+
data.tar.gz: 1c0de4ed22b1e62f19050ddb1811ae417e026adf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 14f7c8b8e3385e59d57cc4de3c5a114559bfaa6af8d79de6e5e3004a4cd78a645e55d1539a582818cf0c570d91e4024090aa9ccaaef9f248641cf8f8a37cf46e
|
7
|
+
data.tar.gz: f18037d420056d0e8be90af1b8a5dbcdeea84fe49905ed24f8174caa85665938ba0986cae98cc46a410c5477a2b7836ca4ce702de06a9a313d1efe53749424eb
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# backbone-relational-rails
|
2
2
|
|
3
3
|
backbone-relational-rails wraps the [Backbone-relational](https://github.com/PaulUithol/Backbone-relational) library in a rails engine for simple
|
4
|
-
use with the asset pipeline provided by rails 3.1. The gem includes the development (non-minified)
|
4
|
+
use with the asset pipeline first provided by rails 3.1. The gem includes the development (non-minified)
|
5
5
|
source for ease of exploration. The asset pipeline will minify in production.
|
6
6
|
|
7
7
|
Backbone-relational provides one-to-one, one-to-many and many-to-one relations between models for [Backbone](http://backbonejs.org/).
|
@@ -18,7 +18,7 @@ Add the following directive to your Javascript manifest file (application.js):
|
|
18
18
|
|
19
19
|
## Versioning
|
20
20
|
|
21
|
-
backbone-relational-rails 0.8.
|
21
|
+
backbone-relational-rails 0.8.6 == Backbone-relational 0.8.6
|
22
22
|
|
23
23
|
Every attempt is made to mirror the currently shipping Backbone-relational version number wherever possible.
|
24
24
|
The major, minor, and patch version numbers will always represent the Backbone-relational version. Should a gem
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* vim: set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab: */
|
2
2
|
/**
|
3
|
-
* Backbone-relational.js 0.8.
|
3
|
+
* Backbone-relational.js 0.8.6
|
4
4
|
* (c) 2011-2013 Paul Uithol and contributors (https://github.com/PaulUithol/Backbone-relational/graphs/contributors)
|
5
5
|
*
|
6
6
|
* Backbone-relational may be freely distributed under the MIT license; see the accompanying LICENSE.txt.
|
@@ -17,7 +17,8 @@
|
|
17
17
|
if ( typeof window === 'undefined' ) {
|
18
18
|
_ = require( 'underscore' );
|
19
19
|
Backbone = require( 'backbone' );
|
20
|
-
exports =
|
20
|
+
exports = Backbone;
|
21
|
+
typeof module === 'undefined' || ( module.exports = exports );
|
21
22
|
}
|
22
23
|
else {
|
23
24
|
_ = window._;
|
@@ -86,9 +87,21 @@
|
|
86
87
|
}
|
87
88
|
},
|
88
89
|
|
90
|
+
// Some of the queued events may trigger other blocking events. By
|
91
|
+
// copying the queue here it allows queued events to process closer to
|
92
|
+
// the natural order.
|
93
|
+
//
|
94
|
+
// queue events [ 'A', 'B', 'C' ]
|
95
|
+
// A handler of 'B' triggers 'D' and 'E'
|
96
|
+
// By copying `this._queue` this executes:
|
97
|
+
// [ 'A', 'B', 'D', 'E', 'C' ]
|
98
|
+
// The same order the would have executed if they didn't have to be
|
99
|
+
// delayed and queued.
|
89
100
|
process: function() {
|
90
|
-
|
91
|
-
|
101
|
+
var queue = this._queue;
|
102
|
+
this._queue = [];
|
103
|
+
while ( queue && queue.length ) {
|
104
|
+
queue.shift()();
|
92
105
|
}
|
93
106
|
},
|
94
107
|
|
@@ -298,7 +311,9 @@
|
|
298
311
|
rootModel = rootModel._superModel;
|
299
312
|
}
|
300
313
|
|
301
|
-
var coll = _.
|
314
|
+
var coll = _.find( this._collections, function(item) {
|
315
|
+
return item.model === rootModel;
|
316
|
+
});
|
302
317
|
|
303
318
|
if ( !coll && create !== false ) {
|
304
319
|
coll = this._createCollection( rootModel );
|
@@ -407,6 +422,7 @@
|
|
407
422
|
var modelColl = model.collection;
|
408
423
|
coll.add( model );
|
409
424
|
this.listenTo( model, 'destroy', this.unregister, this );
|
425
|
+
this.listenTo( model, 'relational:unregister', this.unregister, this );
|
410
426
|
model.collection = modelColl;
|
411
427
|
}
|
412
428
|
},
|
@@ -446,10 +462,10 @@
|
|
446
462
|
* Remove a 'model' from the store.
|
447
463
|
* @param {Backbone.RelationalModel} model
|
448
464
|
*/
|
449
|
-
unregister: function( model ) {
|
450
|
-
this.stopListening( model
|
465
|
+
unregister: function( model, collection, options ) {
|
466
|
+
this.stopListening( model );
|
451
467
|
var coll = this.getCollection( model );
|
452
|
-
coll && coll.remove( model );
|
468
|
+
coll && coll.remove( model, options );
|
453
469
|
},
|
454
470
|
|
455
471
|
/**
|
@@ -496,7 +512,12 @@
|
|
496
512
|
this.keyDestination = this.options.keyDestination || this.keySource || this.key;
|
497
513
|
|
498
514
|
this.model = this.options.model || this.instance.constructor;
|
515
|
+
|
499
516
|
this.relatedModel = this.options.relatedModel;
|
517
|
+
|
518
|
+
if ( _.isFunction( this.relatedModel ) && !( this.relatedModel.prototype instanceof Backbone.RelationalModel ) ) {
|
519
|
+
this.relatedModel = _.result( this, 'relatedModel' );
|
520
|
+
}
|
500
521
|
if ( _.isString( this.relatedModel ) ) {
|
501
522
|
this.relatedModel = Backbone.Relational.store.getObjectByName( this.relatedModel );
|
502
523
|
}
|
@@ -528,7 +549,7 @@
|
|
528
549
|
|
529
550
|
// Explicitly clear 'keySource', to prevent a leaky abstraction if 'keySource' differs from 'key'.
|
530
551
|
if ( this.keySource !== this.key ) {
|
531
|
-
this.instance.
|
552
|
+
delete this.instance.attributes[ this.keySource ];
|
532
553
|
}
|
533
554
|
|
534
555
|
// Add this Relation to instance._relations
|
@@ -829,6 +850,9 @@
|
|
829
850
|
|
830
851
|
// Handle a custom 'collectionType'
|
831
852
|
this.collectionType = this.options.collectionType;
|
853
|
+
if ( _.isFunction( this.collectionType ) && this.collectionType !== Backbone.Collection && !( this.collectionType.prototype instanceof Backbone.Collection ) ) {
|
854
|
+
this.collectionType = _.result( this, 'collectionType' );
|
855
|
+
}
|
832
856
|
if ( _.isString( this.collectionType ) ) {
|
833
857
|
this.collectionType = Backbone.Relational.store.getObjectByName( this.collectionType );
|
834
858
|
}
|
@@ -1064,6 +1088,7 @@
|
|
1064
1088
|
_isInitialized: false,
|
1065
1089
|
_deferProcessing: false,
|
1066
1090
|
_queue: null,
|
1091
|
+
_attributeChangeFired: false, // Keeps track of `change` event firing under some conditions (like nested `set`s)
|
1067
1092
|
|
1068
1093
|
subModelTypeAttribute: 'type',
|
1069
1094
|
subModelTypes: null,
|
@@ -1128,7 +1153,9 @@
|
|
1128
1153
|
// Determine if the `change` event is still valid, now that all relations are populated
|
1129
1154
|
var changed = true;
|
1130
1155
|
if ( eventName === 'change' ) {
|
1131
|
-
|
1156
|
+
// `hasChanged` may have gotten reset by nested calls to `set`.
|
1157
|
+
changed = dit.hasChanged() || dit._attributeChangeFired;
|
1158
|
+
dit._attributeChangeFired = false;
|
1132
1159
|
}
|
1133
1160
|
else {
|
1134
1161
|
var attr = eventName.slice( 7 ),
|
@@ -1137,7 +1164,7 @@
|
|
1137
1164
|
if ( rel ) {
|
1138
1165
|
// If `attr` is a relation, `change:attr` get triggered from `Relation.onChange`.
|
1139
1166
|
// These take precedence over `change:attr` events triggered by `Model.set`.
|
1140
|
-
// The relation
|
1167
|
+
// The relation sets a fourth attribute to `true`. If this attribute is present,
|
1141
1168
|
// continue triggering this event; otherwise, it's from `Model.set` and should be stopped.
|
1142
1169
|
changed = ( args[ 4 ] === true );
|
1143
1170
|
|
@@ -1152,6 +1179,9 @@
|
|
1152
1179
|
delete dit.changed[ attr ];
|
1153
1180
|
}
|
1154
1181
|
}
|
1182
|
+
else if ( changed ) {
|
1183
|
+
dit._attributeChangeFired = true;
|
1184
|
+
}
|
1155
1185
|
}
|
1156
1186
|
|
1157
1187
|
changed && Backbone.Model.prototype.trigger.apply( dit, args );
|
@@ -1172,7 +1202,7 @@
|
|
1172
1202
|
this.acquire(); // Setting up relations often also involve calls to 'set', and we only want to enter this function once
|
1173
1203
|
this._relations = {};
|
1174
1204
|
|
1175
|
-
_.each( this
|
1205
|
+
_.each( _.result( this, 'relations' ) || [], function( rel ) {
|
1176
1206
|
Backbone.Relational.store.initializeRelation( this, rel, options );
|
1177
1207
|
}, this );
|
1178
1208
|
|
@@ -1188,11 +1218,16 @@
|
|
1188
1218
|
updateRelations: function( options ) {
|
1189
1219
|
if ( this._isInitialized && !this.isLocked() ) {
|
1190
1220
|
_.each( this._relations, function( rel ) {
|
1191
|
-
// Update from data in `rel.keySource` if set, or `rel.key` otherwise
|
1221
|
+
// Update from data in `rel.keySource` if data got set in there, or `rel.key` otherwise
|
1192
1222
|
var val = this.attributes[ rel.keySource ] || this.attributes[ rel.key ];
|
1193
1223
|
if ( rel.related !== val ) {
|
1194
1224
|
this.trigger( 'relational:change:' + rel.key, this, val, options || {} );
|
1195
1225
|
}
|
1226
|
+
|
1227
|
+
// Explicitly clear 'keySource', to prevent a leaky abstraction if 'keySource' differs from 'key'.
|
1228
|
+
if ( rel.keySource !== rel.key ) {
|
1229
|
+
delete rel.instance.attributes[ rel.keySource ];
|
1230
|
+
}
|
1196
1231
|
}, this );
|
1197
1232
|
}
|
1198
1233
|
},
|
@@ -1244,7 +1279,7 @@
|
|
1244
1279
|
var setUrl,
|
1245
1280
|
requests = [],
|
1246
1281
|
rel = this.getRelation( key ),
|
1247
|
-
idsToFetch = rel && ( rel.keyIds || ( ( rel.keyId || rel.keyId === 0 ) ? [ rel.keyId ] : [] ) );
|
1282
|
+
idsToFetch = rel && ( ( rel.keyIds && rel.keyIds.slice( 0 ) ) || ( ( rel.keyId || rel.keyId === 0 ) ? [ rel.keyId ] : [] ) );
|
1248
1283
|
|
1249
1284
|
// On `refresh`, add the ids for current models in the relation to `idsToFetch`
|
1250
1285
|
if ( refresh ) {
|
@@ -1329,11 +1364,19 @@
|
|
1329
1364
|
// Go through all splits and return the final result
|
1330
1365
|
var splits = attr.split( '.' );
|
1331
1366
|
var result = _.reduce(splits, function( model, split ) {
|
1332
|
-
if (
|
1333
|
-
|
1367
|
+
if ( _.isNull(model) || _.isUndefined( model ) ) {
|
1368
|
+
// Return undefined if the path cannot be expanded
|
1369
|
+
return undefined;
|
1370
|
+
}
|
1371
|
+
else if ( model instanceof Backbone.Model ) {
|
1372
|
+
return Backbone.Model.prototype.get.call( model, split );
|
1373
|
+
}
|
1374
|
+
else if ( model instanceof Backbone.Collection ) {
|
1375
|
+
return Backbone.Collection.prototype.at.call( model, split )
|
1376
|
+
}
|
1377
|
+
else {
|
1378
|
+
throw new Error( 'Attribute must be an instanceof Backbone.Model or Backbone.Collection. Is: ' + model + ', currentSplit: ' + split );
|
1334
1379
|
}
|
1335
|
-
|
1336
|
-
return Backbone.Model.prototype.get.call( model, split );
|
1337
1380
|
}, this );
|
1338
1381
|
|
1339
1382
|
if ( originalResult !== undefined && result !== undefined ) {
|
@@ -1389,30 +1432,6 @@
|
|
1389
1432
|
return result;
|
1390
1433
|
},
|
1391
1434
|
|
1392
|
-
unset: function( attribute, options ) {
|
1393
|
-
Backbone.Relational.eventQueue.block();
|
1394
|
-
|
1395
|
-
var result = Backbone.Model.prototype.unset.apply( this, arguments );
|
1396
|
-
this.updateRelations( options );
|
1397
|
-
|
1398
|
-
// Try to run the global queue holding external events
|
1399
|
-
Backbone.Relational.eventQueue.unblock();
|
1400
|
-
|
1401
|
-
return result;
|
1402
|
-
},
|
1403
|
-
|
1404
|
-
clear: function( options ) {
|
1405
|
-
Backbone.Relational.eventQueue.block();
|
1406
|
-
|
1407
|
-
var result = Backbone.Model.prototype.clear.apply( this, arguments );
|
1408
|
-
this.updateRelations( options );
|
1409
|
-
|
1410
|
-
// Try to run the global queue holding external events
|
1411
|
-
Backbone.Relational.eventQueue.unblock();
|
1412
|
-
|
1413
|
-
return result;
|
1414
|
-
},
|
1415
|
-
|
1416
1435
|
clone: function() {
|
1417
1436
|
var attributes = _.clone( this.attributes );
|
1418
1437
|
if ( !_.isUndefined( attributes[ this.idAttribute ] ) ) {
|
@@ -1569,57 +1588,92 @@
|
|
1569
1588
|
* @return {Backbone.Model}
|
1570
1589
|
*/
|
1571
1590
|
build: function( attributes, options ) {
|
1572
|
-
var model = this;
|
1573
|
-
|
1574
1591
|
// 'build' is a possible entrypoint; it's possible no model hierarchy has been determined yet.
|
1575
1592
|
this.initializeModelHierarchy();
|
1576
1593
|
|
1577
1594
|
// Determine what type of (sub)model should be built if applicable.
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1595
|
+
var model = this._findSubModelType(this, attributes) || this;
|
1596
|
+
|
1597
|
+
return new model( attributes, options );
|
1598
|
+
},
|
1599
|
+
|
1600
|
+
/**
|
1601
|
+
* Determines what type of (sub)model should be built if applicable.
|
1602
|
+
* Looks up the proper subModelType in 'this._subModels', recursing into
|
1603
|
+
* types until a match is found. Returns the applicable 'Backbone.Model'
|
1604
|
+
* or null if no match is found.
|
1605
|
+
* @param {Backbone.Model} type
|
1606
|
+
* @param {Object} attributes
|
1607
|
+
* @return {Backbone.Model}
|
1608
|
+
*/
|
1609
|
+
_findSubModelType: function (type, attributes) {
|
1610
|
+
if ( type._subModels && type.prototype.subModelTypeAttribute in attributes ) {
|
1611
|
+
var subModelTypeAttribute = attributes[type.prototype.subModelTypeAttribute];
|
1612
|
+
var subModelType = type._subModels[subModelTypeAttribute];
|
1582
1613
|
if ( subModelType ) {
|
1583
|
-
|
1614
|
+
return subModelType;
|
1615
|
+
} else {
|
1616
|
+
// Recurse into subModelTypes to find a match
|
1617
|
+
for ( subModelTypeAttribute in type._subModels ) {
|
1618
|
+
subModelType = this._findSubModelType(type._subModels[subModelTypeAttribute], attributes);
|
1619
|
+
if ( subModelType ) {
|
1620
|
+
return subModelType;
|
1621
|
+
}
|
1622
|
+
}
|
1584
1623
|
}
|
1585
1624
|
}
|
1586
|
-
|
1587
|
-
return new model( attributes, options );
|
1625
|
+
return null;
|
1588
1626
|
},
|
1589
1627
|
|
1590
1628
|
/**
|
1591
1629
|
*
|
1592
1630
|
*/
|
1593
1631
|
initializeModelHierarchy: function() {
|
1594
|
-
//
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1632
|
+
// Inherit any relations that have been defined in the parent model.
|
1633
|
+
this.inheritRelations();
|
1634
|
+
|
1635
|
+
// If we came here through 'build' for a model that has 'subModelTypes' then try to initialize the ones that
|
1636
|
+
// haven't been resolved yet.
|
1637
|
+
if ( this.prototype.subModelTypes ) {
|
1638
|
+
var resolvedSubModels = _.keys(this._subModels);
|
1639
|
+
var unresolvedSubModels = _.omit(this.prototype.subModelTypes, resolvedSubModels);
|
1640
|
+
_.each( unresolvedSubModels, function( subModelTypeName ) {
|
1641
|
+
var subModelType = Backbone.Relational.store.getObjectByName( subModelTypeName );
|
1642
|
+
subModelType && subModelType.initializeModelHierarchy();
|
1643
|
+
});
|
1644
|
+
}
|
1645
|
+
},
|
1646
|
+
|
1647
|
+
inheritRelations: function() {
|
1648
|
+
// Bail out if we've been here before.
|
1649
|
+
if (!_.isUndefined( this._superModel ) && !_.isNull( this._superModel )) {
|
1650
|
+
return;
|
1651
|
+
}
|
1652
|
+
// Try to initialize the _superModel.
|
1653
|
+
Backbone.Relational.store.setupSuperModel( this );
|
1654
|
+
|
1655
|
+
// If a superModel has been found, copy relations from the _superModel if they haven't been inherited automatically
|
1656
|
+
// (due to a redefinition of 'relations').
|
1657
|
+
if ( this._superModel ) {
|
1658
|
+
// The _superModel needs a chance to initialize its own inherited relations before we attempt to inherit relations
|
1659
|
+
// from the _superModel. You don't want to call 'initializeModelHierarchy' because that could cause sub-models of
|
1660
|
+
// this class to inherit their relations before this class has had chance to inherit it's relations.
|
1661
|
+
this._superModel.inheritRelations();
|
1662
|
+
if ( this._superModel.prototype.relations ) {
|
1663
|
+
// Find relations that exist on the '_superModel', but not yet on this model.
|
1604
1664
|
var inheritedRelations = _.select( this._superModel.prototype.relations || [], function( superRel ) {
|
1605
1665
|
return !_.any( this.prototype.relations || [], function( rel ) {
|
1606
1666
|
return superRel.relatedModel === rel.relatedModel && superRel.key === rel.key;
|
1607
1667
|
}, this );
|
1608
1668
|
}, this );
|
1609
|
-
|
1669
|
+
|
1610
1670
|
this.prototype.relations = inheritedRelations.concat( this.prototype.relations );
|
1611
1671
|
}
|
1612
|
-
else {
|
1613
|
-
this._superModel = false;
|
1614
|
-
}
|
1615
1672
|
}
|
1616
|
-
|
1617
|
-
//
|
1618
|
-
|
1619
|
-
|
1620
|
-
var subModelType = Backbone.Relational.store.getObjectByName( subModelTypeName );
|
1621
|
-
subModelType && subModelType.initializeModelHierarchy();
|
1622
|
-
});
|
1673
|
+
// Otherwise, make sure we don't get here again for this type by making '_superModel' false so we fail the
|
1674
|
+
// isUndefined/isNull check next time.
|
1675
|
+
else {
|
1676
|
+
this._superModel = false;
|
1623
1677
|
}
|
1624
1678
|
},
|
1625
1679
|
|
@@ -1638,7 +1692,7 @@
|
|
1638
1692
|
findOrCreate: function( attributes, options ) {
|
1639
1693
|
options || ( options = {} );
|
1640
1694
|
var parsedAttributes = ( _.isObject( attributes ) && options.parse && this.prototype.parse ) ?
|
1641
|
-
this.prototype.parse( attributes ) : attributes;
|
1695
|
+
this.prototype.parse( _.clone( attributes ) ) : attributes;
|
1642
1696
|
|
1643
1697
|
// Try to find an instance of 'this' model type in the store
|
1644
1698
|
var model = Backbone.Relational.store.find( this, parsedAttributes );
|
@@ -1647,8 +1701,9 @@
|
|
1647
1701
|
// If not, create an instance (unless 'options.create' is false).
|
1648
1702
|
if ( _.isObject( attributes ) ) {
|
1649
1703
|
if ( model && options.merge !== false ) {
|
1650
|
-
// Make sure `options.collection` doesn't cascade to nested models
|
1704
|
+
// Make sure `options.collection` and `options.url` doesn't cascade to nested models
|
1651
1705
|
delete options.collection;
|
1706
|
+
delete options.url;
|
1652
1707
|
|
1653
1708
|
model.set( parsedAttributes, options );
|
1654
1709
|
}
|
@@ -1658,6 +1713,22 @@
|
|
1658
1713
|
}
|
1659
1714
|
|
1660
1715
|
return model;
|
1716
|
+
},
|
1717
|
+
|
1718
|
+
/**
|
1719
|
+
* Find an instance of `this` type in 'Backbone.Relational.store'.
|
1720
|
+
* - If `attributes` is a string or a number, `find` will just query the `store` and return a model if found.
|
1721
|
+
* - If `attributes` is an object and is found in the store, the model will be updated with `attributes` unless `options.update` is `false`.
|
1722
|
+
* @param {Object|String|Number} attributes Either a model's id, or the attributes used to create or update a model.
|
1723
|
+
* @param {Object} [options]
|
1724
|
+
* @param {Boolean} [options.merge=true]
|
1725
|
+
* @param {Boolean} [options.parse=false]
|
1726
|
+
* @return {Backbone.RelationalModel}
|
1727
|
+
*/
|
1728
|
+
find: function( attributes, options ) {
|
1729
|
+
options || ( options = {} );
|
1730
|
+
options.create = false;
|
1731
|
+
return this.findOrCreate( attributes, options );
|
1661
1732
|
}
|
1662
1733
|
});
|
1663
1734
|
_.extend( Backbone.RelationalModel.prototype, Backbone.Semaphore );
|
@@ -1765,14 +1836,14 @@
|
|
1765
1836
|
return remove.apply( this, arguments );
|
1766
1837
|
}
|
1767
1838
|
|
1768
|
-
models = _.isArray( models ) ? models.slice() : [ models ];
|
1839
|
+
models = _.isArray( models ) ? models.slice( 0 ) : [ models ];
|
1769
1840
|
options || ( options = {} );
|
1770
1841
|
|
1771
1842
|
var toRemove = [];
|
1772
1843
|
|
1773
1844
|
//console.debug('calling remove on coll=%o; models=%o, options=%o', this, models, options );
|
1774
1845
|
_.each( models, function( model ) {
|
1775
|
-
model = this.get( model ) || this.get( model.cid );
|
1846
|
+
model = this.get( model ) || ( model && this.get( model.cid ) );
|
1776
1847
|
model && toRemove.push( model );
|
1777
1848
|
}, this );
|
1778
1849
|
|
@@ -1827,7 +1898,7 @@
|
|
1827
1898
|
return trigger.apply( this, arguments );
|
1828
1899
|
}
|
1829
1900
|
|
1830
|
-
if ( eventName === 'add' || eventName === 'remove' || eventName === 'reset' ) {
|
1901
|
+
if ( eventName === 'add' || eventName === 'remove' || eventName === 'reset' || eventName === 'sort' ) {
|
1831
1902
|
var dit = this,
|
1832
1903
|
args = arguments;
|
1833
1904
|
|
metadata
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backbone-relational-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Peter Marsh
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: railties
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.1'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3.1'
|
30
27
|
description: Backbone-relational provides one-to-one, one-to-many and many-to-one
|
@@ -35,41 +32,34 @@ executables: []
|
|
35
32
|
extensions: []
|
36
33
|
extra_rdoc_files: []
|
37
34
|
files:
|
38
|
-
- lib/backbone-relational-rails.rb
|
39
35
|
- lib/backbone-relational-rails/version.rb
|
36
|
+
- lib/backbone-relational-rails.rb
|
40
37
|
- vendor/assets/javascripts/backbone-relational.js
|
41
38
|
- LICENSE
|
42
39
|
- README.md
|
43
40
|
homepage: http://github.com/petedmarsh/backbone-relational-rails
|
44
41
|
licenses:
|
45
42
|
- MIT
|
43
|
+
metadata: {}
|
46
44
|
post_install_message:
|
47
45
|
rdoc_options: []
|
48
46
|
require_paths:
|
49
47
|
- lib
|
50
48
|
- vendor
|
51
49
|
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
50
|
requirements:
|
54
|
-
- -
|
51
|
+
- - '>='
|
55
52
|
- !ruby/object:Gem::Version
|
56
53
|
version: '0'
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
hash: -3926763858083606606
|
60
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
55
|
requirements:
|
63
|
-
- -
|
56
|
+
- - '>='
|
64
57
|
- !ruby/object:Gem::Version
|
65
58
|
version: '0'
|
66
|
-
segments:
|
67
|
-
- 0
|
68
|
-
hash: -3926763858083606606
|
69
59
|
requirements: []
|
70
60
|
rubyforge_project:
|
71
|
-
rubygems_version:
|
61
|
+
rubygems_version: 2.0.3
|
72
62
|
signing_key:
|
73
|
-
specification_version:
|
63
|
+
specification_version: 4
|
74
64
|
summary: Backbone-relational packaged for Rails
|
75
65
|
test_files: []
|