ams_lazy_relationships 0.1.3 → 0.1.4

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
2
  SHA1:
3
- metadata.gz: 8f2d4206f5ac6fe534e19162405e4d6993e5a8ea
4
- data.tar.gz: 78c94b7d3b54794b4ce8dd7f9b5645e694f2eff7
3
+ metadata.gz: dbafe51edd7b544ae1aa9f0338cb50d22a54d9f1
4
+ data.tar.gz: d60d837607389b59a521deb7a3486d3ec9c951b5
5
5
  SHA512:
6
- metadata.gz: 80230d616e3b5007577ca2053080a1f11eda4d7b2978dd30ebb56d79819e5bd6555668add82b446cf381b00fc5684bf63bc13cb70085e2d818ba7d1d072ec228
7
- data.tar.gz: c79403dd23812c678235b63a207e218c2c72eda850c7635fe0d962b536305a69c8188d85449e3f07a409702c22db9b573781f9ae6e6a172eaf2bed126fcaf101
6
+ metadata.gz: bee54b4366b2ddb41a43c4ca79db09162d7a2910e2570e046d57c79fb5bfee4031d2c2674af2dd04e5c276c93b0d8805a8a7871239bcbb60386310ac7e0cbc3b
7
+ data.tar.gz: 1de8a52d3743bcbeb955bbda27f8974c9d34dd6b3a3c1350c75fa2b646b9af955e53276cedd6b52b052516e781fe6bfc79f8c1f29ce20fe7cb6f612301121525
@@ -11,15 +11,11 @@ gemfile:
11
11
  cache: bundler
12
12
  rvm:
13
13
  - 2.3.4
14
- before_install:
15
- - gem install bundler:1.17 undercover --no-doc
16
14
  before_script:
17
15
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
18
16
  - chmod +x ./cc-test-reporter
19
17
  - ./cc-test-reporter before-build
20
18
  script:
21
19
  - bundle exec rake
22
- - git pull origin master:master
23
- - undercover --compare master
24
20
  after_script:
