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.
@@ -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