restpack_serializer 0.6.7 → 0.6.12

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.
@@ -8,32 +8,35 @@ describe RestPack::Serializer::Paging do
8
8
 
9
9
  context "#page" do
10
10
  let(:page) { MyApp::SongSerializer.page(params, scope, context) }
11
- let(:params) { { } }
11
+ let(:params) { {} }
12
12
  let(:scope) { nil }
13
- let(:context) { { } }
13
+ let(:context) { {} }
14
14
 
15
15
  context "with defaults" do
16
16
  it "page defaults to 1" do
17
- page[:meta][:songs][:page].should == 1
17
+ expect(page[:meta][:songs][:page]).to eq(1)
18
18
  end
19
+
19
20
  it "page_size defaults to 10" do
20
- page[:meta][:songs][:page_size].should == 10
21
+ expect(page[:meta][:songs][:page_size]).to eq(10)
21
22
  end
23
+
22
24
  it "includes valid paging meta data" do
23
- page[:meta][:songs][:count].should == 18
24
- page[:meta][:songs][:page_count].should == 2
25
- page[:meta][:songs][:first_href].should == '/songs'
26
- page[:meta][:songs][:previous_page].should == nil
27
- page[:meta][:songs][:previous_href].should == nil
28
- page[:meta][:songs][:next_page].should == 2
29
- page[:meta][:songs][:next_href].should == '/songs?page=2'
30
- page[:meta][:songs][:last_href].should == '/songs?page=2'
25
+ expect(page[:meta][:songs][:count]).to eq(18)
26
+ expect(page[:meta][:songs][:page_count]).to eq(2)
27
+ expect(page[:meta][:songs][:first_href]).to eq('/songs')
28
+ expect(page[:meta][:songs][:previous_page]).to eq(nil)
29
+ expect(page[:meta][:songs][:previous_href]).to eq(nil)
30
+ expect(page[:meta][:songs][:next_page]).to eq(2)
31
+ expect(page[:meta][:songs][:next_href]).to eq('/songs?page=2')
32
+ expect(page[:meta][:songs][:last_href]).to eq('/songs?page=2')
31
33
  end
34
+
32
35
  it "includes links" do
33
- page[:links].should == {
34
- 'songs.album' => { :href => "/albums/{songs.album}", :type => :albums },
35
- 'songs.artist' => { :href => "/artists/{songs.artist}", :type => :artists }
36
- }
36
+ expect(page[:links]).to eq(
37
+ 'songs.album' => { href: "/albums/{songs.album}", type: :albums },
38
+ 'songs.artist' => { href: "/artists/{songs.artist}", type: :artists }
39
+ )
37
40
  end
38
41
  end
39
42
 
@@ -42,42 +45,44 @@ describe RestPack::Serializer::Paging do
42
45
  @original_prefix = MyApp::SongSerializer.href_prefix
43
46
  MyApp::SongSerializer.href_prefix = '/api/v3'
44
47
  end
45
- after do
46
- MyApp::SongSerializer.href_prefix = @original_prefix
47
- end
48
- let(:page) do
49
- MyApp::SongSerializer.page(params, scope, context)
50
- end
48
+ after { MyApp::SongSerializer.href_prefix = @original_prefix }
49
+
50
+ let(:page) { MyApp::SongSerializer.page(params, scope, context) }
51
+
51
52
  it 'should use prefixed links' do
52
- page[:meta][:songs][:next_href].should == '/api/v3/songs?page=2'
53
+ expect(page[:meta][:songs][:next_href]).to eq('/api/v3/songs?page=2')
53
54
  end
54
55
  end
55
56
 
56
57
  context "with custom page size" do
57
58
  let(:params) { { page_size: '3' } }
59
+
58
60
  it "returns custom page sizes" do
59
- page[:meta][:songs][:page_size].should == 3
60
- page[:meta][:songs][:page_count].should == 6
61
+ expect(page[:meta][:songs][:page_size]).to eq(3)
62
+ expect(page[:meta][:songs][:page_count]).to eq(6)
61
63
  end
