restpack_serializer 0.6.7 → 0.6.8
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/.gitignore +1 -0
- data/lib/restpack_serializer/version.rb +1 -1
- data/restpack_serializer.gemspec +10 -9
- data/spec/factory/factory_spec.rb +21 -14
- data/spec/fixtures/db.rb +1 -1
- data/spec/restpack_serializer_spec.rb +4 -4
- data/spec/result_spec.rb +16 -15
- data/spec/serializable/filterable_spec.rb +1 -1
- data/spec/serializable/options_spec.rb +40 -35
- data/spec/serializable/paging_spec.rb +88 -81
- data/spec/serializable/resource_spec.rb +11 -10
- data/spec/serializable/serializer_spec.rb +44 -41
- data/spec/serializable/side_loading/belongs_to_spec.rb +16 -13
- data/spec/serializable/side_loading/has_and_belongs_many_spec.rb +7 -7
- data/spec/serializable/side_loading/has_many_spec.rb +19 -20
- data/spec/serializable/side_loading/side_loading_spec.rb +21 -19
- data/spec/serializable/single_spec.rb +4 -4
- data/spec/serializable/sortable_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/factory.rb +20 -26
- metadata +35 -22
@@ -12,7 +12,7 @@ describe RestPack::Serializer::SideLoading do
|
|
12
12
|
message = ":wrong is not a valid include for MyApp::Song"
|
13
13
|
|
14
14
|
expect do
|
15
|
-
MyApp::SongSerializer.side_loads([MyApp::Song.first], RestPack::Serializer::Options.new(MyApp::SongSerializer,
|
15
|
+
MyApp::SongSerializer.side_loads([MyApp::Song.first], RestPack::Serializer::Options.new(MyApp::SongSerializer, "include" => "wrong"))
|
16
16
|
end.to raise_error(exception, message)
|
17
17
|
end
|
18
18
|
end
|
@@ -24,7 +24,7 @@ describe RestPack::Serializer::SideLoading do
|
|
24
24
|
message = ":payments is not a valid include for MyApp::Artist"
|
25
25
|
|
26
26
|
expect do
|
27
|
-
MyApp::ArtistSerializer.side_loads([payment.artist], RestPack::Serializer::Options.new(MyApp::ArtistSerializer,
|
27
|
+
MyApp::ArtistSerializer.side_loads([payment.artist], RestPack::Serializer::Options.new(MyApp::ArtistSerializer, "include" => "payments"))
|
28
28
|
end.to raise_error(exception, message)
|
29
29
|
end
|
30
30
|
end
|
@@ -36,7 +36,7 @@ describe RestPack::Serializer::SideLoading do
|
|
36
36
|
attributes :a, :b, :c
|
37
37
|
end
|
38
38
|
it "defaults to empty array" do
|
39
|
-
CustomSerializer.can_includes.
|
39
|
+
expect(CustomSerializer.can_includes).to eq([])
|
40
40
|
end
|
41
41
|
|
42
42
|
it "allows includes to be specified" do
|
@@ -45,33 +45,35 @@ describe RestPack::Serializer::SideLoading do
|
|
45
45
|
can_include :model2, :model3
|
46
46
|
end
|
47
47
|
|
48
|
-
CustomSerializer.can_includes.
|
48
|
+
expect(CustomSerializer.can_includes).to eq([:model1, :model2, :model3])
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "#links" do
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
53
|
+
it do
|
54
|
+
expect(MyApp::AlbumSerializer.links).to eq(
|
55
|
+
"albums.artist" => {
|
56
|
+
href: "/artists/{albums.artist}",
|
57
|
+
type: :artists
|
58
|
+
},
|
59
|
+
"albums.songs" => {
|
60
|
+
href: "/songs?album_id={albums.id}",
|
61
|
+
type: :songs
|
62
|
+
}
|
63
|
+
)
|
64
|
+
end
|
63
65
|
|
64
66
|
it "applies custom RestPack::Serializer.config.href_prefix" do
|
65
67
|
original = RestPack::Serializer.config.href_prefix
|
66
68
|
RestPack::Serializer.config.href_prefix = "/api/v1"
|
67
|
-
MyApp::AlbumSerializer.links["albums.artist"][:href].
|
69
|
+
expect(MyApp::AlbumSerializer.links["albums.artist"][:href]).to eq("/api/v1/artists/{albums.artist}")
|
68
70
|
RestPack::Serializer.config.href_prefix = original
|
69
71
|
end
|
70
72
|
|
71
73
|
it "applies custom serializer href_prefix" do
|
72
74
|
original = RestPack::Serializer.config.href_prefix
|
73
75
|
MyApp::AlbumSerializer.href_prefix = '/api/v2'
|
74
|
-
MyApp::AlbumSerializer.links["albums.artist"][:href].
|
76
|
+
expect(MyApp::AlbumSerializer.links["albums.artist"][:href]).to eq("/api/v2/artists/{albums.artist}")
|
75
77
|
MyApp::AlbumSerializer.href_prefix = original
|
76
78
|
end
|
77
79
|
end
|
@@ -79,17 +81,17 @@ describe RestPack::Serializer::SideLoading do
|
|
79
81
|
describe "#filterable_by" do
|
80
82
|
context "a model with no :belongs_to relations" do
|
81
83
|
it "is filterable by :id only" do
|
82
|
-
MyApp::ArtistSerializer.filterable_by.
|
84
|
+
expect(MyApp::ArtistSerializer.filterable_by).to eq([:id])
|
83
85
|
end
|
84
86
|
end
|
85
87
|
context "a model with a single :belongs_to relations" do
|
86
88
|
it "is filterable by primary key and foreign keys" do
|
87
|
-
MyApp::AlbumSerializer.filterable_by.
|
89
|
+
expect(MyApp::AlbumSerializer.filterable_by).to eq([:id, :artist_id, :year])
|
88
90
|
end
|
89
91
|
end
|
90
92
|
context "a model with multiple :belongs_to relations" do
|
91
93
|
it "is filterable by primary key and foreign keys" do
|
92
|
-
MyApp::SongSerializer.filterable_by.
|
94
|
+
expect(MyApp::SongSerializer.filterable_by).to eq([:id, :artist_id, :album_id, :title])
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
@@ -12,15 +12,15 @@ describe RestPack::Serializer::Single do
|
|
12
12
|
let(:context) { { } }
|
13
13
|
|
14
14
|
it "returns a resource by id" do
|
15
|
-
resource[:id].
|
16
|
-
resource[:title].
|
15
|
+
expect(resource[:id]).to eq(@song.id.to_s)
|
16
|
+
expect(resource[:title]).to eq(@song.title)
|
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[:title].
|
23
|
+
expect(resource[:title]).to eq(@song.title.reverse)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -28,7 +28,7 @@ describe RestPack::Serializer::Single do
|
|
28
28
|
let(:params) { { id: @song.id + 100 } }
|
29
29
|
|
30
30
|
it "returns nil" do
|
31
|
-
resource.
|
31
|
+
expect(resource).to eq(nil)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/factory.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'factory_girl'
|
2
2
|
|
3
3
|
FactoryGirl.define do
|
4
|
-
factory :artist, :
|
5
|
-
sequence(:name) {|n| "Artist ##{n}" }
|
6
|
-
sequence(:website) {|n| "http://website#{n}.com/" }
|
4
|
+
factory :artist, class: MyApp::Artist do
|
5
|
+
sequence(:name) { |n| "Artist ##{n}" }
|
6
|
+
sequence(:website) { |n| "http://website#{n}.com/" }
|
7
7
|
|
8
8
|
factory :artist_with_albums do
|
9
|
-
|
10
|
-
album_count 3
|
11
|
-
end
|
9
|
+
transient { album_count 3 }
|
12
10
|
|
13
11
|
after(:create) do |artist, evaluator|
|
14
12
|
create_list(:album_with_songs, evaluator.album_count, artist: artist)
|
@@ -16,33 +14,29 @@ FactoryGirl.define do
|
|
16
14
|
end
|
17
15
|
|
18
16
|
factory :artist_with_fans do
|
19
|
-
|
20
|
-
|
21
|
-
end
|
17
|
+
transient { fans_count 3 }
|
18
|
+
|
22
19
|
after(:create) do |artist, evaluator|
|
23
20
|
create_list(:payment, evaluator.fans_count, artist: artist)
|
24
21
|
end
|
25
22
|
end
|
26
23
|
|
27
24
|
factory :artist_with_stalkers do
|
28
|
-
|
29
|
-
|
30
|
-
end
|
25
|
+
transient { stalker_count 2 }
|
26
|
+
|
31
27
|
after(:create) do |artist, evaluator|
|
32
|
-
create_list(:stalker, evaluator.stalker_count, artists: [
|
28
|
+
create_list(:stalker, evaluator.stalker_count, artists: [artist])
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
|
-
factory :album, :
|
38
|
-
sequence(:title) {|n| "Album ##{n}" }
|
39
|
-
sequence(:year) {|n| 1960 + n }
|
33
|
+
factory :album, class: MyApp::Album do
|
34
|
+
sequence(:title) { |n| "Album ##{n}" }
|
35
|
+
sequence(:year) { |n| 1960 + n }
|
40
36
|
artist
|
41
37
|
|
42
38
|
factory :album_with_songs do
|
43
|
-
|
44
|
-
song_count 10
|
45
|
-
end
|
39
|
+
transient { song_count 10 }
|
46
40
|
|
47
41
|
after(:create) do |album, evaluator|
|
48
42
|
create_list(:song, evaluator.song_count, album: album, artist: album.artist)
|
@@ -50,23 +44,23 @@ FactoryGirl.define do
|
|
50
44
|
end
|
51
45
|
end
|
52
46
|
|
53
|
-
factory :song, :
|
54
|
-
sequence(:title) {|n| "Song ##{n}" }
|
47
|
+
factory :song, class: MyApp::Song do
|
48
|
+
sequence(:title) { |n| "Song ##{n}" }
|
55
49
|
artist
|
56
50
|
album
|
57
51
|
end
|
58
52
|
|
59
|
-
factory :payment, :
|
53
|
+
factory :payment, class: MyApp::Payment do
|
60
54
|
amount 999
|
61
55
|
artist
|
62
56
|
fan
|
63
57
|
end
|
64
58
|
|
65
|
-
factory :fan, :
|
66
|
-
sequence(:name) {|n| "Fan ##{n}"}
|
59
|
+
factory :fan, class: MyApp::Fan do
|
60
|
+
sequence(:name) { |n| "Fan ##{n}" }
|
67
61
|
end
|
68
62
|
|
69
|
-
factory :stalker, :
|
70
|
-
sequence(:name) {|n| "Stalker ##{n}"}
|
63
|
+
factory :stalker, class: MyApp::Stalker do
|
64
|
+
sequence(:name) { |n| "Stalker ##{n}" }
|
71
65
|
end
|
72
66
|
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.6.
|
4
|
+
version: 0.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Joyce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 4.0.3
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '6.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 4.0.3
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '6.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activerecord
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: 4.0.3
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '6.0'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,21 +49,35 @@ dependencies:
|
|
49
49
|
version: 4.0.3
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '6.0'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: kaminari
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
59
|
+
version: 0.17.0
|
60
60
|
type: :runtime
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
66
|
+
version: 0.17.0
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: kaminari-mongoid
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0.1'
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0.1'
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
82
|
name: restpack_gem
|
69
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,70 +98,70 @@ dependencies:
|
|
84
98
|
requirements:
|
85
99
|
- - "~>"
|
86
100
|
- !ruby/object:Gem::Version
|
87
|
-
version: 11.
|
101
|
+
version: '11.3'
|
88
102
|
type: :development
|
89
103
|
prerelease: false
|
90
104
|
version_requirements: !ruby/object:Gem::Requirement
|
91
105
|
requirements:
|
92
106
|
- - "~>"
|
93
107
|
- !ruby/object:Gem::Version
|
94
|
-
version: 11.
|
108
|
+
version: '11.3'
|
95
109
|
- !ruby/object:Gem::Dependency
|
96
110
|
name: guard-rspec
|
97
111
|
requirement: !ruby/object:Gem::Requirement
|
98
112
|
requirements:
|
99
113
|
- - "~>"
|
100
114
|
- !ruby/object:Gem::Version
|
101
|
-
version: 4.
|
115
|
+
version: '4.7'
|
102
116
|
type: :development
|
103
117
|
prerelease: false
|
104
118
|
version_requirements: !ruby/object:Gem::Requirement
|
105
119
|
requirements:
|
106
120
|
- - "~>"
|
107
121
|
- !ruby/object:Gem::Version
|
108
|
-
version: 4.
|
122
|
+
version: '4.7'
|
109
123
|
- !ruby/object:Gem::Dependency
|
110
124
|
name: factory_girl
|
111
125
|
requirement: !ruby/object:Gem::Requirement
|
112
126
|
requirements:
|
113
127
|
- - "~>"
|
114
128
|
- !ruby/object:Gem::Version
|
115
|
-
version: 4.7
|
129
|
+
version: '4.7'
|
116
130
|
type: :development
|
117
131
|
prerelease: false
|
118
132
|
version_requirements: !ruby/object:Gem::Requirement
|
119
133
|
requirements:
|
120
134
|
- - "~>"
|
121
135
|
- !ruby/object:Gem::Version
|
122
|
-
version: 4.7
|
136
|
+
version: '4.7'
|
123
137
|
- !ruby/object:Gem::Dependency
|
124
138
|
name: sqlite3
|
125
139
|
requirement: !ruby/object:Gem::Requirement
|
126
140
|
requirements:
|
127
141
|
- - "~>"
|
128
142
|
- !ruby/object:Gem::Version
|
129
|
-
version: 1.3
|
143
|
+
version: '1.3'
|
130
144
|
type: :development
|
131
145
|
prerelease: false
|
132
146
|
version_requirements: !ruby/object:Gem::Requirement
|
133
147
|
requirements:
|
134
148
|
- - "~>"
|
135
149
|
- !ruby/object:Gem::Version
|
136
|
-
version: 1.3
|
150
|
+
version: '1.3'
|
137
151
|
- !ruby/object:Gem::Dependency
|
138
152
|
name: database_cleaner
|
139
153
|
requirement: !ruby/object:Gem::Requirement
|
140
154
|
requirements:
|
141
155
|
- - "~>"
|
142
156
|
- !ruby/object:Gem::Version
|
143
|
-
version: 1.5
|
157
|
+
version: '1.5'
|
144
158
|
type: :development
|
145
159
|
prerelease: false
|
146
160
|
version_requirements: !ruby/object:Gem::Requirement
|
147
161
|
requirements:
|
148
162
|
- - "~>"
|
149
163
|
- !ruby/object:Gem::Version
|
150
|
-
version: 1.5
|
164
|
+
version: '1.5'
|
151
165
|
- !ruby/object:Gem::Dependency
|
152
166
|
name: rspec
|
153
167
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,19 +191,19 @@ dependencies:
|
|
177
191
|
- !ruby/object:Gem::Version
|
178
192
|
version: '0'
|
179
193
|
- !ruby/object:Gem::Dependency
|
180
|
-
name:
|
194
|
+
name: protected_attributes_continued
|
181
195
|
requirement: !ruby/object:Gem::Requirement
|
182
196
|
requirements:
|
183
197
|
- - "~>"
|
184
198
|
- !ruby/object:Gem::Version
|
185
|
-
version: 1.
|
199
|
+
version: '1.2'
|
186
200
|
type: :development
|
187
201
|
prerelease: false
|
188
202
|
version_requirements: !ruby/object:Gem::Requirement
|
189
203
|
requirements:
|
190
204
|
- - "~>"
|
191
205
|
- !ruby/object:Gem::Version
|
192
|
-
version: 1.
|
206
|
+
version: '1.2'
|
193
207
|
description: Model serialization, paging, side-loading and filtering
|
194
208
|
email:
|
195
209
|
- gavinjoyce@gmail.com
|
@@ -285,4 +299,3 @@ test_files:
|
|
285
299
|
- spec/serializable/sortable_spec.rb
|
286
300
|
- spec/spec_helper.rb
|
287
301
|
- spec/support/factory.rb
|
288
|
-
has_rdoc:
|