restpack_serializer 0.6.8 → 0.6.13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7af1bc27d7c8835c4661909c30fc9dd85db99379
4
- data.tar.gz: cdd08668865b3200810f2f296a6729b5aa29a1e1
2
+ SHA256:
3
+ metadata.gz: 5cbdfc54c01006c75a8db9b73a60b7dc713e17257e77991b82bf4b3f3d22b537
4
+ data.tar.gz: 126c3c857097eb24d9f45aa1d9a1a2b40363f1246edc869350249b6fba30c3f8
5
5
  SHA512:
6
- metadata.gz: a9186bacc0ef4f585bd8e053e2ba678f980ce263f026fb6623812076bc22f3dc0d10490ac29f4bf31fa0c397dd205e86e96a59825c5cda097516a01914612fd5
7
- data.tar.gz: e7e1ab1b5d90c07c5868a106888a0079f8fa3e4ad638ec97ba2d7d5b2114f75cd9d63e6f4898563fe208625d8bac8f02496c60b2633c5582ee55dac0349784cc
6
+ metadata.gz: 6002f9e445e71c1d4353b7954421dc80d6e1742ff5444f5701e3612a78a2cbd21b03de9a2347b0d8f534034e75a3d5badfdd75a7a26c037ef7897f394a5f7784
7
+ data.tar.gz: 7f81b17da0dd9cf8855108a00174c8ac0ce9df55732f87b0a1691f838abf90f18d7711363cdbf8b43326b759350250ef9e84e4dbc08b0e0c93280798205c20fb
@@ -0,0 +1,29 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+
9
+ strategy:
10
+ fail-fast: false
11
+
12
+ matrix:
13
+ ruby-version:
14
+ - 2.1
15
+ - 2.2
16
+ - 2.3
17
+ - 2.4
18
+ - 2.5
19
+ - 2.6
20
+ - 2.7
21
+ - 3.0
22
+
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ - uses: ruby/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby-version }}
28
+ bundler-cache: true
29
+ - run: bundle exec rake test
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.7.2
data/Gemfile CHANGED
@@ -3,3 +3,8 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'coveralls', require: false
6
+ gem 'memory_profiler', require: false
7
+
8
+ if RUBY_VERSION < "2.2"
9
+ gem "sqlite3", "~> 1.3.0"
10
+ end
data/Rakefile CHANGED
@@ -4,4 +4,5 @@ RestPack::Gem::Tasks.load_tasks
4
4
  desc "Run some performance tests"
5
5
  task :perf do
6
6
  require_relative 'performance/perf.rb'
7
+ require_relative 'performance/mem.rb'
7
8
  end
@@ -6,7 +6,7 @@ require_relative 'restpack_serializer/serializable'
6
6
  require_relative 'restpack_serializer/factory'
7
7
  require_relative 'restpack_serializer/result'
8
8
 
9
- Kaminari::Hooks.init
9
+ Kaminari::Hooks.init if defined?(Kaminari::Hooks)
10
10
 
11
11
  module RestPack
12
12
  module Serializer
@@ -34,7 +34,7 @@ module RestPack
34
34
  def as_json(model, context = {})
35
35
  return if model.nil?
36
36
  if model.kind_of?(Array)
37
- return model.map { |item| as_json(item, context) }
37
+ return model.map { |item| self.class.new.as_json(item, context) }
38
38
  end
39
39
 
40
40
  apply_whitelist_and_blacklist(context)
@@ -57,11 +57,15 @@ module RestPack
57
57
  end
58
58
 
59
59
  add_custom_attributes(data)
60
- add_links(model, data) unless self.class.associations.empty?
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 = self.user_defined_methods || []
144
- return true if user_defined_methods.include?(method_name)
145
- return self.superclass.try(:has_user_defined_method?, method_name)
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 @can_includes
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)
@@ -1,5 +1,5 @@
1
1
  module RestPack
2
2
  module Serializer
3
- VERSION = '0.6.8'
3
+ VERSION = '0.6.13'
4
4
  end
5
5
  end
@@ -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)
@@ -17,10 +17,9 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'activesupport', ['>= 4.0.3', '< 6.0']
21
- gem.add_dependency 'activerecord', ['>= 4.0.3', '< 6.0']
22
- gem.add_dependency 'kaminari', '~> 0.17.0'
23
- gem.add_dependency 'kaminari-mongoid', '~> 0.1'
20
+ gem.add_dependency 'activesupport', ['>= 4.0.3', '< 7.0']
21
+ gem.add_dependency 'activerecord', ['>= 4.0.3', '< 7.0']
22
+ gem.add_dependency 'kaminari', ['>= 0.17.0', '< 2.0']
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
@@ -1,12 +1,13 @@
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',
7
6
  :database => 'test.db'
8
7
  )
9
8
 
9
+ ActiveRecord::Migration.verbose = false
10
+
10
11
  ActiveRecord::Schema.define(:version => 1) do
11
12
  create_table "artists", :force => true do |t|
12
13
  t.string "name"
@@ -66,8 +67,6 @@ end
66
67
 
67
68
  module MyApp
68
69
  class Artist < ActiveRecord::Base
69
- attr_accessible :name, :website
70
-
71
70
  has_many :albums
72
71
  has_many :songs
73
72
  has_many :payments
@@ -76,7 +75,6 @@ module MyApp
76
75
  end
77
76
 
78
77
  class Album < ActiveRecord::Base
