identity_cache 1.6.0 → 1.6.2

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
  SHA256:
3
- metadata.gz: '0238eadfff3efbdc9ad2e6625ce51fa8bc43cf722f317ab096cf4dcf42b8ab11'
4
- data.tar.gz: 8f6c334a2bcc97cceef427cb626dfd5cdd7528982a1062356113217e9268f836
3
+ metadata.gz: 463112ddb217364a26a8232ef1958c45bdb24fc7dcd891be3e7d4db4ca4d29a4
4
+ data.tar.gz: 13ea742aca4c33f710a6f8a229f6cf0531dba50291c1ec7c67bce735028ce527
5
5
  SHA512:
6
- metadata.gz: 30132bc792a1095e821ddd2602cf6a7edead2f52a50f4a6d1fa75ab22321d4459172aa6de95760693ad069895d741b4756fc5b827581eea4d23b6beb813b7c21
7
- data.tar.gz: b93b51adc8d89c33eb5e051f98e9f6637bd16e9c0fa4640a4b23bdea241548a428d3ea5dcc582922166d04096479bf1a62e27ba587029d2428e47bc9dacfea1f
6
+ metadata.gz: d4c3cae9c3c4a6444f62d84242326da8901e0aa66895c8b6d2916930a5824fe402299d5e7c6270982e37fa9cd97991310756320aea0fb93b64a1f515a27f1c1f
7
+ data.tar.gz: 5512f9b845a4bc9ea8821d6e8563bc4307ba46a32fe32f1f5d2a708b624be3a5ed72c1b64fe2a9ade21f52ffa8d6c3220e23bc3bb433249bceb4d6eacdf7ba67
@@ -19,11 +19,11 @@ jobs:
19
19
  ruby: '3.0'
20
20
  gemfile: "Gemfile.min-supported"
21
21
  - name: 'Latest released & run rubocop'
22
- ruby: '3.2'
22
+ ruby: '3.3'
23
23
  gemfile: "Gemfile.latest-release"
24
24
  rubocop: true
25
25
  - name: 'Rails edge'
26
- ruby: '3.2'
26
+ ruby: '3.3'
27
27
  gemfile: "Gemfile.rails-edge"
28
28
  edge: true
29
29
 
@@ -69,25 +69,26 @@ jobs:
69
69
  run: |
70
70
  sudo apt-get update
71
71
  sudo apt-get -y install libmemcached-dev libmysqlclient-dev libpq-dev libsasl2-dev
72
+
72
73
  - uses: actions/checkout@v2
73
74
  - name: Set up Ruby
74
75
  uses: ruby/setup-ruby@v1
75
76
  with:
76
77
  ruby-version: ${{ matrix.entry.ruby }}
77
- - name: Install bundler and gems
78
- run: |
79
- gem install bundler
80
- bundle install --jobs 4 --retry 3
78
+ bundler-cache: true
79
+
81
80
  - name: Test with mysql
82
81
  env:
83
82
  DB: mysql2
84
83
  run: bundle exec rake test
84
+
85
85
  - name: Test with postgres and memcached_store
86
86
  env:
87
87
  DB: postgresql
88
88
  POSTGRES_PASSWORD: postgres
89
89
  ADAPTER: memcached
90
90
  run: bundle exec rake test
91
+
91
92
  - name: Run rubocop
92
93
  if: matrix.entry.rubocop
