identity_cache 1.0.0 → 1.2.0

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +76 -9
  3. data/.github/workflows/cla.yml +22 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +7 -3
  6. data/.spin/bootstrap +7 -0
  7. data/.spin/svc.yml +2 -0
  8. data/CAVEATS.md +25 -0
  9. data/CHANGELOG.md +56 -22
  10. data/Gemfile +15 -5
  11. data/LICENSE +1 -1
  12. data/README.md +27 -8
  13. data/Rakefile +13 -12
  14. data/dev.yml +5 -4
  15. data/gemfiles/Gemfile.latest-release +12 -5
  16. data/gemfiles/Gemfile.min-supported +12 -0
  17. data/gemfiles/Gemfile.rails-edge +9 -5
  18. data/identity_cache.gemspec +15 -24
  19. data/{railgun.yml → isogun.yml} +0 -5
  20. data/lib/identity_cache/belongs_to_caching.rb +1 -0
  21. data/lib/identity_cache/cache_fetcher.rb +241 -16
  22. data/lib/identity_cache/cache_hash.rb +7 -6
  23. data/lib/identity_cache/cache_invalidation.rb +2 -1
  24. data/lib/identity_cache/cache_key_generation.rb +22 -19
  25. data/lib/identity_cache/cache_key_loader.rb +2 -2
  26. data/lib/identity_cache/cached/association.rb +2 -4
  27. data/lib/identity_cache/cached/attribute.rb +3 -3
  28. data/lib/identity_cache/cached/attribute_by_multi.rb +1 -1
  29. data/lib/identity_cache/cached/belongs_to.rb +24 -14
  30. data/lib/identity_cache/cached/embedded_fetching.rb +2 -0
  31. data/lib/identity_cache/cached/prefetcher.rb +12 -2
  32. data/lib/identity_cache/cached/primary_index.rb +3 -3
  33. data/lib/identity_cache/cached/recursive/association.rb +55 -12
  34. data/lib/identity_cache/cached/recursive/has_many.rb +1 -0
  35. data/lib/identity_cache/cached/recursive/has_one.rb +1 -0
  36. data/lib/identity_cache/cached/reference/association.rb +1 -0
  37. data/lib/identity_cache/cached/reference/has_many.rb +3 -2
  38. data/lib/identity_cache/cached/reference/has_one.rb +3 -2
  39. data/lib/identity_cache/cached.rb +1 -0
  40. data/lib/identity_cache/configuration_dsl.rb +1 -0
  41. data/lib/identity_cache/encoder.rb +2 -1
  42. data/lib/identity_cache/expiry_hook.rb +2 -1
  43. data/lib/identity_cache/fallback_fetcher.rb +6 -1
  44. data/lib/identity_cache/mem_cache_store_cas.rb +63 -0
  45. data/lib/identity_cache/memoized_cache_proxy.rb +33 -23
  46. data/lib/identity_cache/parent_model_expiration.rb +6 -3
  47. data/lib/identity_cache/query_api.rb +29 -66
  48. data/lib/identity_cache/railtie.rb +1 -0
  49. data/lib/identity_cache/should_use_cache.rb +1 -0
  50. data/lib/identity_cache/version.rb +2 -1
  51. data/lib/identity_cache/with_primary_index.rb +37 -10
  52. data/lib/identity_cache/without_primary_index.rb +7 -3
  53. data/lib/identity_cache.rb +66 -26
  54. data/performance/cache_runner.rb +12 -51
  55. data/performance/cpu.rb +7 -6
  56. data/performance/externals.rb +6 -5
  57. data/performance/profile.rb +7 -6
  58. metadata +32 -112
  59. data/.github/probots.yml +0 -2
  60. data/.travis.yml +0 -45
  61. data/gemfiles/Gemfile.rails52 +0 -6
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: identity_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camilo Lopez
@@ -14,22 +14,8 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2020-02-13 00:00:00.000000000 Z
17
+ date: 2022-08-15 00:00:00.000000000 Z
18
18
  dependencies:
19
- - !ruby/object:Gem::Dependency
20
- name: ar_transaction_changes
21
- requirement: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '1.0'
26
- type: :runtime
27
- prerelease: false
28
- version_requirements: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '1.0'
33
19
  - !ruby/object:Gem::Dependency