64
+
62
65
  it "includes the custom page size in the page hrefs" do
63
- page[:meta][:songs][:next_page].should == 2
64
- page[:meta][:songs][:next_href].should == '/songs?page=2&page_size=3'
65
- page[:meta][:songs][:last_href].should == '/songs?page=6&page_size=3'
66
+ expect(page[:meta][:songs][:next_page]).to eq(2)
67
+ expect(page[:meta][:songs][:next_href]).to eq('/songs?page=2&page_size=3')
68
+ expect(page[:meta][:songs][:last_href]).to eq('/songs?page=6&page_size=3')
66
69
  end
67
70
  end
68
71
 
69
72
  context "with custom filter" do
70
73
  context "valid :title" do
71
74
  let(:params) { { title: @album1.songs[0].title } }
75
+
72
76
  it "returns the album" do
73
- page[:meta][:songs][:count].should == 1
77
+ expect(page[:meta][:songs][:count]).to eq(1)
74
78
  end
75
79
  end
76
80
 
77
81
  context "invalid :title" do
78
82
  let(:params) { { title: "this doesn't exist" } }
83
+
79
84
  it "returns the album" do
80
- page[:meta][:songs][:count].should == 0
85
+ expect(page[:meta][:songs][:count]).to eq(0)
81
86
  end
82
87
  end
83
88
  end
@@ -87,13 +92,13 @@ describe RestPack::Serializer::Paging do
87
92
 
88
93
  it "returns reversed titles" do
89
94
  first = MyApp::Song.first
90
- page[:songs].first[:title].should == first.title.reverse
95
+ expect(page[:songs].first[:title]).to eq(first.title.reverse)
91
96
  end
92
97
  end
93
98
 
94
99
  it "serializes results" do
95
100
  first = MyApp::Song.first
96
- page[:songs].first.should == {
101
+ expect(page[:songs].first).to eq(
97
102
  id: first.id.to_s,
98
103
  title: first.title,
99
104
  album_id: first.album_id,
@@ -101,17 +106,17 @@ describe RestPack::Serializer::Paging do
101
106
  album: first.album_id.to_s,
102
107
  artist: first.artist_id.to_s
103
108
  }
104
- }
109
+ )
105
110
  end
106
111
 
107
112
  context "first page" do
108
113
  let(:params) { { page: '1' } }
109
114
 
110
115
  it "returns first page" do
111
- page[:meta][:songs][:page].should == 1
112
- page[:meta][:songs][:page_size].should == 10
113
- page[:meta][:songs][:previous_page].should == nil
114
- page[:meta][:songs][:next_page].should == 2
116
+ expect(page[:meta][:songs][:page]).to eq(1)
117
+ expect(page[:meta][:songs][:page_size]).to eq(10)
118
+ expect(page[:meta][:songs][:previous_page]).to eq(nil)
119
+ expect(page[:meta][:songs][:next_page]).to eq(2)
115
120
  end
116
121
  end
117
122
 
@@ -119,11 +124,11 @@ describe RestPack::Serializer::Paging do
119
124
  let(:params) { { page: '2' } }
120
125
 
121
126
  it "returns second page" do
122
- page[:songs].length.should == 8
123
- page[:meta][:songs][:page].should == 2
124
- page[:meta][:songs][:previous_page].should == 1
125
- page[:meta][:songs][:next_page].should == nil
126
- page[:meta][:songs][:previous_href].should == '/songs'
127
+ expect(page[:songs].length).to eq(8)
128
+ expect(page[:meta][:songs][:page]).to eq(2)
129
+ expect(page[:meta][:songs][:previous_page]).to eq(1)
130
+ expect(page[:meta][:songs][:next_page]).to eq(nil)
131
+ expect(page[:meta][:songs][:previous_href]).to eq('/songs')
127
132
  end
128
133
  end
129
134
 
@@ -131,48 +136,49 @@ describe RestPack::Serializer::Paging do
131
136
  let(:params) { { include: 'albums' } }
132
137
 
