backbone_extensions 0.0.13 → 0.0.14
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.
@@ -25,18 +25,18 @@
|
|
25
25
|
}
|
26
26
|
|
27
27
|
function createAssociation() {
|
28
|
-
var collectionName = _.str.classify(associationName), className = options.className && _.str.classify(options.className),
|
28
|
+
var self = this, collectionName = _.str.classify(associationName), className = options.className && _.str.classify(options.className),
|
29
29
|
newOptions = mergeAssociationOptions(options, this._options);
|
30
30
|
|
31
31
|
if (options.inverseOf) {
|
32
|
-
newOptions[_.str.camelize(options.inverseOf)] =
|
32
|
+
newOptions[_.str.camelize(options.inverseOf)] = function() { return self; };
|
33
33
|
}
|
34
34
|
|
35
35
|
return _((options['class'] && new options['class'](null, newOptions)) ||
|
36
36
|
(className && namespace[className] && new namespace[className](null, newOptions)) ||
|
37
|
-
(namespace[collectionName] && new namespace[collectionName](null, newOptions))).tap(
|
38
|
-
|
39
|
-
|
37
|
+
(namespace[collectionName] && new namespace[collectionName](null, newOptions))).tap(function(association) {
|
38
|
+
through.call(self, association);
|
39
|
+
});
|
40
40
|
}
|
41
41
|
|
42
42
|
var associations = {
|
@@ -79,29 +79,30 @@
|
|
79
79
|
|
80
80
|
if (associations[associationType]) {
|
81
81
|
var parseFunc = _(options.parse).isFunction() &&
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
82
|
+
function(response) { return {response: options.parse.call(this, response) }; } ||
|
83
|
+
function(response) {
|
84
|
+
return (options.through && through.call(this, response)) ||
|
85
|
+
(options.parseName && parseResponseWith(options.parseName, response)) ||
|
86
|
+
(options.className && parseResponseWith(options.className, response)) ||
|
87
|
+
parseResponseWith(associationName, response);
|
88
|
+
};
|
89
89
|
|
90
90
|
if (!this._parsers) {
|
91
91
|
var parsers = this._parsers = [];
|
92
92
|
this.prototype.parse = _(this.prototype.parse).wrap(function(oldParse, response) {
|
93
|
-
|
93
|
+
var self = this;
|
94
|
+
return _(oldParse.call(self, response)).tap(function(parsedResponse) {
|
94
95
|
_(parsers)
|
95
96
|
.chain()
|
96
97
|
.map(function(parser) {
|
97
|
-
return _(parser.parseFn.call(
|
98
|
-
parser.associationFn.call(
|
99
|
-
}).
|
100
|
-
}
|
98
|
+
return _(parser.parseFn.call(self, parsedResponse)).tap(function(result) {
|
99
|
+
parser.associationFn.call(self, result.response);
|
100
|
+
}).key;
|
101
|
+
})
|
101
102
|
.each(function(key) {
|
102
103
|
return key && delete parsedResponse[key];
|
103
104
|
});
|
104
|
-
})
|
105
|
+
});
|
105
106
|
});
|
106
107
|
}
|
107
108
|
|
@@ -121,32 +122,33 @@
|
|
121
122
|
var associations = _({
|
122
123
|
belongsTo: {}, hasMany: {parse: true}, hasOne: {parse: true}
|
123
124
|
}).reduce(function(associations, defaultOptions, associationType) {
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
125
|
+
associations[associationType] = function(name, options) {
|
126
|
+
var associationName = _.str.camelize(name);
|
127
|
+
options = _({}).extend(defaultOptions, options);
|
128
|
+
buildAssociation.call(this, associationType, associationName, options);
|
129
|
+
parseAssociation.call(this, associationType, associationName, options);
|
130
|
+
return this;
|
131
|
+
};
|
132
|
+
return associations;
|
133
|
+
}, {});
|
133
134
|
|
134
135
|
_(source).extend(associations, {
|
135
136
|
associations: function() {
|
137
|
+
var self = this;
|
136
138
|
_(arguments).chain().toArray().compact().each(function(options) {
|
137
139
|
_(associations).chain().keys().each(function(associationType) {
|
138
140
|
if (options[associationType]) {
|
139
|
-
associations[associationType].call(
|
141
|
+
associations[associationType].call(self, options[associationType], _(options).omit(associationType));
|
140
142
|
}
|
141
143
|
});
|
142
144
|
});
|
143
145
|
},
|
144
146
|
|
145
147
|
extend: _(source.extend).wrap(function(oldExtend, protoProps, classProps) {
|
146
|
-
return _(oldExtend.call(this, protoProps, classProps)).tap(function() {
|
148
|
+
return _(oldExtend.call(this, protoProps, classProps)).tap(function(Klass) {
|
147
149
|
var args = (protoProps || {}).associations;
|
148
150
|
if (args) {
|
149
|
-
|
151
|
+
Klass.associations.apply(Klass, _([args]).flatten());
|
150
152
|
}
|
151
153
|
});
|
152
154
|
})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backbone_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -126,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '0'
|
127
127
|
segments:
|
128
128
|
- 0
|
129
|
-
hash:
|
129
|
+
hash: 2812514914481620134
|
130
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
131
|
none: false
|
132
132
|
requirements:
|
@@ -135,10 +135,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
135
|
version: '0'
|
136
136
|
segments:
|
137
137
|
- 0
|
138
|
-
hash:
|
138
|
+
hash: 2812514914481620134
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 1.8.
|
141
|
+
rubygems_version: 1.8.21
|
142
142
|
signing_key:
|
143
143
|
specification_version: 3
|
144
144
|
summary: Extensions to backbone javascript library as a rails engine
|