angularjs-rails-resource 0.1.4 → 0.1.5
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.
- data/README.md +63 -6
- data/lib/angularjs-rails-resource/version.rb +1 -1
- data/test/lib/angular/angular-bootstrap-prettify.js +13 -8
- data/test/lib/angular/angular-bootstrap.js +3 -2
- data/test/lib/angular/angular-cookies.js +14 -1
- data/test/lib/angular/angular-loader.js +33 -5
- data/test/lib/angular/angular-locale_en-us.js +4 -0
- data/test/lib/angular/angular-mobile.js +267 -0
- data/test/lib/angular/angular-mocks.js +157 -52
- data/test/lib/angular/angular-resource.js +195 -102
- data/test/lib/angular/angular-sanitize.js +28 -5
- data/test/lib/angular/angular-scenario.js +27862 -0
- data/test/lib/angular/angular.js +2820 -907
- data/test/unit/angularjs/rails/fieldRenamingSpec.js +91 -0
- data/test/unit/angularjs/rails/httpSettingsSpec.js +219 -0
- data/test/unit/angularjs/rails/nestedUrlsSpec.js +327 -0
- data/test/unit/angularjs/rails/resourceSpec.js +37 -662
- data/test/unit/angularjs/rails/rootWrappingSpec.js +46 -0
- data/vendor/assets/javascripts/angularjs/rails/resource.js +62 -16
- metadata +16 -2
@@ -0,0 +1,46 @@
|
|
1
|
+
describe("root wrapping", function () {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
beforeEach(module('rails'));
|
5
|
+
|
6
|
+
var q, rootScope,
|
7
|
+
transformer, interceptor,
|
8
|
+
config = {rootName: 'test', rootPluralName: 'tests'};
|
9
|
+
|
10
|
+
|
11
|
+
function testTransform(wrappedData, unwrappedData) {
|
12
|
+
var result, resultPromise,
|
13
|
+
deferred = q.defer();
|
14
|
+
|
15
|
+
expect(transformer(unwrappedData, config)).toEqualData(wrappedData);
|
16
|
+
deferred.promise.resource = config;
|
17
|
+
expect(resultPromise = interceptor(deferred.promise)).toBeDefined();
|
18
|
+
|
19
|
+
resultPromise.then(function (response) {
|
20
|
+
result = response;
|
21
|
+
});
|
22
|
+
|
23
|
+
deferred.resolve({data: wrappedData});
|
24
|
+
rootScope.$digest(); // needed for $q to actually run callbacks
|
25
|
+
expect(result).toEqualData({data: unwrappedData});
|
26
|
+
}
|
27
|
+
|
28
|
+
beforeEach(inject(function ($rootScope, $q, railsRootWrappingTransformer, railsRootWrappingInterceptor) {
|
29
|
+
q = $q;
|
30
|
+
rootScope = $rootScope;
|
31
|
+
transformer = railsRootWrappingTransformer;
|
32
|
+
interceptor = railsRootWrappingInterceptor;
|
33
|
+
}));
|
34
|
+
|
35
|
+
it('should handle null root', function() {
|
36
|
+
testTransform({test: null}, null);
|
37
|
+
});
|
38
|
+
|
39
|
+
it('should transform arrays', function() {
|
40
|
+
testTransform({tests: [1, 2, 3]}, [1, 2, 3]);
|
41
|
+
});
|
42
|
+
|
43
|
+
it('should transform object', function() {
|
44
|
+
testTransform({test: {abc: 'xyz', def: 'abc'}}, {abc: 'xyz', def: 'abc'});
|
45
|
+
});
|
46
|
+
});
|
@@ -85,6 +85,7 @@
|
|
85
85
|
});
|
86
86
|
|
87
87
|
angular.module('rails').factory('railsResourceFactory', ['$http', '$q', '$injector', '$interpolate', function ($http, $q, $injector, $interpolate) {
|
88
|
+
// urlBuilder("/path/{{someId}}")(someId: 5) == "/path/5"
|
88
89
|
function urlBuilder(url) {
|
89
90
|
var expression;
|
90
91
|
|
@@ -114,14 +115,27 @@
|
|
114
115
|
interceptors = config.responseInterceptors || ['railsFieldRenamingInterceptor', 'railsRootWrappingInterceptor'];
|
115
116
|
|
116
117
|
function RailsResource(value) {
|
117
|
-
|
118
|
+
var immediatePromise = function(data) {
|
119
|
+
return {
|
120
|
+
response: data,
|
121
|
+
then: function(callback) {
|
122
|
+
this.response = callback(this.response);
|
123
|
+
return immediatePromise(this.response);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
};
|
127
|
+
var data = RailsResource.callInterceptors(immediatePromise({data: value || {}})).response.data;
|
128
|
+
angular.extend(this, data);
|
118
129
|
}
|
119
130
|
|
120
|
-
RailsResource.
|
131
|
+
RailsResource.setUrl = function(url) {
|
132
|
+
RailsResource.url = urlBuilder(url);
|
133
|
+
};
|
134
|
+
RailsResource.setUrl(config.url);
|
121
135
|
RailsResource.rootName = config.name;
|
122
136
|
RailsResource.rootPluralName = config.pluralName || config.name + 's';
|
123
137
|
RailsResource.httpConfig = config.httpConfig || {};
|
124
|
-
RailsResource.httpConfig.headers = angular.extend({'Accept': 'application/json'}, RailsResource.httpConfig.headers || {});
|
138
|
+
RailsResource.httpConfig.headers = angular.extend({'Accept': 'application/json', 'Content-Type': 'application/json'}, RailsResource.httpConfig.headers || {});
|
125
139
|
RailsResource.requestTransformers = [];
|
126
140
|
RailsResource.responseInterceptors = [];
|
127
141
|
RailsResource.defaultParams = config.defaultParams;
|
@@ -171,10 +185,11 @@
|
|
171
185
|
result = [];
|
172
186
|
|
173
187
|
angular.forEach(response.data, function (value) {
|
174
|
-
result.push(new RailsResource(value));
|
188
|
+
result.push(angular.extend(new RailsResource(), value));
|
175
189
|
});
|
176
190
|
} else if (angular.isObject(response.data)) {
|
177
|
-
result = new RailsResource(response.data);
|
191
|
+
result = angular.extend(new RailsResource(), response.data);
|
192
|
+
|
178
193
|
} else {
|
179
194
|
result = response.data;
|
180
195
|
}
|
@@ -221,7 +236,7 @@
|
|
221
236
|
* @param context
|
222
237
|
* @return {string}
|
223
238
|
*/
|
224
|
-
RailsResource.resourceUrl = function (context) {
|
239
|
+
RailsResource.$url = RailsResource.resourceUrl = function (context) {
|
225
240
|
if (!angular.isObject(context)) {
|
226
241
|
context = {id: context};
|
227
242
|
}
|
@@ -229,12 +244,20 @@
|
|
229
244
|
return RailsResource.url(context || {});
|
230
245
|
};
|
231
246
|
|
247
|
+
RailsResource.$get = function (url, queryParams) {
|
248
|
+
return RailsResource.processResponse($http.get(url, RailsResource.getHttpConfig(queryParams)));
|
249
|
+
};
|
250
|
+
|
232
251
|
RailsResource.query = function (queryParams, context) {
|
233
|
-
return RailsResource
|
252
|
+
return RailsResource.$get(RailsResource.resourceUrl(context), queryParams);
|
234
253
|
};
|
235
254
|
|
236
255
|
RailsResource.get = function (context, queryParams) {
|
237
|
-
return RailsResource
|
256
|
+
return RailsResource.$get(RailsResource.resourceUrl(context), queryParams);
|
257
|
+
};
|
258
|
+
|
259
|
+
RailsResource.prototype.$url = function() {
|
260
|
+
return RailsResource.resourceUrl(this);
|
238
261
|
};
|
239
262
|
|
240
263
|
RailsResource.prototype.processResponse = function (promise) {
|
@@ -256,21 +279,44 @@
|
|
256
279
|
}));
|
257
280
|
};
|
258
281
|
|
282
|
+
angular.forEach(['post', 'put', 'patch'], function (method) {
|
283
|
+
RailsResource['$' + method] = function (url, data) {
|
284
|
+
var config;
|
285
|
+
// clone so we can manipulate w/o modifying the actual instance
|
286
|
+
data = RailsResource.transformData(angular.copy(data, {}));
|
287
|
+
config = angular.extend({method: method, url: url, data: data}, RailsResource.getHttpConfig());
|
288
|
+
return RailsResource.processResponse($http(config));
|
289
|
+
};
|
290
|
+
|
291
|
+
RailsResource.prototype['$' + method] = function (url) {
|
292
|
+
var data, config;
|
293
|
+
// clone so we can manipulate w/o modifying the actual instance
|
294
|
+
data = RailsResource.transformData(angular.copy(this, {}));
|
295
|
+
config = angular.extend({method: method, url: url, data: data}, RailsResource.getHttpConfig());
|
296
|
+
return this.processResponse($http(config));
|
297
|
+
|
298
|
+
};
|
299
|
+
});
|
300
|
+
|
259
301
|
RailsResource.prototype.create = function () {
|
260
|
-
|
261
|
-
var data = RailsResource.transformData(angular.copy(this, {}));
|
262
|
-
return this.processResponse($http.post(RailsResource.resourceUrl(this), data, RailsResource.getHttpConfig()));
|
302
|
+
return this.$post(this.$url(), this);
|
263
303
|
};
|
264
304
|
|
265
305
|
RailsResource.prototype.update = function () {
|
266
|
-
|
267
|
-
|
268
|
-
|
306
|
+
return this.$put(this.$url(), this);
|
307
|
+
};
|
308
|
+
|
309
|
+
RailsResource['$delete'] = function (url) {
|
310
|
+
return RailsResource.processResponse($http['delete'](url, RailsResource.getHttpConfig()));
|
311
|
+
};
|
312
|
+
|
313
|
+
RailsResource.prototype['$delete'] = function (url) {
|
314
|
+
return this.processResponse($http['delete'](url, RailsResource.getHttpConfig()));
|
269
315
|
};
|
270
316
|
|
271
317
|
//using ['delete'] instead of .delete for IE7/8 compatibility
|
272
318
|
RailsResource.prototype.remove = RailsResource.prototype['delete'] = function () {
|
273
|
-
return this
|
319
|
+
return this.$delete(this.$url());
|
274
320
|
};
|
275
321
|
|
276
322
|
return RailsResource;
|
@@ -278,4 +324,4 @@
|
|
278
324
|
|
279
325
|
return railsResourceFactory;
|
280
326
|
}]);
|
281
|
-
}());
|
327
|
+
}());
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: angularjs-rails-resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-04-
|
13
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: A small AngularJS add-on for integrating with Rails via JSON more easily.
|
16
16
|
email:
|
@@ -35,11 +35,18 @@ files:
|
|
35
35
|
- test/lib/angular/angular-bootstrap.js
|
36
36
|
- test/lib/angular/angular-cookies.js
|
37
37
|
- test/lib/angular/angular-loader.js
|
38
|
+
- test/lib/angular/angular-locale_en-us.js
|
39
|
+
- test/lib/angular/angular-mobile.js
|
38
40
|
- test/lib/angular/angular-mocks.js
|
39
41
|
- test/lib/angular/angular-resource.js
|
40
42
|
- test/lib/angular/angular-sanitize.js
|
43
|
+
- test/lib/angular/angular-scenario.js
|
41
44
|
- test/lib/angular/angular.js
|
45
|
+
- test/unit/angularjs/rails/fieldRenamingSpec.js
|
46
|
+
- test/unit/angularjs/rails/httpSettingsSpec.js
|
47
|
+
- test/unit/angularjs/rails/nestedUrlsSpec.js
|
42
48
|
- test/unit/angularjs/rails/resourceSpec.js
|
49
|
+
- test/unit/angularjs/rails/rootWrappingSpec.js
|
43
50
|
- test/unit/helpers/spec_helper.js
|
44
51
|
- vendor/assets/javascripts/angularjs/rails/resource.js
|
45
52
|
homepage: https://github.com/finelineprototyping/angularjs-rails-resource
|
@@ -71,9 +78,16 @@ test_files:
|
|
71
78
|
- test/lib/angular/angular-bootstrap.js
|
72
79
|
- test/lib/angular/angular-cookies.js
|
73
80
|
- test/lib/angular/angular-loader.js
|
81
|
+
- test/lib/angular/angular-locale_en-us.js
|
82
|
+
- test/lib/angular/angular-mobile.js
|
74
83
|
- test/lib/angular/angular-mocks.js
|
75
84
|
- test/lib/angular/angular-resource.js
|
76
85
|
- test/lib/angular/angular-sanitize.js
|
86
|
+
- test/lib/angular/angular-scenario.js
|
77
87
|
- test/lib/angular/angular.js
|
88
|
+
- test/unit/angularjs/rails/fieldRenamingSpec.js
|
89
|
+
- test/unit/angularjs/rails/httpSettingsSpec.js
|
90
|
+
- test/unit/angularjs/rails/nestedUrlsSpec.js
|
78
91
|
- test/unit/angularjs/rails/resourceSpec.js
|
92
|
+
- test/unit/angularjs/rails/rootWrappingSpec.js
|
79
93
|
- test/unit/helpers/spec_helper.js
|