25
21
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,5 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.1.4](https://github.com/Bajena/ams_lazy_relationships/tree/v0.1.4) (2019-06-02)
4
+ [Full Changelog](https://github.com/Bajena/ams_lazy_relationships/compare/v0.1.3...v0.1.4)
5
+
6
+ **Closed issues:**
7
+
8
+ - Use replace\_methods: false by default in loaders [\#28](https://github.com/Bajena/ams_lazy_relationships/issues/28)
9
+ - Require less restrictive batch-loader version [\#25](https://github.com/Bajena/ams_lazy_relationships/issues/25)
10
+ - Profile time and memory usage [\#21](https://github.com/Bajena/ams_lazy_relationships/issues/21)
11
+ - Loading circular relationships [\#20](https://github.com/Bajena/ams_lazy_relationships/issues/20)
12
+ - Add railtie [\#19](https://github.com/Bajena/ams_lazy_relationships/issues/19)
13
+
14
+ **Merged pull requests:**
15
+
16
+ - Use replace\_methods: false in batch loaders [\#29](https://github.com/Bajena/ams_lazy_relationships/pull/29) ([Bajena](https://github.com/Bajena))
17
+ - Add benchmark for speed & memory usage [\#27](https://github.com/Bajena/ams_lazy_relationships/pull/27) ([Bajena](https://github.com/Bajena))
18
+ - Require less restrictive batch loader version [\#26](https://github.com/Bajena/ams_lazy_relationships/pull/26) ([Bajena](https://github.com/Bajena))
19
+
3
20
  ## [v0.1.3](https://github.com/Bajena/ams_lazy_relationships/tree/v0.1.3) (2019-05-19)
4
21
  [Full Changelog](https://github.com/Bajena/ams_lazy_relationships/compare/0.1.2...v0.1.3)
5
22
 
@@ -53,4 +70,4 @@
53
70
 
54
71
 
55
72
 
56
- \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
73
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ams_lazy_relationships (0.1.3)
4
+ ams_lazy_relationships (0.1.4)
5
5
  active_model_serializers
6
- batch-loader (~> 1.2)
6
+ batch-loader (~> 1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -45,7 +45,9 @@ GEM
45
45
  thor (>= 0.14.0)
46
46
  arel (9.0.0)
47
47
  ast (2.4.0)
48
- batch-loader (1.3.0)
48
+ batch-loader (1.4.1)
49
+ benchmark-memory (0.1.2)
50
+ memory_profiler (~> 0.9)
49
51
  builder (3.2.3)
50
52
  case_transform (0.2)
51
53
  activesupport
@@ -80,6 +82,7 @@ GEM
80
82
  loofah (2.2.3)
81
83
  crass (~> 1.0.2)
82
84
  nokogiri (>= 1.5.9)
85
+ memory_profiler (0.9.13)
83
86
  method_source (0.8.2)
84
87
  mini_portile2 (2.4.0)
85
88
  minitest (5.11.3)
@@ -181,6 +184,7 @@ DEPENDENCIES
181
184
  activerecord
182
185
  ams_lazy_relationships!
183
186
  appraisal
187
+ benchmark-memory (~> 0.1)
184
188
  bundler (~> 1.17)
185
189
  db-query-matchers
186
190
  github_changelog_generator
data/README.md CHANGED
@@ -163,6 +163,36 @@ class BlogPostSerializer < BaseSerializer
163
163
  end
164
164
  ```
165
165
 
166
+ ## Performance comparison with vanilla AMS
167
+
168
+ In general the bigger and more complex your serialized records hierarchy is and the more latency you have in your DB the more you'll benefit from using this gem.
169
+ Example results for average size records tree (10 blog posts -> 10 comments each -> 1 user per comment, performed on local in-memory SQLite DB) are:
170
+
171
+ ### Time:
172
+
173
+ ```bash
174
+ # With lazy relationships: 0.860000 0.010000 0.870000 ( 0.870297)
175
+ # Vanilla AMS: 1.050000 0.000000 1.050000 ( 1.059801)
176
+ ```
177
+
178
+ This means your serializers should get **~13%** speed boost by introducing lazy relationships.
179
+
180
+ ### Memory:
181
+
182
+ ```bash
183
+ # With lazy relationships:
184
+ # 46.283M memsize ( 0.000 retained)
185
+ # 506.696k objects ( 0.000 retained)
186
+ # 50.000 strings ( 0.000 retained)
187
+ # Vanilla AMS: 42.738M memsize ( 0.000 retained)
188
+ # 545.266k objects ( 0.000 retained)
189
+ # 50.000 strings ( 0.000 retained)
190
+ ```
191
+
192
+ This means that serialization may consume **~5%** more memory.
193
+
194
+ Detailed benchmark script & results can be found [here](/spec/benchmark_spec.rb).
195
+
166
196
  ## Development
167
197
 
168
198
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,12 @@
1
+ # Release steps
2
+ 1. Bump VERSION constant
3
+ 2. Generate changelog and update
4
+ ```shell
5
+ CHANGELOG_GITHUB_TOKEN=<token> bundle exec rake changelog
6
+ ```
7
+ 3. Run `bundle` to regenerate Gemfile.lock
8
+ 4. Build and push to rubygems
9
+ ```shell
10
+ gem build ams_lazy_relationships
11
+ gem push ams_lazy_relationships-x.y.z.gem
12
+ ```
data/Rakefile CHANGED
@@ -11,5 +11,5 @@ task default: :spec
11
11
  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
12
12
  config.user = "Bajena"
13
13
  config.project = "ams_lazy_relationships"
14
- config.future_release = "0.1.2"
14
+ config.future_release = "v0.1.4"
15
15
  end
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.require_paths = ["lib"]
35
35
 
36
36
  spec.add_dependency "active_model_serializers"
37
- spec.add_dependency "batch-loader", "~> 1.2"
37
+ spec.add_dependency "batch-loader", "~> 1"
38
38
 
39
39
  spec.add_development_dependency "activerecord"
40
40
  # A Ruby library for testing against different versions of dependencies
@@ -57,4 +57,6 @@ Gem::Specification.new do |spec|
57
57
  spec.add_development_dependency "undercover"
58
58
  # Dynamically build an Active Record model (with table) within a test context
59
59
  spec.add_development_dependency "with_model", "~> 2.0"
60
+
61
+ spec.add_development_dependency "benchmark-memory", "~> 0.1"
60
62
  end
@@ -20,7 +20,7 @@ module AmsLazyRelationships
20
20
  # @param block [Proc] a block to execute when data is evaluated.
21
21
  # Loaded data is yielded as a block argument.
22
22
  def load(record, &block)
23
- BatchLoader.for(record).batch(key: batch_key) do |records, loader|
23
+ BatchLoader.for(record).batch(key: batch_key, replace_methods: false) do |records, loader|
24
24
  data = load_data(records, loader)
25
25
 
26
26
  block&.call(data)
@@ -19,7 +19,7 @@ module AmsLazyRelationships
19
19
  # @param block [Proc] a block to execute when data is evaluated.
20
20
  # Loaded data is yielded as a block argument.
21
21
  def load(record, &block)
22
- BatchLoader.for(record).batch(key: cache_key(record)) do |records, loader|
22
+ BatchLoader.for(record).batch(key: cache_key(record), replace_methods: false) do |records, loader|
23
23
  data = []
24
24
  records.each do |r|
25
25
  value = calculate_value(r)
@@ -23,7 +23,7 @@ module AmsLazyRelationships
23
23
  # @param block [Proc] a block to execute when data is evaluated
24
24
  # Loaded data is yielded as a block argument.
25
25
  def load(record, &block)
26
- BatchLoader.for(record).batch(key: cache_key(record)) do |records, loader|
26
+ BatchLoader.for(record).batch(key: cache_key(record), replace_methods: false) do |records, loader|
27
27
  data = load_data(records)
28
28
 
29
29
  block&.call(data)
@@ -20,7 +20,7 @@ module AmsLazyRelationships
20
20
  # Loaded data is yielded as a block argument.
21
21
  def load(record, &block)
22
22
  key = "#{record.class}/#{association_class_name}"
23
- BatchLoader.for(record).batch(key: key) do |records, loader|
23
+ BatchLoader.for(record).batch(key: key, replace_methods: false) do |records, loader|
24
24
  data = load_data(records)
25
25
 
26
26
  block&.call(data)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AmsLazyRelationships
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ams_lazy_relationships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Bajena
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-19 00:00:00.000000000 Z
11
+ date: 2019-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.2'
33
+ version: '1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.2'
40
+ version: '1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activerecord
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -276,6 +276,20 @@ dependencies:
276
276
  - - "~>"
277
277
  - !ruby/object:Gem::Version
278
278
  version: '2.0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: benchmark-memory
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '0.1'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '0.1'
279
293
  description:
280
294
  email:
281
295
  executables: []
@@ -294,6 +308,7 @@ files:
294
308
  - LICENSE
295
309
  - LICENSE.txt
296
310
  - README.md
311
+ - RELEASE.md
297
312
  - Rakefile
298
313
  - ams_lazy_relationships.gemspec
299
314
  - bin/console