angularjs-rails-resource 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|