133
138
  it "includes side-loaded models" do
134
- page[:linked][:albums].should_not == nil
139
+ expect(page[:linked][:albums]).not_to eq(nil)
135
140
  end
136
141
 
137
142
  it "includes the side-loads in the main meta data" do
138
- page[:meta][:songs][:include].should == ["albums"]
143
+ expect(page[:meta][:songs][:include]).to eq(%w(albums))
139
144
  end
140
145
 
141
146
  it "includes the side-loads in page hrefs" do
142
- page[:meta][:songs][:next_href].should == '/songs?page=2&include=albums'
147
+ expect(page[:meta][:songs][:next_href]).to eq('/songs?page=2&include=albums')
143
148
  end
144
149
 
145
150
  it "includes links between documents" do
146
151
  song = page[:songs].first
147
152
  song_model = MyApp::Song.find(song[:id])
148
- song[:links][:album].should == song_model.album_id.to_s
149
- song[:links][:artist].should == song_model.artist_id.to_s
153
+ expect(song[:links][:album]).to eq(song_model.album_id.to_s)
154
+ expect(song[:links][:artist]).to eq(song_model.artist_id.to_s)
150
155
 
151
156
  album = page[:linked][:albums].first
152
157
  album_model = MyApp::Album.find(album[:id])
153
158
 
154
- album[:links][:artist].should == album_model.artist_id.to_s
155
- (page[:songs].map { |song| song[:id] } - album[:links][:songs]).empty?.should be_truthy
159
+ expect(album[:links][:artist]).to eq(album_model.artist_id.to_s)
160
+ expect((page[:songs].map { |song| song[:id] } - album[:links][:songs]).empty?).to eq(true)
156
161
  end
157
162
 
158
163
  context "with includes as comma delimited string" do
159
164
  let(:params) { { include: "albums,artists" } }
165
+
160
166
  it "includes side-loaded models" do
161
- page[:linked][:albums].should_not == nil
162
- page[:linked][:artists].should_not == nil
167
+ expect(page[:linked][:albums]).not_to eq(nil)
168
+ expect(page[:linked][:artists]).not_to eq(nil)
163
169
  end
164
170
 
165
171
  it "includes the side-loads in page hrefs" do
166
- page[:meta][:songs][:next_href].should == '/songs?page=2&include=albums,artists'
172
+ expect(page[:meta][:songs][:next_href]).to eq('/songs?page=2&include=albums,artists')
167
173
  end
168
174
 
169
175
  it "includes links" do
170
- page[:links]['songs.album'].should_not == nil
171
- page[:links]['songs.artist'].should_not == nil
172
- page[:links]['albums.songs'].should_not == nil
173
- page[:links]['albums.artist'].should_not == nil
174
- page[:links]['artists.songs'].should_not == nil
175
- page[:links]['artists.albums'].should_not == nil
176
+ expect(page[:links]['songs.album']).not_to eq(nil)
177
+ expect(page[:links]['songs.artist']).not_to eq(nil)
178
+ expect(page[:links]['albums.songs']).not_to eq(nil)
179
+ expect(page[:links]['albums.artist']).not_to eq(nil)
180
+ expect(page[:links]['artists.songs']).not_to eq(nil)
181
+ expect(page[:links]['artists.albums']).not_to eq(nil)
176
182
  end
177
183
  end
178
184
  end
@@ -182,7 +188,7 @@ describe RestPack::Serializer::Paging do
182
188
  let(:params) { {} }
183
189
 
184
190
  it "returns a page of all data" do
185
- page[:meta][:songs][:count].should == 18
191
+ expect(page[:meta][:songs][:count]).to eq(18)
186
192
  end
187
193
  end
188
194
 
@@ -190,11 +196,11 @@ describe RestPack::Serializer::Paging do
190
196
  let(:params) { { album_id: @album1.id.to_s } }
191
197
 
192
198
  it "returns a page with songs from album1" do
193
- page[:meta][:songs][:count].should == @album1.songs.length
199
+ expect(page[:meta][:songs][:count]).to eq(@album1.songs.length)
194
200
  end
