restpack_serializer 0.6.10 → 0.6.11
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/Gemfile +1 -0
- data/Rakefile +1 -0
- data/lib/restpack_serializer/serializable.rb +16 -4
- data/lib/restpack_serializer/serializable/side_loading.rb +5 -1
- data/lib/restpack_serializer/version.rb +1 -1
- data/performance/mem.rb +49 -0
- data/restpack_serializer.gemspec +0 -2
- data/spec/fixtures/db.rb +0 -11
- data/spec/serializable/serializer_spec.rb +14 -0
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc9e5ce33121a450eefdd7af1aba1f70d6bc6a5d013f544b553dee69f22db41d
|
4
|
+
data.tar.gz: 259cca75737c8c32da93b489d9162cc49807bf7deafd2fcf86b06e508779a93a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b507e519351d23fbfa540950f90b2f7a625d04d313d80baf5e500c67a63498ceb44efac4c356e91eaf074a3df1f56b19819fffff9daf299a956b15813272a5f
|
7
|
+
data.tar.gz: 2748b0bc4dae717f07697326e61d5f9077dcc55075cf0b5416dee5c172da810565dfb2d6a65bb31dac0196510483839be3e5245f835d4c75b5c4d0b52998d5b3
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -57,11 +57,15 @@ module RestPack
|
|
57
57
|
end
|
58
58
|
|
59
59
|
add_custom_attributes(data)
|
60
|
-
add_links(model, data)
|
60
|
+
add_links(model, data) if self.class.has_associations?
|
61
61
|
|
62
62
|
data
|
63
63
|
end
|
64
64
|
|
65
|
+
def to_json(model, context = {})
|
66
|
+
as_json(model, context).to_json
|
67
|
+
end
|
68
|
+
|
65
69
|
def custom_attributes
|
66
70
|
nil
|
67
71
|
end
|
@@ -140,9 +144,13 @@ module RestPack
|
|
140
144
|
end
|
141
145
|
|
142
146
|
def has_user_defined_method?(method_name)
|
143
|
-
user_defined_methods
|
144
|
-
|
145
|
-
|
147
|
+
if user_defined_methods && user_defined_methods.include?(method_name)
|
148
|
+
true
|
149
|
+
elsif superclass.respond_to?(:has_user_defined_method?)
|
150
|
+
superclass.has_user_defined_method?(method_name)
|
151
|
+
else
|
152
|
+
false
|
153
|
+
end
|
146
154
|
end
|
147
155
|
|
148
156
|
def memoized_has_user_defined_method?(method_name)
|
@@ -165,6 +173,10 @@ module RestPack
|
|
165
173
|
new.as_json(model, context)
|
166
174
|
end
|
167
175
|
|
176
|
+
def to_json(model, context = {})
|
177
|
+
new.as_json(model, context).to_json
|
178
|
+
end
|
179
|
+
|
168
180
|
def serialize(models, context = {})
|
169
181
|
models = [models] unless models.kind_of?(Array)
|
170
182
|
|
@@ -44,8 +44,12 @@ module RestPack::Serializer::SideLoading
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
def has_associations?
|
48
|
+
@can_includes
|
49
|
+
end
|
50
|
+
|
47
51
|
def associations
|
48
|
-
return [] unless
|
52
|
+
return [] unless has_associations?
|
49
53
|
can_includes.map do |include|
|
50
54
|
association = association_from_include(include)
|
51
55
|
association if supported_association?(association.macro)
|
data/performance/mem.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'memory_profiler'
|
2
|
+
require_relative '../lib/restpack_serializer'
|
3
|
+
|
4
|
+
class SimpleSerializer
|
5
|
+
include RestPack::Serializer
|
6
|
+
attributes :id, :title
|
7
|
+
end
|
8
|
+
|
9
|
+
simple_model = {
|
10
|
+
id: "123",
|
11
|
+
title: 'This is the title',
|
12
|
+
}
|
13
|
+
|
14
|
+
# warmup
|
15
|
+
SimpleSerializer.as_json(simple_model)
|
16
|
+
|
17
|
+
report = MemoryProfiler.report do
|
18
|
+
SimpleSerializer.as_json(simple_model)
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "="*64
|
22
|
+
puts "Simple Serializer:"
|
23
|
+
puts "="*64
|
24
|
+
|
25
|
+
report.pretty_print(detailed_report: false)
|
26
|
+
|
27
|
+
class ComplexSerializer
|
28
|
+
include RestPack::Serializer
|
29
|
+
|
30
|
+
attributes :a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l, :m, :n, :o, :p, :q, :r, :s, :t
|
31
|
+
end
|
32
|
+
|
33
|
+
complex_model = {
|
34
|
+
a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10,
|
35
|
+
k: 11, l: 12, m: 13, n: 14, o: 15, p: 16, q: 17, r: 18, s: 19, t: 20,
|
36
|
+
}
|
37
|
+
|
38
|
+
# warmup
|
39
|
+
ComplexSerializer.as_json(complex_model)
|
40
|
+
|
41
|
+
report = MemoryProfiler.report do
|
42
|
+
ComplexSerializer.as_json(complex_model)
|
43
|
+
end
|
44
|
+
|
45
|
+
puts "="*64
|
46
|
+
puts "Complex Serializer:"
|
47
|
+
puts "="*64
|
48
|
+
|
49
|
+
report.pretty_print(detailed_report: false)
|
data/restpack_serializer.gemspec
CHANGED
@@ -20,7 +20,6 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency 'activesupport', ['>= 4.0.3', '< 6.1']
|
21
21
|
gem.add_dependency 'activerecord', ['>= 4.0.3', '< 6.1']
|
22
22
|
gem.add_dependency 'kaminari', '~> 0.17.0'
|
23
|
-
gem.add_dependency 'kaminari-mongoid', '~> 0.1'
|
24
23
|
|
25
24
|
gem.add_development_dependency 'restpack_gem', '~> 0.0.9'
|
26
25
|
gem.add_development_dependency 'rake', '~> 11.3'
|
@@ -30,5 +29,4 @@ Gem::Specification.new do |gem|
|
|
30
29
|
gem.add_development_dependency 'database_cleaner', '~> 1.5'
|
31
30
|
gem.add_development_dependency 'rspec'
|
32
31
|
gem.add_development_dependency 'bump'
|
33
|
-
gem.add_development_dependency 'protected_attributes_continued', '~> 1.2'
|
34
32
|
end
|
data/spec/fixtures/db.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'sqlite3'
|
2
2
|
require 'active_record'
|
3
|
-
require 'protected_attributes_continued'
|
4
3
|
|
5
4
|
ActiveRecord::Base.establish_connection(
|
6
5
|
:adapter => 'sqlite3',
|
@@ -66,8 +65,6 @@ end
|
|
66
65
|
|
67
66
|
module MyApp
|
68
67
|
class Artist < ActiveRecord::Base
|
69
|
-
attr_accessible :name, :website
|
70
|
-
|
71
68
|
has_many :albums
|
72
69
|
has_many :songs
|
73
70
|
has_many :payments
|
@@ -76,7 +73,6 @@ module MyApp
|
|
76
73
|
end
|
77
74
|
|
78
75
|
class Album < ActiveRecord::Base
|
79
|
-
attr_accessible :title, :year, :artist
|
80
76
|
scope :classic, -> { where("year < 1950") }
|
81
77
|
|
82
78
|
belongs_to :artist
|
@@ -85,34 +81,27 @@ module MyApp
|
|
85
81
|
end
|
86
82
|
|
87
83
|
class AlbumReview < ActiveRecord::Base
|
88
|
-
attr_accessible :message
|
89
84
|
belongs_to :album
|
90
85
|
end
|
91
86
|
|
92
87
|
class Song < ActiveRecord::Base
|
93
88
|
default_scope -> { order(id: :asc) }
|
94
89
|
|
95
|
-
attr_accessible :title, :artist, :album
|
96
|
-
|
97
90
|
belongs_to :artist
|
98
91
|
belongs_to :album
|
99
92
|
end
|
100
93
|
|
101
94
|
class Payment < ActiveRecord::Base
|
102
|
-
attr_accessible :amount, :artist
|
103
|
-
|
104
95
|
belongs_to :artist
|
105
96
|
belongs_to :fan
|
106
97
|
end
|
107
98
|
|
108
99
|
class Fan < ActiveRecord::Base
|
109
|
-
attr_accessible :name
|
110
100
|
has_many :payments
|
111
101
|
has_many :artists, :through => :albums
|
112
102
|
end
|
113
103
|
|
114
104
|
class Stalker < ActiveRecord::Base
|
115
|
-
attr_accessible :name
|
116
105
|
has_and_belongs_to_many :artists
|
117
106
|
end
|
118
107
|
end
|
@@ -313,6 +313,20 @@ describe RestPack::Serializer do
|
|
313
313
|
end
|
314
314
|
end
|
315
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
|
+
|
316
330
|
describe "#model_class" do
|
317
331
|
it "extracts the Model name from the Serializer name" do
|
318
332
|
expect(PersonSerializer.model_class).to eq(Person)
|
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.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Joyce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -64,20 +64,6 @@ dependencies:
|
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
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'
|
81
67
|
- !ruby/object:Gem::Dependency
|
82
68
|
name: restpack_gem
|
83
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,20 +176,6 @@ dependencies:
|
|
190
176
|
- - ">="
|
191
177
|
- !ruby/object:Gem::Version
|
192
178
|
version: '0'
|
193
|
-
- !ruby/object:Gem::Dependency
|
194
|
-
name: protected_attributes_continued
|
195
|
-
requirement: !ruby/object:Gem::Requirement
|
196
|
-
requirements:
|
197
|
-
- - "~>"
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
version: '1.2'
|
200
|
-
type: :development
|
201
|
-
prerelease: false
|
202
|
-
version_requirements: !ruby/object:Gem::Requirement
|
203
|
-
requirements:
|
204
|
-
- - "~>"
|
205
|
-
- !ruby/object:Gem::Version
|
206
|
-
version: '1.2'
|
207
179
|
description: Model serialization, paging, side-loading and filtering
|
208
180
|
email:
|
209
181
|
- gavinjoyce@gmail.com
|
@@ -235,6 +207,7 @@ files:
|
|
235
207
|
- lib/restpack_serializer/serializable/single.rb
|
236
208
|
- lib/restpack_serializer/serializable/sortable.rb
|
237
209
|
- lib/restpack_serializer/version.rb
|
210
|
+
- performance/mem.rb
|
238
211
|
- performance/perf.rb
|
239
212
|
- restpack_serializer.gemspec
|
240
213
|
- spec/factory/factory_spec.rb
|
@@ -274,8 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
247
|
- !ruby/object:Gem::Version
|
275
248
|
version: '0'
|
276
249
|
requirements: []
|
277
|
-
|
278
|
-
rubygems_version: 2.7.6.2
|
250
|
+
rubygems_version: 3.0.3
|
279
251
|
signing_key:
|
280
252
|
specification_version: 4
|
281
253
|
summary: Model serialization, paging, side-loading and filtering
|