restpack_serializer 0.4.7 → 0.4.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa7cfdbe2a9599b02355d695b51fb1ba6bd50bed
|
4
|
+
data.tar.gz: aa3d9b0c277baf98f13fb7ab9c798a445c903a7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9adc45be506cf71e5d2edb1d71dd09e5d92132b6f2252d0894ac47537096840bf8b9b7cc77551ef75445eeaefdfb99314ebc075e5dc706c4322ae2136e62e6a
|
7
|
+
data.tar.gz: ba50400c0c244ea96efcd89988026c58f4f9c11cdae1a53b0c0ea691243218b4d78181710f1fc3ee43a1a03e3db2caf2bbc713a12ff01673ce036d73ec8f9752
|
@@ -28,7 +28,8 @@ module RestPack::Serializer::Paging
|
|
28
28
|
|
29
29
|
side_load_data = side_loads(page, options)
|
30
30
|
result[:meta].merge!(side_load_data[:meta] || {})
|
31
|
-
result.merge side_load_data.except(:meta)
|
31
|
+
result = result.merge side_load_data.except(:meta)
|
32
|
+
inject_to_many_links result
|
32
33
|
end
|
33
34
|
|
34
35
|
private
|
@@ -68,5 +69,32 @@ module RestPack::Serializer::Paging
|
|
68
69
|
url += '?' + params.join('&') if params.any?
|
69
70
|
url
|
70
71
|
end
|
72
|
+
|
73
|
+
def inject_to_many_links(result) #TODO: GJ: extract this into a result class and refactor
|
74
|
+
keys = result.keys - [:meta, :links]
|
75
|
+
|
76
|
+
keys.each do |key|
|
77
|
+
result[key].each do |item|
|
78
|
+
if item[:links]
|
79
|
+
item[:links].each do |link_key, link_value|
|
80
|
+
unless link_value.is_a? Array
|
81
|
+
plural_linked_key = "#{link_key}s".to_sym
|
82
|
+
|
83
|
+
if result[plural_linked_key]
|
84
|
+
linked_resource = result[plural_linked_key].find { |i| i[:id] == link_value }
|
85
|
+
if linked_resource
|
86
|
+
linked_resource[:links] ||= {}
|
87
|
+
linked_resource[:links][key] ||= []
|
88
|
+
linked_resource[:links][key] << item[:id]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
result
|
98
|
+
end
|
71
99
|
end
|
72
100
|
end
|
@@ -112,6 +112,19 @@ describe RestPack::Serializer::Paging do
|
|
112
112
|
page[:meta][:songs][:next_href].should == '/songs.json?page=2&include=albums'
|
113
113
|
end
|
114
114
|
|
115
|
+
it "includes links between documents" do
|
116
|
+
song = page[:songs].first
|
117
|
+
song_model = MyApp::Song.find(song[:id])
|
118
|
+
song[:links][:album].should == song_model.album_id.to_s
|
119
|
+
song[:links][:artist].should == song_model.artist_id.to_s
|
120
|
+
|
121
|
+
album = page[:albums].first
|
122
|
+
album_model = MyApp::Album.find(album[:id])
|
123
|
+
|
124
|
+
album[:links][:artist].should == album_model.artist_id.to_s
|
125
|
+
album[:links][:songs].should == page[:songs].map { |song| song[:id] }
|
126
|
+
end
|
127
|
+
|
115
128
|
context "with includes as comma delimited string" do
|
116
129
|
let(:params) { { include: "albums,artists" } }
|
117
130
|
it "includes side-loaded models" do
|
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.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: 2013-11-
|
11
|
+
date: 2013-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|