195
201
 
196
202
  it "includes the filter in page hrefs" do
197
- page[:meta][:songs][:next_href].should == "/songs?page=2&album_id=#{@album1.id}"
203
+ expect(page[:meta][:songs][:next_href]).to eq("/songs?page=2&album_id=#{@album1.id}")
198
204
  end
199
205
  end
200
206
  end
@@ -204,7 +210,7 @@ describe RestPack::Serializer::Paging do
204
210
  let(:params) { {} }
205
211
 
206
212
  it "uses the model's sorting" do
207
- page[:songs].first[:id].to_i.should < page[:songs].last[:id].to_i
213
+ expect(page[:songs].first[:id].to_i < page[:songs].last[:id].to_i).to eq(true)
208
214
  end
209
215
  end
210
216
 
@@ -212,11 +218,11 @@ describe RestPack::Serializer::Paging do
212
218
  let(:params) { { sort: '-title' } }
213
219
 
214
220
  it 'returns a page with sorted songs' do
215
- page[:songs].first[:title].should > page[:songs].last[:title]
221
+ expect(page[:songs].first[:title] > page[:songs].last[:title]).to eq(true)
216
222
  end
217
223
 
218
224
  it 'includes the sorting in page hrefs' do
219
- page[:meta][:songs][:next_href].should == '/songs?page=2&sort=-title'
225
+ expect(page[:meta][:songs][:next_href]).to eq('/songs?page=2&sort=-title')
220
226
  end
221
227
  end
222
228
  end
@@ -230,7 +236,7 @@ describe RestPack::Serializer::Paging do
230
236
  let(:scope) { MyApp::Album.classic }
231
237
 
232
238
  it "returns a page of scoped data" do
233
- page[:meta][:albums][:count].should == 2
239
+ expect(page[:meta][:albums][:count]).to eq(2)
234
240
  end
235
241
  end
236
242
  end
@@ -242,43 +248,44 @@ describe RestPack::Serializer::Paging do
242
248
 
243
249
  context "with defaults" do
244
250
  it "includes valid paging meta data" do
245
- page[:meta][:songs][:count].should == 18
246
- page[:meta][:songs][:page_count].should == 2
247
- page[:meta][:songs][:previous_page].should == nil
248
- page[:meta][:songs][:next_page].should == 2
251
+ expect(page[:meta][:songs][:count]).to eq(18)
252
+ expect(page[:meta][:songs][:page_count]).to eq(2)
253
+ expect(page[:meta][:songs][:previous_page]).to eq(nil)
254
+ expect(page[:meta][:songs][:next_page]).to eq(2)
249
255
  end
250
256
  end
251
257
 
252
258
  context "with custom page size" do
253
259
  let(:params) { { page_size: '3' } }
260
+
254
261
  it "returns custom page sizes" do
255
- page[:meta][:songs][:page_size].should == 3
256
- page[:meta][:songs][:page_count].should == 6
262
+ expect(page[:meta][:songs][:page_size]).to eq(3)
263
+ expect(page[:meta][:songs][:page_count]).to eq(6)
257
264
  end
258
265
  end
259
266
  end
260
267
 
261
268
  context "paging with paged side-load" do
262
269
  let(:page) { MyApp::AlbumSerializer.page_with_options(options) }
263
- let(:options) { RestPack::Serializer::Options.new(MyApp::AlbumSerializer, { include: 'songs' }) }
270
+ let(:options) { RestPack::Serializer::Options.new(MyApp::AlbumSerializer, include: 'songs') }
264
271
 
265
272
  it "includes side-loaded paging data in meta data" do
266
- page[:meta][:albums].should_not == nil
267
- page[:meta][:albums][:page].should == 1
268
- page[:meta][:songs].should_not == nil
269
- page[:meta][:songs][:page].should == 1
273
+ expect(page[:meta][:albums]).not_to eq(nil)
274
+ expect(page[:meta][:albums][:page]).to eq(1)
275
+ expect(page[:meta][:songs]).not_to eq(nil)
276
+ expect(page[:meta][:songs][:page]).to eq(1)
270
277
  end