79
- attr_accessible :title, :year, :artist
80
78
  scope :classic, -> { where("year < 1950") }
81
79
 
82
80
  belongs_to :artist
@@ -85,34 +83,27 @@ module MyApp
85
83
  end
86
84
 
87
85
  class AlbumReview < ActiveRecord::Base
88
- attr_accessible :message
89
86
  belongs_to :album
90
87
  end
91
88
 
92
89
  class Song < ActiveRecord::Base
93
90
  default_scope -> { order(id: :asc) }
94
91
 
95
- attr_accessible :title, :artist, :album
96
-
97
92
  belongs_to :artist
98
93
  belongs_to :album
99
94
  end
100
95
 
101
96
  class Payment < ActiveRecord::Base
102
- attr_accessible :amount, :artist
103
-
104
97
  belongs_to :artist
105
98
  belongs_to :fan
106
99
  end
107
100
 
108
101
  class Fan < ActiveRecord::Base
109
- attr_accessible :name
110
102
  has_many :payments
111
103
  has_many :artists, :through => :albums
112
104
  end
113
105
 
114
106
  class Stalker < ActiveRecord::Base
115
- attr_accessible :name
116
107
  has_and_belongs_to_many :artists
117
108
  end
118
109
  end
@@ -79,6 +79,27 @@ describe RestPack::Serializer do
79
79
  end
80
80
  end
81
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
+ ])
100
+ end
101
+ end
102
+
82
103
  class PersonSerializer
83
104
  include RestPack::Serializer
84
105
  attributes :id, :name, :description, :href, :admin_info, :string_keys
@@ -292,6 +313,20 @@ describe RestPack::Serializer do
292
313
  end
293
314
  end
294
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
+
295
330
  describe "#model_class" do
296
331
  it "extracts the Model name from the Serializer name" do
297
332
  expect(PersonSerializer.model_class).to eq(Person)
@@ -5,6 +5,8 @@ require './spec/fixtures/serializers'
5
5
  require './spec/support/factory'
6
6
  require 'database_cleaner'
7
7
  require 'coveralls'
8
+
9
+ Coveralls::Output.silent = true unless ENV["CI"]
8
10
  Coveralls.wear!
9
11
  FactoryGirl.find_definitions
10
12
 
@@ -20,10 +22,6 @@ RSpec.configure do |config|
20
22
  DatabaseCleaner.strategy = :transaction
21
23
  end
22
24
 
23
- config.before(:each, :js => true) do
24
- DatabaseCleaner.strategy = :truncation
25
- end
26
-
27
25
  config.before(:each) do
28
26
  DatabaseCleaner.start
29
27
  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.8
4
+ version: 0.6.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Joyce
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-24 00:00:00.000000000 Z
11
+ date: 2021-01-09 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: '6.0'
22
+ version: '7.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: '6.0'
32
+ version: '7.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: '6.0'
42
+ version: '7.0'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,35 +49,27 @@ dependencies:
49
49
  version: 4.0.3
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '6.0'
52
+ version: '7.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
59
  version: 0.17.0
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
60
63
  type: :runtime
61
64
  prerelease: false
62
65
  version_requirements: !ruby/object:Gem::Requirement
63
66
  requirements:
64
- - - "~>"
67
+ - - ">="
65
68
  - !ruby/object:Gem::Version
66
69
  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
- - - "~>"
70
+ - - "<"
79
71
  - !ruby/object:Gem::Version
80
- version: '0.1'
72
+ version: '2.0'
81
73
  - !ruby/object:Gem::Dependency
82
74
  name: restpack_gem
83
75
  requirement: !ruby/object:Gem::Requirement
@@ -190,20 +182,6 @@ dependencies:
190
182
  - - ">="
191
183
  - !ruby/object:Gem::Version
192
184
  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
185
  description: Model serialization, paging, side-loading and filtering
208
186
  email:
209
187
  - gavinjoyce@gmail.com
@@ -211,10 +189,10 @@ executables: []
211
189
  extensions: []
212
190
  extra_rdoc_files: []
213
191
  files:
192
+ - ".github/workflows/ci.yml"
214
193
  - ".gitignore"
215
194
  - ".rspec"
216
195
  - ".ruby-version"
217
- - ".travis.yml"
218
196
  - Gemfile
219
197
  - Guardfile
220
198
  - LICENSE
@@ -235,6 +213,7 @@ files:
235
213
  - lib/restpack_serializer/serializable/single.rb
236
214
  - lib/restpack_serializer/serializable/sortable.rb
237
215
  - lib/restpack_serializer/version.rb
216
+ - performance/mem.rb
238
217
  - performance/perf.rb
239
218
  - restpack_serializer.gemspec
240
219
  - spec/factory/factory_spec.rb
@@ -259,7 +238,7 @@ files:
259
238
  homepage: https://github.com/RestPack
260
239
  licenses: []
261
240
  metadata: {}
262
- post_install_message:
241
+ post_install_message:
263
242
  rdoc_options: []
264
243
  require_paths:
265
244
  - lib
@@ -274,9 +253,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
253
  - !ruby/object:Gem::Version
275
254
  version: '0'
276
255
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.5.1
279
- signing_key:
256
+ rubygems_version: 3.1.4
257
+ signing_key:
280
258
  specification_version: 4
281
259
  summary: Model serialization, paging, side-loading and filtering
282
260
  test_files:
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.1
4
- script: bundle exec rake test