angularjs-rails-resource 0.2.5 → 1.0.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -2
- data/EXAMPLES.md +116 -116
- data/README.md +89 -38
- data/angularjs-rails-resource.js +157 -114
- data/angularjs-rails-resource.min.js +2 -2
- data/angularjs-rails-resource.zip +0 -0
- data/bower.json +1 -1
- data/lib/angularjs-rails-resource/version.rb +1 -1
- data/package.json +5 -5
- data/test/unit/angularjs/rails/resourceProviderSpec.js +12 -12
- data/test/unit/angularjs/rails/resourceSerializerSpec.js +1 -1
- data/test/unit/angularjs/rails/resourceSpec.js +99 -8
- data/test/unit/angularjs/rails/rootWrappingSpec.js +1 -1
- data/test/unit/angularjs/rails/serializationSpec.js +0 -16
- data/vendor/assets/javascripts/angularjs/rails/resource/resource.js +149 -97
- data/vendor/assets/javascripts/angularjs/rails/resource/serialization.js +6 -15
- data/vendor/assets/javascripts/angularjs/rails/resource/utils/url_builder.js +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6949c58b7d5354dcb4b311248088c8f831c958c6
|
4
|
+
data.tar.gz: da054ff28d6285541d7f0e5a1deb23b3b83fb91c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e2c661c2fcd2df398eeeb071c607f39e258f53e28bd5e9c9670616182a7a984ecb786ba91b2a680fc71299479f6e3a97e6449a6a8bd759743c59e36452bdee3
|
7
|
+
data.tar.gz: f63c1513e65a2254390bc3205eaeb0541b2f35f6c24669f8d52b140f2a4ff9f5fc8ea9b6bd641781d5f66fdc9ba1e09497adc73148163b7f056766136c32f69b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
<a name="1.0.0"></a>
|
2
|
+
# 1.0.0
|
3
|
+
## Bug Fixes
|
4
|
+
|
5
|
+
## Features
|
6
|
+
- Added <code>configure</code> to allow changing configuration options after the resource has been initially configured.
|
7
|
+
|
8
|
+
## Breaking Changes
|
9
|
+
- <code>railsResourceFactoryProvider</code> settings have been moved to <code>RailsResourceProvider</code>
|
10
|
+
- <code>wrapData</code> config option has been renamed <code>rootWrapping</code>
|
11
|
+
- All resource settings are now stored under the <code>config</code> property on the resource and should be modified using the <code>configure</code> function.
|
12
|
+
- The following resource settings have been renamed:
|
13
|
+
- <code>enableRootWrapping</code> was renamed <code>rootWrapping</code>
|
14
|
+
- <code>rootName</code> was renamed <code>name</code>
|
15
|
+
- <code>rootPluralName</code> was renamed <code>pluralName</code>
|
16
|
+
|
1
17
|
<a name="0.2.3"></a>
|
2
18
|
# 0.2.3
|
3
19
|
## Bug Fixes
|
@@ -25,14 +41,14 @@
|
|
25
41
|
- Removed default transformers and interceptors
|
26
42
|
- railsFieldRenamingTransformer and railsFieldRenamingInterceptor have been removed completely and replaced by the serializers
|
27
43
|
- railsRootWrappingTransformer/Interceptor are no longer configured by the transformers/interceptors configuration option and is instead
|
28
|
-
configured by the <code>
|
44
|
+
configured by the <code>wrapData</code> option.
|
29
45
|
- Interceptors added using <code>beforeRequest</code> are run before any deserialization so the fields names have not been camelized.
|
30
46
|
|
31
47
|
## Bug Fixes
|
32
48
|
|
33
49
|
## Features
|
34
50
|
- Added serializers to replace old field renaming logic and to give users a lot more flexibility in customizing the (de)serialization process
|
35
|
-
- Added <code>
|
51
|
+
- Added <code>rootWrapping</code> configuration option to be able to turn off root wrapping instead
|
36
52
|
- Added path option to <code>$url</code> methods to make it easier to construct a nested url.
|
37
53
|
|
38
54
|
<a name="0.1.7"></a>
|
data/EXAMPLES.md
CHANGED
@@ -7,74 +7,74 @@ For example, suppose we have an Author that serializes all of the books that aut
|
|
7
7
|
are a nested resource that allows us to more easily perform updates against those books without having to worry about creating
|
8
8
|
a resource instance for the book.
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
10
|
+
angular.module('book.services', ['rails']);
|
11
|
+
|
12
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', function (railsResourceFactory) {
|
13
|
+
return railsResourceFactory({url: '/books', name: 'book'});
|
14
|
+
}]);
|
15
|
+
|
16
|
+
angular.module('book.services').factory('Author', ['railsResourceFactory', 'railsSerializer', function (railsResourceFactory, railsSerializer) {
|
17
|
+
return railsResourceFactory({
|
18
|
+
url: '/authors',
|
19
|
+
name: 'author',
|
20
|
+
serializer: railsSerializer(function () {
|
21
|
+
this.resource('books', 'Book');
|
22
|
+
});
|
23
|
+
});
|
24
|
+
}]);
|
25
|
+
|
26
|
+
angular.module('book.controllers').controller('AuthorCtrl', ['$scope', 'Author', function ($scope, Author) {
|
27
|
+
$scope.author = Author.get(123);
|
28
|
+
|
29
|
+
// allow the view to trigger an update to a book from $scope.author.books
|
30
|
+
$scope.updateBook = function (book) {
|
31
|
+
book.update();
|
32
|
+
}
|
33
|
+
}]);
|
34
34
|
|
35
35
|
# Nested attributes
|
36
36
|
While we don't have logic for full nested attributes support, the new serializer does allow you to specify which fields
|
37
37
|
should be passed with the <code>_attributes</code> suffix.
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', 'railsSerializer', function (railsResourceFactory, railsSerializer) {
|
40
|
+
return railsResourceFactory({
|
41
|
+
url: '/books',
|
42
|
+
name: 'book',
|
43
|
+
serializer: railsSerializer(function () {
|
44
|
+
this.nestedAttribute('author');
|
45
|
+
});
|
46
|
+
});
|
47
|
+
}]);
|
48
48
|
|
49
49
|
# Excluding attributes from serialization
|
50
50
|
Sometimes you don't want to serialize certain fields when updating an object. Take for instance the case of the author on a book.
|
51
51
|
We know that we don't accept nested attributes for the author on the server so we want to exclude it from the JSON to reduce
|
52
52
|
the amount of data being sent to the server.
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', 'railsSerializer', function (railsResourceFactory railsSerializer) {
|
55
|
+
return railsResourceFactory({
|
56
|
+
url: '/books',
|
57
|
+
name: 'book',
|
58
|
+
serializer: railsSerializer(function () {
|
59
|
+
this.exclude('author');
|
60
|
+
});
|
61
|
+
});
|
62
|
+
}]);
|
63
63
|
|
64
64
|
|
65
65
|
# Only allowing specific attributes for serialization
|
66
66
|
You can also be very restrictive and only include specific attributes that you want to send to the server. All other attribtues
|
67
67
|
would be excluded by default.
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', 'railsSerializer', function (railsResourceFactory. railsSerializer) {
|
70
|
+
return railsResourceFactory({
|
71
|
+
url: '/books',
|
72
|
+
name: 'book',
|
73
|
+
serializer: railsSerializer(function () {
|
74
|
+
this.only('id', 'isbn', 'publicationDate');
|
75
|
+
});
|
76
|
+
});
|
77
|
+
}]);
|
78
78
|
|
79
79
|
|
80
80
|
# Adding custom methods to a resource
|
@@ -84,61 +84,61 @@ You can add additional "class" or "instance" methods by modifying the resource r
|
|
84
84
|
For instance, if you wanted to add a method that would search for Books by the title without having to construct the query params
|
85
85
|
each time you could add a new <code>findByTitle</code> class function.
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
87
|
+
angular.module('book.services', ['rails']);
|
88
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', function (railsResourceFactory) {
|
89
|
+
var resource = railsResourceFactory({url: '/books', name: 'book'});
|
90
|
+
resource.findByTitle = function (title) {
|
91
|
+
return resource.query({title: title});
|
92
|
+
};
|
93
|
+
return resource;
|
94
|
+
}]);
|
95
|
+
|
96
|
+
angular.module('book.controllers').controller('BookShelfCtrl', ['$scope', 'Book', function ($scope, Book) {
|
97
|
+
$scope.searching = true;
|
98
|
+
// Find all books matching the title
|
99
|
+
$scope.books = Book.findByTitle({title: title});
|
100
|
+
$scope.books.then(function(results) {
|
101
|
+
$scope.searching = false;
|
102
|
+
}, function (error) {
|
103
|
+
$scope.searching = false;
|
104
|
+
});
|
105
|
+
}]);
|
106
106
|
|
107
107
|
## Get related object
|
108
108
|
You can also add additional methods on the object prototype chain so all instances of the resource have that function available.
|
109
109
|
The following example exposes a <code>getAuthor</code> instance method that would be accessible on all Book instances.
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
111
|
+
angular.module('book.services', ['rails']);
|
112
|
+
angular.module('book.services').factory('Author', ['railsResourceFactory', function (railsResourceFactory) {
|
113
|
+
return railsResourceFactory({url: '/authors', name: 'author'});
|
114
|
+
}]);
|
115
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', 'Author', function (railsResourceFactory, Author) {
|
116
|
+
var resource = railsResourceFactory({url: '/books', name: 'book'});
|
117
|
+
resource.prototype.getAuthor = function () {
|
118
|
+
return Author.get(this.authorId);
|
119
|
+
};
|
120
|
+
}]);
|
121
|
+
angular.module('book.controllers').controller('BookShelfCtrl', ['$scope', 'Book', function ($scope, Book) {
|
122
|
+
$scope.getAuthorDetails = function (book) {
|
123
|
+
$scope.author = book.getAuthor();
|
124
|
+
};
|
125
|
+
}]);
|
126
126
|
|
127
127
|
## Nested URL
|
128
128
|
Or say you instead had a nested "references" service call that returned a list of referenced books for a given book instance. In that case you can add your own addition method that calls $http.get and then
|
129
129
|
passes the resulting promise to the processResponse method which will perform the same transformations and handling that the get or query would use.
|
130
130
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
131
|
+
angular.module('book.services', ['rails']);
|
132
|
+
angular.module('book.services').factory('Book', ['railsResourceFactory', '$http', function (railsResourceFactory, $http) {
|
133
|
+
var resource = railsResourceFactory({url: '/books', name: 'book'});
|
134
|
+
resource.prototype.getReferences = function () {
|
135
|
+
var self = this;
|
136
|
+
return resource.$get(self.$url('references'))).then(function (references) {
|
137
|
+
self.references = references;
|
138
|
+
return self.references;
|
139
|
+
});
|
140
|
+
};
|
141
|
+
}]);
|
142
142
|
|
143
143
|
# Specifying Transformer
|
144
144
|
Transformers can be specified by an array of transformers in the configuration options passed to railsResourceFactory.
|
@@ -147,25 +147,25 @@ a function returned by a factory if you want to share a transformer across multi
|
|
147
147
|
|
148
148
|
Both of these examples can be accomplished using the serializers now.
|
149
149
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
150
|
+
angular.module('test').factory('excludePrivateKeysTransformer', function () {
|
151
|
+
return function (data) {
|
152
|
+
angular.forEach(data, function (value, key) {
|
153
|
+
if (key[0] === '_') {
|
154
|
+
delete data[key];
|
155
|
+
}
|
156
|
+
});
|
157
|
+
});
|
158
|
+
});
|
159
|
+
|
160
|
+
angular.module('test').factory('Book', function (railsResourceFactory, excludePrivateKeysTransformer) {
|
161
|
+
var Book = railsResourceFactory({url: '/books', name: 'book'});
|
162
|
+
Book.beforeRequest(excludePrivateKeysTransformer);
|
163
|
+
Book.beforeRequest(function (data) {
|
164
|
+
data['release_date'] = data['publicationDate'];
|
165
|
+
delete data['publicationDate'];
|
166
|
+
});
|
167
|
+
|
168
|
+
return Book;
|
169
|
+
});
|
170
170
|
|
171
171
|
|
data/README.md
CHANGED
@@ -3,35 +3,59 @@
|
|
3
3
|
|
4
4
|
A resource factory inspired by $resource from AngularJS and [Misko's recommendation](http://stackoverflow.com/questions/11850025/recommended-way-of-getting-data-from-the-server).
|
5
5
|
|
6
|
-
|
6
|
+
## Differences from $resource
|
7
|
+
This library is not a drop in replacement for $resource. There are significant differences that you should be aware of and
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
1. <code>get</code> and <code>query</code> return [$q promises](http://docs.angularjs.org/api/ng.$q), not an instance or array that will be populated. To gain access to the results you
|
10
|
+
should use the promise <code>then</code> function.
|
11
|
+
2. By default we perform root wrapping and unwrapping (if wrapped) when communicating with the server.
|
12
|
+
3. By default we convert attribute names between underscore and camel case.
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
models where you will have a controller that has your basic index (query), get, create, update, delete functionality.
|
14
|
+
## FAQs
|
15
|
+
### How come I can't iterate the array returned from query?
|
16
|
+
We don't return an array. We return promises not arrays or objects that get filled in later.
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
If you need access to the array in your JS code you can use the promise <code>then</code> function:
|
19
|
+
````javascript
|
20
|
+
Book.query({title: 'Moby Dick'}).then(function (books) {
|
21
|
+
$scope.books = books;
|
22
|
+
});
|
23
|
+
````
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
### I like underscores, how can I turn off the name conversion?
|
26
|
+
You can inject the <code>railsSerializerProvider</code> into your application config function and override the <code>underscore</code>
|
27
|
+
and <code>camelize</code> functions:
|
28
|
+
````javascript
|
29
|
+
angular.module('app').config(function (railsSerializerFactory) {
|
30
|
+
railsSerializerProvider.
|
31
|
+
underscore(function (name) {
|
32
|
+
return name;
|
33
|
+
}).
|
34
|
+
camelize(function (name) {
|
35
|
+
return name;
|
36
|
+
});
|
37
|
+
});
|
38
|
+
````
|
24
39
|
|
25
40
|
## Installation
|
26
|
-
|
27
|
-
Add this line to your application's Gemfile:
|
41
|
+
Add this line to your application's Gemfile to use the latest stable version:
|
28
42
|
```ruby
|
29
|
-
gem 'angularjs-rails-resource', '~> 0.2.
|
43
|
+
gem 'angularjs-rails-resource', '~> 0.2.3'
|
30
44
|
```
|
45
|
+
|
31
46
|
Include the javascript somewhere in your asset pipeline:
|
32
47
|
```javascript
|
33
48
|
//= require angularjs/rails/resource
|
34
49
|
```
|
50
|
+
## Branching and Versioning
|
51
|
+
As much as possible we will try to adhere to the [SemVer](http://semver.org/) guidelines on release numbering.
|
52
|
+
|
53
|
+
The master branch may contain work in progress and should not be considered stable.
|
54
|
+
|
55
|
+
Release branches should remain stable but it is always best to rely on the ruby gem release versions as the most stable versions.
|
56
|
+
|
57
|
+
## Changes
|
58
|
+
Make sure to check the [CHANGELOG](CHANGELOG.md) for any breaking changes between releases.
|
35
59
|
|
36
60
|
## Dependencies
|
37
61
|
Since this is an [AngularJS](http://angularjs.org) module it of course depends on that but more specifically the it depends on the following AngularJS services:
|
@@ -44,8 +68,7 @@ Since this is an [AngularJS](http://angularjs.org) module it of course depends o
|
|
44
68
|
## Usage
|
45
69
|
There are a lot of different ways that you can use the resources and we try not to force you into any specific pattern
|
46
70
|
|
47
|
-
There are more examples available in [EXAMPLES.md](EXAMPLES.md).
|
48
|
-
at [Employee Training Tracker](https://github.com/FineLinePrototyping/employee-training-tracker) application.
|
71
|
+
There are more examples available in [EXAMPLES.md](EXAMPLES.md).
|
49
72
|
|
50
73
|
|
51
74
|
### Basic Example
|
@@ -78,6 +101,7 @@ angular.module('book.controllers').controller('BookShelfCtrl', ['$scope', 'Book'
|
|
78
101
|
new Book({title: 'Gardens of the Moon', author: 'Steven Erikson', isbn: '0-553-81957-7'}).create();
|
79
102
|
}]);
|
80
103
|
```
|
104
|
+
|
81
105
|
### Serializer
|
82
106
|
When defining a resource, you can pass a custom [serializer](#serializers) using the <code>serializer</code> configuration option.
|
83
107
|
```javascript
|
@@ -113,17 +137,47 @@ Book = railsResourceFactory({
|
|
113
137
|
|
114
138
|
```
|
115
139
|
## Resource Creation
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
to
|
140
|
+
There are multiple ways that you can set up new resources in your application.
|
141
|
+
|
142
|
+
### railsResourceFactory
|
143
|
+
Similar to $resource, we provide a <code>railsResourceFactory(config)</code> function that takes a config object with the configuration
|
144
|
+
settings for the new resource. The factory function returns a new class that is extended from RailsResource.
|
145
|
+
|
146
|
+
### RailsResource extension
|
147
|
+
We also expose the RailsResource as base class that you can extend to create your own resource classes. Extending the RailsResource class
|
148
|
+
directly gives you a bit more flexibility to add custom constructor code. There are probably ten different ways to extend the class but
|
149
|
+
the two that we intend to be used are through CoffeeScript or through the same logic that the factory function uses.
|
120
150
|
|
151
|
+
#### CoffeeScript
|
152
|
+
````coffeescript
|
153
|
+
class Book extends RailsResource
|
154
|
+
@configure url: '/books', name: 'book'
|
155
|
+
|
156
|
+
class Encyclopedia extends Book
|
157
|
+
@configure url: '/encyclopedias', name: 'encyclopedia'
|
158
|
+
````
|
159
|
+
|
160
|
+
#### JavaScript
|
161
|
+
Since the purpose of exposing the RailsResource was to allow for CoffeeScript users to create classes from it the JavaScript way
|
162
|
+
is basically just the same as the generated CoffeeScript code. The <code>RailsResource.extend</code> function is a modification
|
163
|
+
of the <code>__extends</code> function that CoffeeScript generates.
|
164
|
+
|
165
|
+
````javascript
|
166
|
+
function Resource() {
|
167
|
+
Resource.__super__.constructor.apply(this, arguments);
|
168
|
+
}
|
169
|
+
|
170
|
+
RailsResource.extend(Resource);
|
171
|
+
Resource.configure(config);
|
172
|
+
````
|
121
173
|
|
122
174
|
### Config Options
|
123
|
-
|
175
|
+
|
176
|
+
The following configuration options are available for customizing resources. Each of the configuration options can be passed as part of an object
|
177
|
+
to the <code>railsResourceFactory</code> function or to the resource's <code>configure</code> function.
|
124
178
|
|
125
179
|
* **url** - This is the url of the service. See [Resource URLs](#resource-urls) below for more information.
|
126
|
-
* **
|
180
|
+
* **rootWrapping** - (Default: true) Turns on/off root wrapping on JSON (de)serialization.
|
127
181
|
* **name** - This is the name used for root wrapping when dealing with singular instances.
|
128
182
|
* **pluralName** *(optional)* - If specified this name will be used for unwrapping array results. If not specified then the serializer's [pluralize](#serializers) method is used to calculate
|
129
183
|
the plural name from the singular name.
|
@@ -133,6 +187,7 @@ The following options are available for the config object passed to the factory
|
|
133
187
|
* **Content-Type** - application/json
|
134
188
|
* **defaultParams** *(optional)* - If the resource expects a default set of query params on every call you can specify them here.
|
135
189
|
* **updateMethod** *(optional)* - Allows overriding the default HTTP method (PUT) used for update. Valid values are "post", "put", or "patch".
|
190
|
+
* **serializer** *(optional)* - Allows specifying a custom [serializer](#serializers) allow configuring custom serialization options.
|
136
191
|
* **requestTransformers** *(optional) - See [Transformers / Interceptors](#transformers--interceptors)
|
137
192
|
* **responseInterceptors** *(optional)* - See [Transformers / Interceptors](#transformers--interceptors)
|
138
193
|
* **afterResponseInterceptors** *(optional)* - See [Transformers / Interceptors](#transformers--interceptors)
|
@@ -141,11 +196,11 @@ The following options are available for the config object passed to the factory
|
|
141
196
|
For example, you should specify "publishingCompany" and "publishingCompanies" instead of "publishing_company" and "publishing_companies".
|
142
197
|
|
143
198
|
### Provider Configuration
|
144
|
-
<code>
|
199
|
+
<code>RailsResource</code> can be injected as <code>RailsResourceProvider</code> into your app's config method to configure defaults for all the resources application-wide.
|
145
200
|
The individual resource configuration takes precedence over application-wide default configuration values.
|
146
201
|
Each configuration option listed is exposed as a method on the provider that takes the configuration value as the parameter and returns the provider to allow method chaining.
|
147
202
|
|
148
|
-
*
|
203
|
+
* rootWrapping - {function(boolean):railsSerializerProvider}
|
149
204
|
* httpConfig - {function(object):railsSerializerProvider}
|
150
205
|
* defaultParams - {function(object):railsSerializerProvider}
|
151
206
|
* updateMethod - {function(boolean):railsSerializerProvider}
|
@@ -153,8 +208,8 @@ Each configuration option listed is exposed as a method on the provider that tak
|
|
153
208
|
For example, to turn off the root wrapping application-wide and set the update method to PATCH:
|
154
209
|
|
155
210
|
````javascript
|
156
|
-
app.config(function (
|
157
|
-
|
211
|
+
app.config(function (RailsResourceProvider) {
|
212
|
+
RailsResourceProvider.rootWrapping(false).updateMethod('patch');
|
158
213
|
);
|
159
214
|
````
|
160
215
|
|
@@ -184,12 +239,16 @@ that if response.data is reassigned that there's still a pointer to the original
|
|
184
239
|
|
185
240
|
|
186
241
|
## Resource Methods
|
187
|
-
|
242
|
+
RailsResources have the following class methods available.
|
188
243
|
|
189
244
|
### Class Methods
|
190
245
|
* Constructor(data) - The Resource object can act as a constructor function for use with the JavaScript <code>new</code> keyword.
|
191
246
|
* **data** {object} (optional) - Optional data to set on the new instance
|
192
247
|
|
248
|
+
* configure(options) - Change one or more configuration option for a resource.
|
249
|
+
|
250
|
+
* setUrl(url) - Updates the url for the resource, same as calling <code>configure({url: url})</code>
|
251
|
+
|
193
252
|
* $url(context, path) - Returns the resource URL using the given context with the optional path appended if provided.
|
194
253
|
* **context** {*} - The context to use when building the url. See [Resource URLs](#resource-urls) above for more information.
|
195
254
|
* **path** {string} (optional) - A path to append to the resource's URL.
|
@@ -314,14 +373,6 @@ Each configuration option listed is exposed as a method on the provider that tak
|
|
314
373
|
* pluralize - {function(fn):railsSerializerProvider}
|
315
374
|
* exclusionMatchers - {function(matchers):railsSerializerProvider}
|
316
375
|
|
317
|
-
For example, to turn off the key renaming from underscore to camel case and vice versa you would do:
|
318
|
-
|
319
|
-
````javascript
|
320
|
-
app.config(function (railsSerializerProvider) {
|
321
|
-
railsSerializerProvider.underscore(function (value) { return value; })
|
322
|
-
.camelize(function (value) { return value; });
|
323
|
-
);
|
324
|
-
````
|
325
376
|
|
326
377
|
#### Customization API
|
327
378
|
The customizer function passed to the railsSerializer has available to it the following methods for altering the serialization of an object. None of these methods support nested attribute names (e.g. <code>'books.publicationDate'</code>), in order to customize the serialization of the <code>books</code> objects you would need to specify a custom serializer for the <code>books</code> attribute.
|