271
278
  end
272
279
 
273
280
  context "paging with two paged side-loads" do
274
281
  let(:page) { MyApp::ArtistSerializer.page_with_options(options) }
275
- let(:options) { RestPack::Serializer::Options.new(MyApp::ArtistSerializer, { include: 'albums,songs' }) }
282
+ let(:options) { RestPack::Serializer::Options.new(MyApp::ArtistSerializer, include: 'albums,songs') }
276
283
 
277
284
  it "includes side-loaded paging data in meta data" do
278
- page[:meta][:albums].should_not == nil
279
- page[:meta][:albums][:page].should == 1
280
- page[:meta][:songs].should_not == nil
281
- page[:meta][:songs][:page].should == 1
285
+ expect(page[:meta][:albums]).not_to eq(nil)
286
+ expect(page[:meta][:albums][:page]).to eq(1)
287
+ expect(page[:meta][:songs]).not_to eq(nil)
288
+ expect(page[:meta][:songs][:page]).to eq(1)
282
289
  end
283
290
  end
284
291
  end
@@ -9,18 +9,18 @@ describe RestPack::Serializer::Resource do
9
9
  let(:resource) { MyApp::SongSerializer.resource(params, scope, context) }
10
10
  let(:params) { { id: @song.id } }
11
11
  let(:scope) { nil }
12
- let(:context) { { } }
12
+ let(:context) { {} }
13
13
 
14
14
  it "returns a resource by id" do
15
- resource[:songs].count.should == 1
16
- resource[:songs][0][:id].should == @song.id.to_s
15
+ expect(resource[:songs].count).to eq(1)
16
+ expect(resource[:songs][0][:id]).to eq(@song.id.to_s)
17
17
  end
18
18
 
19
19
  context "with context" do
20
20
  let(:context) { { reverse_title?: true } }
21
21
 
22
22
  it "returns reversed titles" do
23
- resource[:songs][0][:title].should == @song.title.reverse
23
+ expect(resource[:songs][0][:title]).to eq(@song.title.reverse)
24
24
  end
25
25
  end
26
26
 
@@ -28,19 +28,20 @@ describe RestPack::Serializer::Resource do
28
28
  let(:params) { { id: @song.id, include: 'albums' } }
29
29
 
30
30
  it "includes side-loaded models" do
31
- resource[:linked][:albums].count.should == 1
32
- resource[:linked][:albums].first[:id].should == @song.album.id.to_s
31
+ expect(resource[:linked][:albums].count).to eq(1)
32
+ expect(resource[:linked][:albums].first[:id]).to eq(@song.album.id.to_s)
33
33
  end
34
34
 
35
35
  it "includes the side-loads in the main meta data" do
36
- resource[:meta][:songs][:include].should == ["albums"]
36
+ expect(resource[:meta][:songs][:include]).to eq(%w(albums))
37
37
  end
38
38
  end
39
39
 
40
40
  describe "missing resource" do
41
41
  let(:params) { { id: "-99" } }
42
+
42
43
  it "returns no resource" do
43
- resource[:songs].length.should == 0
44
+ expect(resource[:songs].length).to eq(0)
44
45
  end
45
46
 
46
47
  #TODO: add specs for jsonapi error format when it has been standardised
@@ -49,11 +50,11 @@ describe RestPack::Serializer::Resource do
49
50
  end
50
51
 
51
52
  describe "song with no artist" do
52
- let(:song) { FactoryGirl.create(:song, :artist => nil) }
53
+ let(:song) { FactoryGirl.create(:song, artist: nil) }
53
54
  let(:resource) { MyApp::SongSerializer.resource(id: song.id.to_s) }
54
55
 
55
56
  it "should not have an artist link" do
56
- resource[:songs][0][:links].keys.should_not include(:artist)
57
+ expect(resource[:songs][0][:links].keys).not_to include(:artist)
57
58
  end
58
59
  end
59
60
  end