34
20
  name: activerecord
35
21
  requirement: !ruby/object:Gem::Requirement
@@ -45,145 +31,75 @@ dependencies:
45
31
  - !ruby/object:Gem::Version
46
32
  version: '5.2'
47
33
  - !ruby/object:Gem::Dependency
48
- name: memcached
34
+ name: ar_transaction_changes
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: 1.8.0
54
- type: :development
39
+ version: '1.1'
40
+ type: :runtime
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
44
  - - "~>"
59
45
  - !ruby/object:Gem::Version
60
- version: 1.8.0
46
+ version: '1.1'
61
47
  - !ruby/object:Gem::Dependency
62
- name: memcached_store
48
+ name: minitest
63
49
  requirement: !ruby/object:Gem::Requirement
64
50
  requirements:
65
51
  - - "~>"
66
52
  - !ruby/object:Gem::Version
67
- version: 1.0.0
53
+ version: '5.14'
68
54
  type: :development
69
55
  prerelease: false
70
56
  version_requirements: !ruby/object:Gem::Requirement
71
57
  requirements:
72
58
  - - "~>"
73
59
  - !ruby/object:Gem::Version
74
- version: 1.0.0
75
- - !ruby/object:Gem::Dependency
76
- name: rake
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
60
+ version: '5.14'
89
61
  - !ruby/object:Gem::Dependency
90
62
  name: mocha
91
63
  requirement: !ruby/object:Gem::Requirement
92
64
  requirements:
93
- - - '='
94
- - !ruby/object:Gem::Version
95
- version: 0.14.0
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - '='
101
- - !ruby/object:Gem::Version
102
- version: 0.14.0
103
- - !ruby/object:Gem::Dependency
104
- name: spy
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- - !ruby/object:Gem::Dependency
118
- name: minitest
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: 2.11.0
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: 2.11.0
131
- - !ruby/object:Gem::Dependency
132
- name: cityhash
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - '='
136
- - !ruby/object:Gem::Version
137
- version: 0.6.0
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - '='
143
- - !ruby/object:Gem::Version
144
- version: 0.6.0
145
- - !ruby/object:Gem::Dependency
146
- name: mysql2
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
65
+ - - "~>"
150
66
  - !ruby/object:Gem::Version
151
- version: '0'
67
+ version: '1.12'
152
68
  type: :development
153
69
  prerelease: false
154
70
  version_requirements: !ruby/object:Gem::Requirement
155
71
  requirements:
156
- - - ">="
72
+ - - "~>"
157
73
  - !ruby/object:Gem::Version
158
- version: '0'
74
+ version: '1.12'
159
75
  - !ruby/object:Gem::Dependency
160
- name: pg
76
+ name: rake
161
77
  requirement: !ruby/object:Gem::Requirement
162
78
  requirements:
163
79
  - - "~>"
164
80
  - !ruby/object:Gem::Version
165
- version: '0.18'
81
+ version: '13.0'
166
82
  type: :development
167
83
  prerelease: false
168
84
  version_requirements: !ruby/object:Gem::Requirement
169
85
  requirements:
170
86
  - - "~>"
171
87
  - !ruby/object:Gem::Version
172
- version: '0.18'
88
+ version: '13.0'
173
89
  - !ruby/object:Gem::Dependency
174
- name: stackprof
90
+ name: spy
175
91
  requirement: !ruby/object:Gem::Requirement
176
92
  requirements:
177
- - - ">="
93
+ - - "~>"
178
94
  - !ruby/object:Gem::Version
179
- version: '0'
95
+ version: '1.0'
180
96
  type: :development
181
97
  prerelease: false
182
98
  version_requirements: !ruby/object:Gem::Requirement
183
99
  requirements:
184
- - - ">="
100
+ - - "~>"
185
101
  - !ruby/object:Gem::Version
186
- version: '0'
102
+ version: '1.0'
187
103
  description: Opt-in read through Active Record caching.
188
104
  email:
189
105
  - gems@shopify.com
@@ -191,11 +107,13 @@ executables: []
191
107
  extensions: []
192
108
  extra_rdoc_files: []
193
109
  files:
194
- - ".github/probots.yml"
195
110
  - ".github/workflows/ci.yml"
