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.
@@ -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
- angular.extend(this, value || {});
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.url = urlBuilder(config.url);
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.processResponse($http.get(RailsResource.resourceUrl(context), RailsResource.getHttpConfig(queryParams)));
252
+ return RailsResource.$get(RailsResource.resourceUrl(context), queryParams);
234
253
  };
235
254
 
236
255
  RailsResource.get = function (context, queryParams) {
237
- return RailsResource.processResponse($http.get(RailsResource.resourceUrl(context), RailsResource.getHttpConfig(queryParams)));
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
- // clone so we can manipulate w/o modifying our instance
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
- // clone so we can manipulate w/o modifying our instance
267
- var data = RailsResource.transformData(angular.copy(this, {}));
268
- return this.processResponse($http.put(RailsResource.resourceUrl(this), data, RailsResource.getHttpConfig()));
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.processResponse($http['delete'](RailsResource.resourceUrl(this), RailsResource.getHttpConfig()));
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
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-10 00:00:00.000000000 Z
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