@@ -27,7 +27,7 @@ describe RestPack::Serializer do
27
27
  end
28
28
 
29
29
  it ".as_json serializes to an empty hash" do
30
- EmptySerializer.as_json(person).should == { }
30
+ expect(EmptySerializer.as_json(person)).to eq({})
31
31
  end
32
32
  end
33
33
 
@@ -71,11 +71,32 @@ describe RestPack::Serializer do
71
71
  end
72
72
 
73
73
  it ".as_json serializes" do
74
- serialized = DerivedSerializer.as_json({}, { include_food?: false, name: 'Ben', age: 1 })
75
- serialized.should == { #NOTE: I think this should include colour as DerivedSerializer defines it, but this would be a big breaking change
74
+ serialized = DerivedSerializer.as_json({}, include_food?: false, name: 'Ben', age: 1)
75
+ expect(serialized).to eq({ #NOTE: I think this should include colour as DerivedSerializer defines it, but this would be a big breaking change
76
76
  name: "Ben",
77
77
  age: 1
78
- }
78
+ })
79
+ end
80
+ end
81
+
82
+ context "serializer instance variables" do
83
+ class MemoizingSerializer
84
+ include RestPack::Serializer
85
+
86
+ attributes :id, :memoized_id
87
+
88
+ def memoized_id
89
+ @memoized_id ||= id
90
+ end
91
+ end
92
+
93
+ it "does not reuse instance variable values" do
94
+ people = [Person.new(id: 123), Person.new(id: 456)]
95
+ serialized = MemoizingSerializer.as_json(people)
96
+ expect(serialized).to eq([
97
+ { id: "123", memoized_id: "123" },
98
+ { id: "456", memoized_id: "456" }
99
+ ])
79
100
  end
80
101
  end
81
102
 
@@ -116,34 +137,35 @@ describe RestPack::Serializer do
116
137
 
117
138
  def custom_attributes
118
139
  {
119
- :custom_key => "custom value for model id #{@model.id}"
140
+ custom_key: "custom value for model id #{@model.id}"
120
141
  }
121
142
  end
122
143
  end
123
144
 
124
145
  describe ".serialize" do
125
146
  it "serializes to an array" do
126
- serializer.class.serialize(person).should == {
147
+ expect(serializer.class.serialize(person)).to eq(
127
148
  people: [{
128
149
  id: '123', name: 'Gavin', description: 'This is person #123',
129
150
  href: '/people/123', custom_key: 'custom value for model id 123'
130
151
  }]
131
- }
152
+ )
132
153
  end
133
154
  end
134
155
 
135
156
  describe ".as_json" do
136
157
  it "serializes specified attributes" do
137
- serializer.as_json(person).should == {
158
+ expect(serializer.as_json(person)).to eq(
138
159
  id: '123', name: 'Gavin', description: 'This is person #123',
139
160
  href: '/people/123', custom_key: 'custom value for model id 123'
140
- }
161
+ )
141
162
  end
142
163
 
143
164
  context "an array" do
144
165
  let(:people) { [person, person] }
166
+
145
167
  it "results in a serialized array" do
146
- serializer.as_json(people).should == [
168
+ expect(serializer.as_json(people)).to eq([
147
169
  {
148
170
  id: '123', name: 'Gavin', description: 'This is person #123',
149
171
  href: '/people/123', custom_key: 'custom value for model id 123'
@@ -152,11 +174,12 @@ describe RestPack::Serializer do
152
174
  id: '123', name: 'Gavin', description: 'This is person #123',
153
175
  href: '/people/123', custom_key: 'custom value for model id 123'
154
176
  }
155
- ]
177
+ ])
156
178
  end
179
+
157
180
  context "#array_as_json" do
158
181
  it "results in a serialized array" do