111
+ - ".github/workflows/cla.yml"
196
112
  - ".gitignore"
197
113
  - ".rubocop.yml"
198
- - ".travis.yml"
114
+ - ".spin/bootstrap"
115
+ - ".spin/svc.yml"
116
+ - CAVEATS.md
199
117
  - CHANGELOG.md
200
118
  - CONTRIBUTING.md
201
119
  - Gemfile
@@ -204,9 +122,10 @@ files:
204
122
  - Rakefile
205
123
  - dev.yml
206
124
  - gemfiles/Gemfile.latest-release
125
+ - gemfiles/Gemfile.min-supported
207
126
  - gemfiles/Gemfile.rails-edge
208
- - gemfiles/Gemfile.rails52
209
127
  - identity_cache.gemspec
128
+ - isogun.yml
210
129
  - lib/identity_cache.rb
211
130
  - lib/identity_cache/belongs_to_caching.rb
212
131
  - lib/identity_cache/cache_fetcher.rb
@@ -237,6 +156,7 @@ files:
237
156
  - lib/identity_cache/load_strategy/lazy.rb
238
157
  - lib/identity_cache/load_strategy/load_request.rb
239
158
  - lib/identity_cache/load_strategy/multi_load_request.rb
159
+ - lib/identity_cache/mem_cache_store_cas.rb
240
160
  - lib/identity_cache/memoized_cache_proxy.rb
241
161
  - lib/identity_cache/parent_model_expiration.rb
242
162
  - lib/identity_cache/query_api.rb
@@ -250,11 +170,11 @@ files:
250
170
  - performance/cpu.rb
251
171
  - performance/externals.rb
252
172
  - performance/profile.rb
253
- - railgun.yml
254
173
  - shipit.rubygems.yml
255
174
  homepage: https://github.com/Shopify/identity_cache
256
175
  licenses: []
257
- metadata: {}
176
+ metadata:
177
+ allowed_push_host: https://rubygems.org
258
178
  post_install_message:
259
179
  rdoc_options: []
260
180
  require_paths:
@@ -263,14 +183,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
263
183
  requirements:
264
184
  - - ">="
265
185
  - !ruby/object:Gem::Version
266
- version: 2.4.0
186
+ version: 2.5.0
267
187
  required_rubygems_version: !ruby/object:Gem::Requirement
268
188
  requirements:
269
189
  - - ">="
270
190
  - !ruby/object:Gem::Version
271
191
  version: '0'
272
192
  requirements: []
273
- rubygems_version: 3.0.3
193
+ rubygems_version: 3.3.3
274
194
  signing_key:
275
195
  specification_version: 4
276
196
  summary: IdentityCache lets you specify how you want to cache your model objects,
data/.github/probots.yml DELETED
@@ -1,2 +0,0 @@
1
- enabled:
2
- - cla
data/.travis.yml DELETED
@@ -1,45 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.4
5
- - 2.6
6
-
7
- gemfile:
8
- - gemfiles/Gemfile.rails52
9
- - gemfiles/Gemfile.latest-release
10
- - gemfiles/Gemfile.rails-edge
11
-
12
- env:
13
- - DB=mysql2
14
- - DB=postgresql
15
-
16
- jobs:
17
- exclude:
18
- - rvm: 2.4
19
- gemfile: gemfiles/Gemfile.rails-edge
20
- - rvm: 2.4
21
- gemfile: gemfiles/Gemfile.latest-release
22
-
23
- services:
24
- - memcache
25
- - mysql
26
- - postgresql
27
-
28
- sudo: false
29
-
30
- before_script:
31
- - mysql -e 'create database identity_cache_test'
32
- - psql -c 'create database identity_cache_test;' -U postgres
33
-
34
- script:
35
- - bundle exec rake test
36
-
37
- cache: bundler
38
-
39
- matrix:
40
- exclude:
41
- - rvm: 2.2.6
42
- gemfile: gemfiles/Gemfile.rails-edge
43
-
44
- notifications:
45
- email: false
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec path: '..'
3
-
4
- gem 'activerecord', '~> 5.2'
5
- gem 'activesupport', '~> 5.2'
6
- gem 'mysql2', '>= 0.4.4', '< 0.6.0'