restpack_serializer 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -22
- data/lib/restpack_serializer/serializable/attributes.rb +1 -1
- data/lib/restpack_serializer/serializable/paging.rb +1 -1
- data/lib/restpack_serializer/serializable/side_loading.rb +2 -2
- data/lib/restpack_serializer/version.rb +1 -1
- data/spec/serializable/paging_spec.rb +8 -8
- data/spec/serializable/serializer_spec.rb +3 -3
- data/spec/serializable/side_loading/side_loading_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c406b9af62170a52083627f373ffdc67a1942140
|
4
|
+
data.tar.gz: 7b73768866438375cf7e1b870e5da680ef60b363
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddd06300644271b871ace5bf86921c284145361fe7d3f5e3c334fedf7e8475f10afaaf74299e628a21320706229ae56927c7a20a404b414c8d8aed53a26d2fd5
|
7
|
+
data.tar.gz: a92f904c22955987d9415c772e61b7b0bccbffb8864d102d3a1d6b3d96d2b9af431eb4dc79e4d29b6bf6d756a51d80d687fb4b300499243380b27501ca0d401c
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ end
|
|
42
42
|
"title": "Kid A",
|
43
43
|
"year": 2000,
|
44
44
|
"artist_id": 1,
|
45
|
-
"href": "/albums/1
|
45
|
+
"href": "/albums/1"
|
46
46
|
}
|
47
47
|
```
|
48
48
|
|
@@ -62,7 +62,7 @@ class AlbumsController < ApplicationController
|
|
62
62
|
end
|
63
63
|
```
|
64
64
|
|
65
|
-
These endpoint will live at URLs such as `/albums
|
65
|
+
These endpoint will live at URLs such as `/albums` and `/albums/142857`:
|
66
66
|
|
67
67
|
* http://restpack-serializer-sample.herokuapp.com/albums.json
|
68
68
|
* http://restpack-serializer-sample.herokuapp.com/albums/4.json
|
@@ -90,7 +90,7 @@ http://restpack-serializer-sample.herokuapp.com/songs.json?page=2&page_size=3 yi
|
|
90
90
|
{
|
91
91
|
"id": "4",
|
92
92
|
"title": "How to Dissapear Completely",
|
93
|
-
"href": "/songs/4
|
93
|
+
"href": "/songs/4",
|
94
94
|
"links": {
|
95
95
|
"artist": "1",
|
96
96
|
"album": "1"
|
@@ -99,7 +99,7 @@ http://restpack-serializer-sample.herokuapp.com/songs.json?page=2&page_size=3 yi
|
|
99
99
|
{
|
100
100
|
"id": "5",
|
101
101
|
"title": "Treefingers",
|
102
|
-
"href": "/songs/5
|
102
|
+
"href": "/songs/5",
|
103
103
|
"links": {
|
104
104
|
"artist": "1",
|
105
105
|
"album": "1"
|
@@ -108,7 +108,7 @@ http://restpack-serializer-sample.herokuapp.com/songs.json?page=2&page_size=3 yi
|
|
108
108
|
{
|
109
109
|
"id": "6",
|
110
110
|
"title": "Optimistic",
|
111
|
-
"href": "/songs/6
|
111
|
+
"href": "/songs/6",
|
112
112
|
"links": {
|
113
113
|
"artist": "1",
|
114
114
|
"album": "1"
|
@@ -124,17 +124,17 @@ http://restpack-serializer-sample.herokuapp.com/songs.json?page=2&page_size=3 yi
|
|
124
124
|
"page_count": 14,
|
125
125
|
"previous_page": 1,
|
126
126
|
"next_page": 3,
|
127
|
-
"previous_href": "/api/v1/songs
|
128
|
-
"next_href": "/api/v1/songs
|
127
|
+
"previous_href": "/api/v1/songs?page_size=3",
|
128
|
+
"next_href": "/api/v1/songs?page=3&page_size=3"
|
129
129
|
}
|
130
130
|
},
|
131
131
|
"links": {
|
132
132
|
"songs.artist": {
|
133
|
-
"href": "/artists/{songs.artist}
|
133
|
+
"href": "/artists/{songs.artist}",
|
134
134
|
"type": "artists"
|
135
135
|
},
|
136
136
|
"songs.album": {
|
137
|
-
"href": "/albums/{songs.album}
|
137
|
+
"href": "/albums/{songs.album}",
|
138
138
|
"type": "albums"
|
139
139
|
}
|
140
140
|
}
|
@@ -143,8 +143,8 @@ http://restpack-serializer-sample.herokuapp.com/songs.json?page=2&page_size=3 yi
|
|
143
143
|
|
144
144
|
URL Templates to related data are included in the `links` element. These can be used to construct URLs such as:
|
145
145
|
|
146
|
-
* /artists/1
|
147
|
-
* /albums/1
|
146
|
+
* /artists/1
|
147
|
+
* /albums/1
|
148
148
|
|
149
149
|
## Side-loading
|
150
150
|
|
@@ -178,7 +178,7 @@ which yields:
|
|
178
178
|
"id": "1",
|
179
179
|
"title": "Kid A",
|
180
180
|
"year": 2000,
|
181
|
-
"href": "/albums/1
|
181
|
+
"href": "/albums/1",
|
182
182
|
"links": {
|
183
183
|
"artist": "1"
|
184
184
|
}
|
@@ -187,7 +187,7 @@ which yields:
|
|
187
187
|
"id": "2",
|
188
188
|
"title": "Amnesiac",
|
189
189
|
"year": 2001,
|
190
|
-
"href": "/albums/2
|
190
|
+
"href": "/albums/2",
|
191
191
|
"links": {
|
192
192
|
"artist": "1"
|
193
193
|
}
|
@@ -196,7 +196,7 @@ which yields:
|
|
196
196
|
"id": "3",
|
197
197
|
"title": "Murder Ballads",
|
198
198
|
"year": 1996,
|
199
|
-
"href": "/albums/3
|
199
|
+
"href": "/albums/3",
|
200
200
|
"links": {
|
201
201
|
"artist": "2"
|
202
202
|
}
|
@@ -205,7 +205,7 @@ which yields:
|
|
205
205
|
"id": "4",
|
206
206
|
"title": "Curtains",
|
207
207
|
"year": 2005,
|
208
|
-
"href": "/albums/4
|
208
|
+
"href": "/albums/4",
|
209
209
|
"links": {
|
210
210
|
"artist": "3"
|
211
211
|
}
|
@@ -228,19 +228,19 @@ which yields:
|
|
228
228
|
},
|
229
229
|
"links": {
|
230
230
|
"albums.songs": {
|
231
|
-
"href": "/songs
|
231
|
+
"href": "/songs?album_id={albums.id}",
|
232
232
|
"type": "songs"
|
233
233
|
},
|
234
234
|
"albums.artist": {
|
235
|
-
"href": "/artists/{albums.artist}
|
235
|
+
"href": "/artists/{albums.artist}",
|
236
236
|
"type": "artists"
|
237
237
|
},
|
238
238
|
"artists.albums": {
|
239
|
-
"href": "/albums
|
239
|
+
"href": "/albums?artist_id={artists.id}",
|
240
240
|
"type": "albums"
|
241
241
|
},
|
242
242
|
"artists.songs": {
|
243
|
-
"href": "/songs
|
243
|
+
"href": "/songs?artist_id={artists.id}",
|
244
244
|
"type": "songs"
|
245
245
|
}
|
246
246
|
},
|
@@ -249,19 +249,19 @@ which yields:
|
|
249
249
|
"id": "1",
|
250
250
|
"name": "Radiohead",
|
251
251
|
"website": "http://radiohead.com/",
|
252
|
-
"href": "/artists/1
|
252
|
+
"href": "/artists/1"
|
253
253
|
},
|
254
254
|
{
|
255
255
|
"id": "2",
|
256
256
|
"name": "Nick Cave & The Bad Seeds",
|
257
257
|
"website": "http://www.nickcave.com/",
|
258
|
-
"href": "/artists/2
|
258
|
+
"href": "/artists/2"
|
259
259
|
},
|
260
260
|
{
|
261
261
|
"id": "3",
|
262
262
|
"name": "John Frusciante",
|
263
263
|
"website": "http://johnfrusciante.com/",
|
264
|
-
"href": "/artists/3
|
264
|
+
"href": "/artists/3"
|
265
265
|
}
|
266
266
|
]
|
267
267
|
}
|
@@ -2,7 +2,7 @@ module RestPack::Serializer::Attributes
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
def default_href
|
5
|
-
"#{RestPack::Serializer.config.href_prefix}/#{self.class.key}/#{@model.id}
|
5
|
+
"#{RestPack::Serializer.config.href_prefix}/#{self.class.key}/#{@model.id}"
|
6
6
|
end
|
7
7
|
|
8
8
|
module ClassMethods
|
@@ -58,7 +58,7 @@ module RestPack::Serializer::Paging
|
|
58
58
|
def page_href(page, options)
|
59
59
|
return nil unless page
|
60
60
|
|
61
|
-
url = "#{RestPack::Serializer.config.href_prefix}/#{self.key}
|
61
|
+
url = "#{RestPack::Serializer.config.href_prefix}/#{self.key}"
|
62
62
|
|
63
63
|
params = []
|
64
64
|
params << "page=#{page}" unless page == 1
|
@@ -31,11 +31,11 @@ module RestPack::Serializer::SideLoading
|
|
31
31
|
associations.each do |association|
|
32
32
|
if association.macro == :belongs_to
|
33
33
|
link_key = "#{self.key}.#{association.name}"
|
34
|
-
href = "/#{association.plural_name}/{#{link_key}}
|
34
|
+
href = "/#{association.plural_name}/{#{link_key}}"
|
35
35
|
elsif association.macro == :has_many
|
36
36
|
singular_key = self.key.to_s.singularize
|
37
37
|
link_key = "#{self.key}.#{association.plural_name}"
|
38
|
-
href = "/#{association.plural_name}
|
38
|
+
href = "/#{association.plural_name}?#{singular_key}_id={#{key}.id}"
|
39
39
|
end
|
40
40
|
|
41
41
|
links[link_key] = {
|
@@ -23,12 +23,12 @@ describe RestPack::Serializer::Paging do
|
|
23
23
|
page[:meta][:songs][:previous_page].should == nil
|
24
24
|
page[:meta][:songs][:previous_href].should == nil
|
25
25
|
page[:meta][:songs][:next_page].should == 2
|
26
|
-
page[:meta][:songs][:next_href].should == '/songs
|
26
|
+
page[:meta][:songs][:next_href].should == '/songs?page=2'
|
27
27
|
end
|
28
28
|
it "includes links" do
|
29
29
|
page[:links].should == {
|
30
|
-
'songs.album' => { :href => "/albums/{songs.album}
|
31
|
-
'songs.artist' => { :href => "/artists/{songs.artist}
|
30
|
+
'songs.album' => { :href => "/albums/{songs.album}", :type => :albums },
|
31
|
+
'songs.artist' => { :href => "/artists/{songs.artist}", :type => :artists }
|
32
32
|
}
|
33
33
|
end
|
34
34
|
end
|
@@ -41,7 +41,7 @@ describe RestPack::Serializer::Paging do
|
|
41
41
|
end
|
42
42
|
it "includes the custom page size in the page hrefs" do
|
43
43
|
page[:meta][:songs][:next_page].should == 2
|
44
|
-
page[:meta][:songs][:next_href].should == '/songs
|
44
|
+
page[:meta][:songs][:next_href].should == '/songs?page=2&page_size=3'
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -93,7 +93,7 @@ describe RestPack::Serializer::Paging do
|
|
93
93
|
page[:meta][:songs][:page].should == 2
|
94
94
|
page[:meta][:songs][:previous_page].should == 1
|
95
95
|
page[:meta][:songs][:next_page].should == nil
|
96
|
-
page[:meta][:songs][:previous_href].should == '/songs
|
96
|
+
page[:meta][:songs][:previous_href].should == '/songs'
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -109,7 +109,7 @@ describe RestPack::Serializer::Paging do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it "includes the side-loads in page hrefs" do
|
112
|
-
page[:meta][:songs][:next_href].should == '/songs
|
112
|
+
page[:meta][:songs][:next_href].should == '/songs?page=2&include=albums'
|
113
113
|
end
|
114
114
|
|
115
115
|
it "includes links between documents" do
|
@@ -133,7 +133,7 @@ describe RestPack::Serializer::Paging do
|
|
133
133
|
end
|
134
134
|
|
135
135
|
it "includes the side-loads in page hrefs" do
|
136
|
-
page[:meta][:songs][:next_href].should == '/songs
|
136
|
+
page[:meta][:songs][:next_href].should == '/songs?page=2&include=albums,artists'
|
137
137
|
end
|
138
138
|
|
139
139
|
it "includes links" do
|
@@ -164,7 +164,7 @@ describe RestPack::Serializer::Paging do
|
|
164
164
|
end
|
165
165
|
|
166
166
|
it "includes the filter in page hrefs" do
|
167
|
-
page[:meta][:songs][:next_href].should == "/songs
|
167
|
+
page[:meta][:songs][:next_href].should == "/songs?page=2&album_id=#{@album1.id}"
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
@@ -55,7 +55,7 @@ describe RestPack::Serializer do
|
|
55
55
|
serializer.class.serialize(person).should == {
|
56
56
|
people: [{
|
57
57
|
id: '123', name: 'Gavin', description: 'This is person #123',
|
58
|
-
href: '/people/123
|
58
|
+
href: '/people/123', custom_key: 'custom value for model id 123'
|
59
59
|
}]
|
60
60
|
}
|
61
61
|
end
|
@@ -65,14 +65,14 @@ describe RestPack::Serializer do
|
|
65
65
|
it "serializes specified attributes" do
|
66
66
|
serializer.as_json(person).should == {
|
67
67
|
id: '123', name: 'Gavin', description: 'This is person #123',
|
68
|
-
href: '/people/123
|
68
|
+
href: '/people/123', custom_key: 'custom value for model id 123'
|
69
69
|
}
|
70
70
|
end
|
71
71
|
|
72
72
|
context "with options" do
|
73
73
|
it "excludes specified attributes" do
|
74
74
|
serializer.as_json(person, { include_description?: false }).should == {
|
75
|
-
id: '123', name: 'Gavin', href: '/people/123
|
75
|
+
id: '123', name: 'Gavin', href: '/people/123',
|
76
76
|
custom_key: 'custom value for model id 123'
|
77
77
|
}
|
78
78
|
end
|
@@ -52,11 +52,11 @@ describe RestPack::Serializer::SideLoading do
|
|
52
52
|
describe "#links" do
|
53
53
|
MyApp::AlbumSerializer.links.should == {
|
54
54
|
"albums.artist" => {
|
55
|
-
:href => "/artists/{albums.artist}
|
55
|
+
:href => "/artists/{albums.artist}",
|
56
56
|
:type => :artists
|
57
57
|
},
|
58
58
|
"albums.songs" => {
|
59
|
-
:href => "/songs
|
59
|
+
:href => "/songs?album_id={albums.id}",
|
60
60
|
:type => :songs
|
61
61
|
}
|
62
62
|
}
|
@@ -64,7 +64,7 @@ describe RestPack::Serializer::SideLoading do
|
|
64
64
|
it "applies custom RestPack::Serializer.config.href_prefix" do
|
65
65
|
original = RestPack::Serializer.config.href_prefix
|
66
66
|
RestPack::Serializer.config.href_prefix = "/api/v1"
|
67
|
-
MyApp::AlbumSerializer.links["albums.artist"][:href].should == "/api/v1/artists/{albums.artist}
|
67
|
+
MyApp::AlbumSerializer.links["albums.artist"][:href].should == "/api/v1/artists/{albums.artist}"
|
68
68
|
RestPack::Serializer.config.href_prefix = original
|
69
69
|
end
|
70
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restpack_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Joyce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|