159
- serializer.class.array_as_json(people).should == [
182
+ expect(serializer.class.array_as_json(people)).to eq([
160
183
  {
161
184
  id: '123', name: 'Gavin', description: 'This is person #123',
162
185
  href: '/people/123', custom_key: 'custom value for model id 123'
@@ -165,75 +188,75 @@ describe RestPack::Serializer do
165
188
  id: '123', name: 'Gavin', description: 'This is person #123',
166
189
  href: '/people/123', custom_key: 'custom value for model id 123'
167
190
  }
168
- ]
191
+ ])
169
192
  end
170
193
  end
171
194
  end
172
195
 
173
196
  context "nil" do
174
197
  it "results in nil" do
175
- serializer.as_json(nil).should == nil
198
+ expect(serializer.as_json(nil)).to eq(nil)
176
199
  end
177
200
  end
178
201
 
179
202
  context "with options" do
180
203
  it "excludes specified attributes" do
181
- serializer.as_json(person, { include_description?: false }).should == {
204
+ expect(serializer.as_json(person, include_description?: false)).to eq(
182
205
  id: '123', name: 'Gavin', href: '/people/123',
183
206
  custom_key: 'custom value for model id 123'
184
- }
207
+ )
185
208
  end
186
209
 
187
210
  it "excludes custom attributes if specified" do
188
- hash = serializer.as_json(person, { is_admin?: false })
189
- hash[:admin_info].should == nil
211
+ hash = serializer.as_json(person, is_admin?: false)
212
+ expect(hash[:admin_info]).to eq(nil)
190
213
  end
191
214
 
192
215
  it "includes custom attributes if specified" do
193
- hash = serializer.as_json(person, { is_admin?: true })
194
- hash[:admin_info].should == {
216
+ hash = serializer.as_json(person, is_admin?: true)
217
+ expect(hash[:admin_info]).to eq(
195
218
  key: "super_secret_sauce",
196
219
  array: [
197
220
  name: 'Alex'
198
221
  ]
199
- }
222
+ )
200
223
  end
201
224
 
202
225
  it "excludes a blacklist of attributes if specified as an array" do
203
- serializer.as_json(person, { attribute_blacklist: [:name, :description] }).should == {
226
+ expect(serializer.as_json(person, attribute_blacklist: [:name, :description])).to eq(
204
227
  id: '123',
205
228
  href: '/people/123',
206
229
  custom_key: 'custom value for model id 123'
207
- }
230
+ )
208
231
  end
209
232
 
210
233
  it "excludes a blacklist of attributes if specified as a string" do
211
- serializer.as_json(person, { attribute_blacklist: 'name, description' }).should == {
234
+ expect(serializer.as_json(person, attribute_blacklist: 'name, description')).to eq(
212
235
  id: '123',
213
236
  href: '/people/123',
214
237
  custom_key: 'custom value for model id 123'
215
- }
238
+ )
216
239
  end
217
240
 
218
241
  it "includes a whitelist of attributes if specified as an array" do
219
- serializer.as_json(person, { attribute_whitelist: [:name, :description] }).should == {
242
+ expect(serializer.as_json(person, attribute_whitelist: [:name, :description])).to eq(
220
243
  name: 'Gavin',
221
244
  description: 'This is person #123',
222
245
  custom_key: 'custom value for model id 123'
223
- }
246
+ )
224
247
  end
225
248
 
226
249
  it "includes a whitelist of attributes if specified as a string" do
227
- serializer.as_json(person, { attribute_whitelist: 'name, description' }).should == {
250
+ expect(serializer.as_json(person, attribute_whitelist: 'name, description')).to eq(
228
251
  name: 'Gavin',
229
252
  description: 'This is person #123',
230
253
  custom_key: 'custom value for model id 123'
231
- }
254
+ )
232
255
  end
233
256
 
234
257
  it "raises an exception if both the whitelist and blacklist are provided" do
235
258
  expect do
236
- serializer.as_json(person, { attribute_whitelist: [:name], attribute_blacklist: [:id] })
259
+ serializer.as_json(person, attribute_whitelist: [:name], attribute_blacklist: [:id])
237
260
  end.to raise_error(ArgumentError, "the context can't define both an `attribute_whitelist` and an `attribute_blacklist`")
238
261
  end
239
262
  end
