restpack_serializer 0.6.7 → 0.6.8
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|