restpack_serializer 0.4.8 → 0.4.9
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.
- 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
|