@@ -245,10 +268,10 @@ describe RestPack::Serializer do
245
268
  it "includes 'links' data for :belongs_to associations" do
246
269
  @album1 = FactoryGirl.create(:album_with_songs, song_count: 11)
247
270
  json = serializer.as_json(@album1.songs.first)
248
- json[:links].should == {
271
+ expect(json[:links]).to eq(
249
272
  artist: @album1.artist_id.to_s,
250
273
  album: @album1.id.to_s
251
- }
274
+ )
252
275
  end
253
276
  end
254
277
 
@@ -256,12 +279,13 @@ describe RestPack::Serializer do
256
279
  let(:artist_factory) { FactoryGirl.create :artist_with_fans }
257
280
  let(:artist_serializer) { MyApp::ArtistSerializer.new }
258
281
  let(:json) { artist_serializer.as_json(artist_factory) }
259
- let(:side_load_ids) { artist_has_association.map {|obj| obj.id.to_s } }
282
+ let(:side_load_ids) { artist_has_association.map { |obj| obj.id.to_s } }
260
283
 
261
284
  context "when the association has been eager loaded" do
262
285
  before do
263
- artist_factory.fans.stub(:loaded?) { true }
286
+ allow(artist_factory.fans).to receive(:loaded?).and_return(true)
264
287
  end
288
+
265
289
  it "does not make a query to retrieve id values" do
266
290
  expect(artist_factory.fans).not_to receive(:pluck)
267
291
  json
@@ -289,9 +313,23 @@ describe RestPack::Serializer do
289
313
  end
290
314
  end
291
315
 
316
+ describe "to_json" do
317
+ context "class method" do
318
+ it "delegates to as_json" do
319
+ expect(PersonSerializer.as_json(person).to_json).to eq(PersonSerializer.to_json(person))
320
+ end
321
+ end
322
+
323
+ context "instance method" do
324
+ it "delegates to as_json" do
325
+ expect(serializer.as_json(person).to_json).to eq(serializer.to_json(person))
326
+ end
327
+ end
328
+ end
329
+
292
330
  describe "#model_class" do
293
331
  it "extracts the Model name from the Serializer name" do
294
- PersonSerializer.model_class.should == Person
332
+ expect(PersonSerializer.model_class).to eq(Person)
295
333
  end
296
334
 
297
335
  context "with namespaced model class" do
@@ -306,7 +344,7 @@ describe RestPack::Serializer do
306
344
  end
307
345
 
308
346
  it "returns the correct class" do
309
- NamespacedSerializer.model_class.should == SomeNamespace::Model
347
+ expect(NamespacedSerializer.model_class).to eq(SomeNamespace::Model)
310
348
  end
311
349
  end
312
350
  end
@@ -314,15 +352,15 @@ describe RestPack::Serializer do
314
352
  describe "#key" do
315
353
  context "with default key" do
316
354
  it "returns the correct key" do
317
- PersonSerializer.key.should == :people
355
+ expect(PersonSerializer.key).to eq(:people)
318
356
  end
319
357
 
320
358
  it "has correct #singular_key" do
321
- PersonSerializer.singular_key.should == :person
359
+ expect(PersonSerializer.singular_key).to eq(:person)
322
360
  end
323
361
 
324
362
  it "has correct #plural_key" do
325
- PersonSerializer.plural_key.should == :people
363
+ expect(PersonSerializer.plural_key).to eq(:people)
326
364
  end
327
365
  end
328
366
 
@@ -333,11 +371,11 @@ describe RestPack::Serializer do
333
371
  end
334
372
 
335
373
  it "returns the correct key" do
336
- SerializerWithCustomKey.key.should == :customers
374
+ expect(SerializerWithCustomKey.key).to eq(:customers)
337
375
  end
338
376
 
339
377
  it "has correct #singular_key" do
340
- SerializerWithCustomKey.singular_key.should == :customer
378
+ expect(SerializerWithCustomKey.singular_key).to eq(:customer)
341
379
  end
342
380
  end
343
381
  end