93
94
  run: bundle exec rubocop
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.2
1
+ 3.3.4
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.6.2
6
+
7
+ - Support deferred expiry of associations and attributes. Add a rake task to create test database.
8
+
9
+ ## 1.6.1
10
+
11
+ - Fix deprecation warnings on Active Record 7.2. (#575)
12
+
5
13
  ## 1.6.0
6
14
 
7
15
  - Introduce `.with_deferred_parent_expiration`, which takes a block and avoids duplicate parent cache expiry. (#569)
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ gem "rubocop-shopify", "~> 2.9.0", require: false
9
9
 
10
10
  gem "mysql2", "~> 0.5.3", platform: :mri
11
11
  gem "pg", ">= 0.18", "< 2.0", platform: :mri
12
- gem "memcached", "~> 1.8.0", platform: :mri
12
+ gem "memcached", github: "Shopify/memcached", branch: "1-0-stable-shopify", platform: :mri
13
13
  gem "memcached_store", "~> 2.3.2", platform: :mri
14
14
  gem "dalli", "~> 3.2.3"
15
15
  gem "cityhash", "~> 0.6.0", platform: :mri
data/Gemfile.lock CHANGED
@@ -1,52 +1,59 @@
1
+ GIT
2
+ remote: https://github.com/Shopify/memcached.git
3
+ revision: 54a89bae698896a00fd2ceeb142dada6285f73ed
4
+ branch: 1-0-stable-shopify
5
+ specs:
6
+ memcached (1.9.0)
7
+
1
8
  PATH
2
9
  remote: .
3
10
  specs:
4
- identity_cache (1.6.0)
11
+ identity_cache (1.6.2)
5
12
  activerecord (>= 7.0)
6
13
  ar_transaction_changes (~> 1.1)
7
14
 
8
15
  GEM
9
16
  remote: https://rubygems.org/
10
17
  specs:
11
- activemodel (7.1.3.2)
12
- activesupport (= 7.1.3.2)
13
- activerecord (7.1.3.2)
14
- activemodel (= 7.1.3.2)
15
- activesupport (= 7.1.3.2)
18
+ activemodel (7.2.0)
19
+ activesupport (= 7.2.0)
20
+ activerecord (7.2.0)
21
+ activemodel (= 7.2.0)
22
+ activesupport (= 7.2.0)
16
23
  timeout (>= 0.4.0)
17
- activesupport (7.1.3.2)
24
+ activesupport (7.2.0)
18
25
  base64
19
26
  bigdecimal
20
- concurrent-ruby (~> 1.0, >= 1.0.2)
27
+ concurrent-ruby (~> 1.0, >= 1.3.1)
21
28
  connection_pool (>= 2.2.5)
22
29
  drb
23
30
  i18n (>= 1.6, < 2)
31
+ logger (>= 1.4.2)
24
32
  minitest (>= 5.1)
25
- mutex_m
26
- tzinfo (~> 2.0)
33
+ securerandom (>= 0.3)
34
+ tzinfo (~> 2.0, >= 2.0.5)
27
35
  ar_transaction_changes (1.1.9)
28
36
  activerecord (>= 5.2.0)
29
37
  ast (2.4.2)
30
38
  base64 (0.2.0)
31
- bigdecimal (3.1.6)
39
+ bigdecimal (3.1.8)
32
40
  byebug (11.1.3)
33
41
  cityhash (0.6.0)
34
- concurrent-ruby (1.2.3)
42
+ concurrent-ruby (1.3.4)
35
43
  connection_pool (2.4.1)
36
44
  dalli (3.2.3)
37
45
  drb (2.2.1)
38
- i18n (1.14.4)
46
+ i18n (1.14.5)
39
47
  concurrent-ruby (~> 1.0)
40
48
  json (2.7.1)
41
49
  language_server-protocol (3.17.0.3)
42
- memcached (1.8.0)
50
+ logger (1.6.0)
43
51
  memcached_store (2.3.4)
44
52
  activesupport (>= 6)
45
53
  memcached (~> 1.8)
46
- minitest (5.22.2)
54
+ minitest (5.25.1)
47
55
  mocha (2.1.0)
48
56
  ruby2_keywords (>= 0.0.5)
49
- mutex_m (0.2.0)
50
57
  mysql2 (0.5.6)
51
58
  parallel (1.24.0)
52
59
  parser (3.3.0.5)
@@ -57,8 +64,8 @@ GEM
57
64
  rainbow (3.1.1)
58
65
  rake (13.1.0)
59
66
  regexp_parser (2.9.0)
60
- rexml (3.2.8)
61
- strscan (>= 3.0.9)
67
+ rexml (3.3.6)
68
+ strscan
62
69
  rubocop (1.61.0)
63
70
  json (~> 2.3)
64
71
  language_server-protocol (>= 3.17.0)
@@ -76,6 +83,7 @@ GEM
76
83
  rubocop (~> 1.33)
77
84
  ruby-progressbar (1.13.0)
78
85
  ruby2_keywords (0.0.5)
86
+ securerandom (0.3.1)
79
87
  spy (1.0.5)
80
88
  stackprof (0.2.26)
81
89
  strscan (3.1.0)
@@ -94,7 +102,7 @@ DEPENDENCIES
94
102
  cityhash (~> 0.6.0)
95
103
  dalli (~> 3.2.3)
96
104
  identity_cache!
97
- memcached (~> 1.8.0)
105
+ memcached!
98
106
  memcached_store (~> 2.3.2)
99
107
  minitest (~> 5.14)
100
108
  mocha (~> 2.0)
data/Rakefile CHANGED
@@ -47,3 +47,27 @@ namespace :profile do
47
47
  ruby "./performance/profile.rb"
48
48
  end
49
49
  end
50
+
51
+ namespace :db do
52
+ desc "Create the identity_cache_test database"
53
+ task :create do
54
+ require "mysql2"
55
+
56
+ config = {
57
+ host: ENV.fetch("MYSQL_HOST") || "localhost",
58
+ port: ENV.fetch("MYSQL_PORT") || 1037,
59
+ username: ENV.fetch("MYSQL_USER") || "root",
60
+ password: ENV.fetch("MYSQL_PASSWORD") || "",
61
+ }
62
+
63
+ begin
64
+ client = Mysql2::Client.new(config)
65
+ client.query("CREATE DATABASE IF NOT EXISTS identity_cache_test")
66
+ puts "Database 'identity_cache_test' created successfully. host: #{config[:host]}, port: #{config[:port]}"
67
+ rescue Mysql2::Error => e
68
+ puts "Error creating database: #{e.message}"
69
+ ensure
70
+ client&.close
71
+ end
72
+ end
73
+ end
data/dev.yml CHANGED
@@ -1,18 +1,14 @@
1
1
  name: identity-cache
2
2
 
3
3
  up:
4
- - homebrew:
5
- - mysql-client@5.7:
6
- or: [mysql@5.7]
7
- conflicts: [mysql-connector-c, mysql, mysql-client]
8
4
  - ruby
9
- - isogun
10
5
  - bundler
11
-
12
- env:
13
- RAILGUN_HOST: identity-cache.railgun
14
- MYSQL_HOST: identity-cache.railgun
15
- MEMCACHED_HOST: identity-cache.railgun
6
+ - memcached
7
+ - mysql
8
+ - custom:
9
+ name: create database identity_cache_test
10
+ met?: mysql -u root -h 127.0.0.1 -P 1037 -e "SHOW DATABASES;" | grep identity_cache_test
11
+ meet: bundle exec rake db:create
16
12
 
17
13
  commands:
18
14
  test:
@@ -20,7 +16,7 @@ commands:
20
16
  optional:
21
17
  argument: file
22
18
  optional: args...
23
- desc: 'Run tests'
19
+ desc: "Run tests"
24
20
  run: |
25
21
  if [[ $# -eq 0 ]]; then
26
22
  bundle exec rake test
@@ -29,21 +25,21 @@ commands:
29
25
  fi
30
26
 
31
27
  style:
32
- desc: 'Run rubocop checks'
28
+ desc: "Run rubocop checks"
33
29
  run: bundle exec rubocop "$@"
34
30
 
35
31
  check:
36
- desc: 'Run tests and style checks'
32
+ desc: "Run tests and style checks"
37
33
  run: bundle exec rake test && bundle exec rubocop
38
34
 
39
35
  benchmark-cpu:
40
- desc: 'Run the identity cache CPU benchmark'
36
+ desc: "Run the identity cache CPU benchmark"
41
37
  run: bundle exec rake benchmark:cpu
42
38
 
43
39
  profile:
44
- desc: 'Profile IDC code'
40
+ desc: "Profile IDC code"
45
41
  run: bundle exec rake profile:run
46
42
 
47
43
  update-serialization-format:
48
- desc: 'Update serialization format test fixture'
44
+ desc: "Update serialization format test fixture"
49
45
  run: bundle exec rake update_serialization_format
@@ -8,6 +8,7 @@ gem "activerecord"
8
8
  gem "activesupport"
9
9
  gem "mysql2", "~> 0.5"
10
10
  gem "pg", "~> 1.1"
11
+ gem "memcached", github: "Shopify/memcached", branch: "1-0-stable-shopify"
11
12
  gem "memcached_store"
12
13
  gem "dalli"
13
14
  gem "cityhash"
@@ -6,7 +6,7 @@ gem "ar_transaction_changes", "~> 1.1.0"
6
6
  gem "activerecord", "~> 7.0.0"
7
7
  gem "mysql2", "~> 0.5"
8
8
  gem "pg", "~> 1.1"
9
- gem "memcached", "~> 1.8.0"
9
+ gem "memcached", github: "Shopify/memcached", branch: "1-0-stable-shopify"
10
10
  gem "memcached_store", "~> 2.3.2"
11
11
  gem "dalli", "~> 2.7.11"
12
12
  gem "cityhash", "~> 0.6.0"
@@ -5,6 +5,7 @@ gem "activerecord", github: "rails/rails", branch: "main"
5
5
  gem "activesupport", github: "rails/rails", branch: "main"
6
6
  gem "mysql2", "~> 0.5"
7
7
  gem "pg", "~> 1.1"
8
+ gem "memcached", github: "Shopify/memcached", branch: "1-0-stable-shopify"
8
9
  gem "memcached_store"
9
10
  gem "dalli"
10
11
  gem "cityhash"
@@ -60,6 +60,11 @@ module IdentityCache
60
60
  @cache_backend.write(key, IdentityCache::DELETED, expires_in: IdentityCache::DELETED_TTL.seconds)
61
61
  end
62
62
 
63
+ def delete_multi(keys)
64
+ key_values = keys.map { |key| [key, IdentityCache::DELETED] }.to_h
65
+ @cache_backend.write_multi(key_values, expires_in: IdentityCache::DELETED_TTL.seconds)
66
+ end
67
+
63
68
  def clear
64
69
  @cache_backend.clear
65
70
  end
@@ -39,12 +39,24 @@ module IdentityCache
39
39
 
40
40
  unless record.send(:was_new_record?)
41
41
  old_key = old_cache_key(record)
42
- all_deleted = IdentityCache.cache.delete(old_key)
42
+
43
+ if Thread.current[:idc_deferred_expiration]
44
+ Thread.current[:idc_attributes_to_expire] << old_key
45
+ # defer the deletion, and don't block the following deletion
46
+ all_deleted = true
47
+ else
48
+ all_deleted = IdentityCache.cache.delete(old_key)
49
+ end
43
50
  end
44
51
  unless record.destroyed?
45
52
  new_key = new_cache_key(record)
46
53
  if new_key != old_key
47
- all_deleted = IdentityCache.cache.delete(new_key) && all_deleted
54
+ if Thread.current[:idc_deferred_expiration]
55
+ Thread.current[:idc_attributes_to_expire] << new_key
56
+ all_deleted = true
57
+ else
58
+ all_deleted = IdentityCache.cache.delete(new_key) && all_deleted
59
+ end
48
60
  end
49
61
  end
50
62
 
@@ -152,9 +164,9 @@ module IdentityCache
152
164
  end
153
165
 
154
166
  def old_cache_key(record)
167
+ changes = record.transaction_changed_attributes
155
168
  old_key_values = key_fields.map do |field|
156
169
  field_string = field.to_s
157
- changes = record.transaction_changed_attributes
158
170
  if record.destroyed? && changes.key?(field_string)
159
171
  changes[field_string]
160
172
  elsif record.persisted? && changes.key?(field_string)
@@ -45,7 +45,11 @@ module IdentityCache
45
45
 
46
46
  def expire(id)
47
47
  id = cast_id(id)
48
- IdentityCache.cache.delete(cache_key(id))
48
+ if Thread.current[:idc_deferred_expiration]
49
+ Thread.current[:idc_records_to_expire] << cache_key(id)
50
+ else
51
+ IdentityCache.cache.delete(cache_key(id))
52
+ end
49
53
  end
50
54
 
51
55
  def cache_key(id)
@@ -70,6 +70,16 @@ module IdentityCache
70
70
  end
71
71
  end
72
72
 
73
+ def delete_multi(keys)
74
+ memoizing = memoizing?
75
+ ActiveSupport::Notifications.instrument("cache_delete_multi.identity_cache", memoizing: memoizing) do
76
+ if memoizing
77
+ keys.each { |key| memoized_key_values.delete(key) }
78
+ end
79
+ @cache_fetcher.delete_multi(keys)
80
+ end
81
+ end
82
+
73
83
  def fetch(key, cache_fetcher_options = {}, &block)
74
84
  memo_misses = 0
75
85
  cache_misses = 0
@@ -47,10 +47,6 @@ module IdentityCache
47
47
  add_parents_to_cache_expiry_set(parents_to_expire)
48
48
  parents_to_expire.select! { |parent| parent.class.primary_cache_index_enabled }
49
49
  parents_to_expire.reduce(true) do |all_expired, parent|
50
- if Thread.current[:idc_deferred_parent_expiration]
51
- Thread.current[:idc_parent_records_for_cache_expiry] << parent
52
- next parent
53
- end
54
50
  parent.expire_primary_index && all_expired
55
51
  end
56
52
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IdentityCache
4
- VERSION = "1.6.0"
4
+ VERSION = "1.6.2"
5
5
  CACHE_VERSION = 8
6
6
  end
@@ -60,7 +60,7 @@ module IdentityCache
60
60
 
61
61
  class InverseAssociationError < StandardError; end
62
62
 
63
- class NestedDeferredParentBlockError < StandardError; end
63
+ class NestedDeferredCacheExpirationBlockError < StandardError; end
64
64
 
65
65
  class UnsupportedScopeError < StandardError; end
66
66
 
@@ -117,27 +117,36 @@ module IdentityCache
117
117
  !readonly
118
118
  end
119
119
 
120
- def should_use_cache? # :nodoc:
121
- ActiveRecord::Base.connection_handler.connection_pool_list(ActiveRecord::Base.current_role).none? do |pool|
122
- pool.active_connection? &&
123
- # Rails wraps each of your tests in a transaction, so that any changes
124
- # made to the database during the test can be rolled back afterwards.
125
- # These transactions are flagged as "unjoinable", which tries to make
126
- # your application behave as if they weren't there. In particular:
127
- #
128
- # - Opening another transaction during the test creates a savepoint,
129
- # which can be rolled back independently of the main transaction.
130
- # - When those nested transactions complete, any `after_commit`
131
- # callbacks for records modified during the transaction will run,
132
- # even though the changes haven't actually been committed yet.
133
- #
134
- # By ignoring unjoinable transactions, IdentityCache's behaviour
135
- # during your test suite will more closely match production.
136
- #
137
- # When there are no open transactions, `current_transaction` returns a
138
- # special `NullTransaction` object that is unjoinable, meaning we will
139
- # use the cache.
140
- pool.connection.current_transaction.joinable?
120
+ # Rails wraps each of your tests in a transaction, so that any changes
121
+ # made to the database during the test can be rolled back afterwards.
122
+ # These transactions are flagged as "unjoinable", which tries to make
123
+ # your application behave as if they weren't there. In particular:
124
+ #
125
+ # - Opening another transaction during the test creates a savepoint,
126
+ # which can be rolled back independently of the main transaction.
127
+ # - When those nested transactions complete, any `after_commit`
128
+ # callbacks for records modified during the transaction will run,
129
+ # even though the changes haven't actually been committed yet.
130
+ #
131
+ # By ignoring unjoinable transactions, IdentityCache's behaviour
132
+ # during your test suite will more closely match production.
133
+ #
134
+ # When there are no open transactions, `current_transaction` returns a
135
+ # special `NullTransaction` object that is unjoinable, meaning we will
136
+ # use the cache.
137
+ if ActiveRecord::ConnectionAdapters::ConnectionPool.method_defined?(:active_connection)
138
+ def should_use_cache? # :nodoc:
139
+ ActiveRecord::Base.connection_handler.connection_pool_list(ActiveRecord::Base.current_role).none? do |pool|
140
+ pool.active_connection? &&
141
+ pool.active_connection.current_transaction.joinable?
142
+ end
143
+ end
144
+ else
145
+ def should_use_cache? # :nodoc:
146
+ ActiveRecord::Base.connection_handler.connection_pool_list(ActiveRecord::Base.current_role).none? do |pool|
147
+ pool.active_connection? &&
148
+ pool.connection.current_transaction.joinable?
149
+ end
141
150
  end
142
151
  end
143
152
 
@@ -193,42 +202,51 @@ module IdentityCache
193
202
  result
194
203
  end
195
204
 
196
- # Executes a block with deferred parent expiration, ensuring that the parent
197
- # records' cache expiration is deferred until the block completes. When the block
198
- # completes, it triggers expiration of the primary index for the parent records.
199
- # Raises a NestedDeferredParentBlockError if a deferred parent expiration block
200
- # is already active on the current thread.
205
+ # Executes a block with deferred cache expiration, ensuring that the records' (parent,
206
+ # children and attributes) cache expiration is deferred until the block completes. When
207
+ # the block completes, it issues delete_multi calls for all the records and attributes
208
+ # that were marked for expiration.
201
209
  #
202
210
  # == Parameters:
203
211
  # No parameters.
204
212
  #
205
213
  # == Raises:
206
- # NestedDeferredParentBlockError if a deferred parent expiration block is already active.
214
+ # NestedDeferredCacheExpirationBlockError if a deferred cache expiration block is already active.
207
215
  #
208
216
  # == Yield:
209
- # Runs the provided block with deferred parent expiration.
217
+ # Runs the provided block with deferred cache expiration.
210
218
  #
211
219
  # == Returns:
212
220
  # The result of executing the provided block.
213
221
  #
214
222
  # == Ensures:
215
- # Cleans up thread-local variables related to deferred parent expiration regardless
223
+ # Cleans up thread-local variables related to deferred cache expiration regardless
216
224
  # of whether the block raises an exception.
217
- def with_deferred_parent_expiration
218
- raise NestedDeferredParentBlockError if Thread.current[:idc_deferred_parent_expiration]
225
+ def with_deferred_expiration
226
+ raise NestedDeferredCacheExpirationBlockError if Thread.current[:idc_deferred_expiration]
219
227
 
220
- Thread.current[:idc_deferred_parent_expiration] = true
221
- Thread.current[:idc_parent_records_for_cache_expiry] = Set.new
228
+ Thread.current[:idc_deferred_expiration] = true
229
+ Thread.current[:idc_records_to_expire] = Set.new
230
+ Thread.current[:idc_attributes_to_expire] = Set.new
222
231
 
223
232
  result = yield
224
233
 
225
- Thread.current[:idc_deferred_parent_expiration] = nil
226
- Thread.current[:idc_parent_records_for_cache_expiry].each(&:expire_primary_index)
227
-
234
+ Thread.current[:idc_deferred_expiration] = nil
235
+ if Thread.current[:idc_records_to_expire].any?
236
+ IdentityCache.cache.delete_multi(
237
+ Thread.current[:idc_records_to_expire]
238
+ )
239
+ end
240
+ if Thread.current[:idc_attributes_to_expire].any?
241
+ IdentityCache.cache.delete_multi(
242
+ Thread.current[:idc_attributes_to_expire]
243
+ )
244
+ end
228
245
  result
229
246
  ensure
230
- Thread.current[:idc_deferred_parent_expiration] = nil
231
- Thread.current[:idc_parent_records_for_cache_expiry].clear
247
+ Thread.current[:idc_deferred_expiration] = nil
248
+ Thread.current[:idc_records_to_expire].clear
249
+ Thread.current[:idc_attributes_to_expire].clear
232
250
  end
233
251
 
234
252
  def with_fetch_read_only_records(value = true)
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.6.0
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camilo Lopez
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2024-07-05 00:00:00.000000000 Z
17
+ date: 2024-10-10 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord
@@ -127,7 +127,6 @@ files:
127
127
  - gemfiles/Gemfile.min-supported
128
128
  - gemfiles/Gemfile.rails-edge
129
129
  - identity_cache.gemspec
130
- - isogun.yml
131
130
  - lib/identity_cache.rb
132
131
  - lib/identity_cache/belongs_to_caching.rb
133
132
  - lib/identity_cache/cache_fetcher.rb
@@ -192,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
191
  - !ruby/object:Gem::Version
193
192
  version: '0'
194
193
  requirements: []
195
- rubygems_version: 3.5.14
194
+ rubygems_version: 3.5.21
196
195
  signing_key:
197
196
  specification_version: 4
198
197
  summary: IdentityCache lets you specify how you want to cache your model objects,
data/isogun.yml DELETED
@@ -1,11 +0,0 @@
1
- # https://dev-accel.shopify.io/dev/railgun/Railgun-Config
2
- name: identity-cache
3
-
4
- vm:
5
- ip_address: 192.168.64.98
6
- memory: 1G
7
- cores: 2
8
-
9
- services:
10
- - mysql
11
- - memcached