second_level_cache 2.6.0 → 2.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6cfa929a72e1977223e5fc958b58ead3b3fa81daccbf38d4efe7e4ffc1d608d
4
- data.tar.gz: 5709808afb6c5ee8d5937e1ce944005b528c4550e30d0db08b067864a5984d83
3
+ metadata.gz: 0056aa765b7668e44d115f964c4fb11f1632ecf99206145c89aed0fb58f2b4d0
4
+ data.tar.gz: a4fb19d6ff3859c728c7d8a43f28f64bb092c89226772de31b5b22f1e57e2cf6
5
5
  SHA512:
6
- metadata.gz: ee4e3935b1cf774fe00e1432878ffee6104ad5b15c5ad4d6994521b9d5bb7fa183fcbdd97ba3dfd509317f7cd30ebabc0b5f89c18c0dd7aaad028474ef3f7d74
7
- data.tar.gz: 173d12fbd5b5b440e37f9d219f9229f0146751debd5c8fa18e54b684ea257ec81a707a46a5b1e39309f9b7bb07784c921ea6a2737d3a681bb7480c9bb8ca6ebf
6
+ metadata.gz: 32f1cb2460325a2291d2732c2f3ec906c7c16c2c5838564df7bfa56f362c0049d37c1ef2658db6c057faf31183869bbd8d6fc4702f4056f0a8bc4d143933cc68
7
+ data.tar.gz: 46e242047cd4e0c1c3651dc3e7ff03028d044a96b6c4c915d994114226c5ed30c8668248b14caac8165b51a283ba6ab9455badc5c27c6f7a31468753086216c4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ 2.6.1
2
+ -------
3
+
4
+ - Improve proload debug log output, and deprecated logger method. (#106)
5
+
1
6
  2.6.0
2
7
  -------
3
8
 
@@ -5,6 +5,7 @@ require "second_level_cache/config"
5
5
  require "second_level_cache/record_marshal"
6
6
  require "second_level_cache/record_relation"
7
7
  require "second_level_cache/active_record"
8
+ require "second_level_cache/log_subscriber"
8
9
 
9
10
  module SecondLevelCache
10
11
  def self.configure
@@ -21,10 +21,9 @@ module SecondLevelCache
21
21
  end
22
22
 
23
23
  private
24
-
25
- def second_level_cache_key
26
- owner[reflection.foreign_key]
27
- end
24
+ def second_level_cache_key
25
+ owner[reflection.foreign_key]
26
+ end
28
27
  end
29
28
  end
30
29
  end
@@ -18,10 +18,10 @@ module SecondLevelCache
18
18
  record = where(where_values).first
19
19
  if record
20
20
  SecondLevelCache.cache_store.write(cache_key, record.id)
21
- return record
21
+ record
22
22
  else
23
23
  SecondLevelCache.cache_store.delete(cache_key)
24
- return nil
24
+ nil
25
25
  end
26
26
  end
27
27
 
@@ -42,21 +42,20 @@ module SecondLevelCache
42
42
  end
43
43
 
44
44
  private
45
-
46
- def cache_uniq_key(where_values)
47
- keys = where_values.collect do |k, v|
48
- v = Digest::MD5.hexdigest(v) if v.respond_to?(:size) && v.size >= 32
49
- [k, v].join("_")
45
+ def cache_uniq_key(where_values)
46
+ keys = where_values.collect do |k, v|
47
+ v = Digest::MD5.hexdigest(v) if v.respond_to?(:size) && v.size >= 32
48
+ [k, v].join("_")
49
+ end
50
+
51
+ ext_key = keys.join(",")
52
+ "uniq_key_#{name}_#{ext_key}"
50
53
  end
51
54
 
52
- ext_key = keys.join(",")
53
- "uniq_key_#{name}_#{ext_key}"
54
- end
55
-
56
- def record_attributes_equal_where_values?(record, where_values)
57
- # https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-type_for_attribute
58
- where_values.all? { |k, v| record&.read_attribute(k) == type_for_attribute(k).cast(v) }
59
- end
55
+ def record_attributes_equal_where_values?(record, where_values)
56
+ # https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-type_for_attribute
57
+ where_values.all? { |k, v| record&.read_attribute(k) == type_for_attribute(k).cast(v) }
58
+ end
60
59
  end
61
60
  end
62
61
  end
@@ -55,49 +55,48 @@ module SecondLevelCache
55
55
  end
56
56
 
57
57
  private
58
+ # readonly_value - active_record/relation/query_methods.rb Rails 5.1 true/false
59
+ def cachable?
60
+ second_level_cache_enabled? &&
61
+ limit_one? &&
62
+ # !eager_loading? &&
63
+ includes_values.blank? &&
64
+ preload_values.blank? &&
65
+ eager_load_values.blank? &&
66
+ select_values.blank? &&
67
+ order_values_can_cache? &&
68
+ readonly_value.blank? &&
69
+ joins_values.blank? &&
70
+ !@klass.locking_enabled? &&
71
+ where_clause_predicates_all_equality?
72
+ end
58
73
 
59
- # readonly_value - active_record/relation/query_methods.rb Rails 5.1 true/false
60
- def cachable?
61
- second_level_cache_enabled? &&
62
- limit_one? &&
63
- # !eager_loading? &&
64
- includes_values.blank? &&
65
- preload_values.blank? &&
66
- eager_load_values.blank? &&
67
- select_values.blank? &&
68
- order_values_can_cache? &&
69
- readonly_value.blank? &&
70
- joins_values.blank? &&
71
- !@klass.locking_enabled? &&
72
- where_clause_predicates_all_equality?
73
- end
74
-
75
- def order_values_can_cache?
76
- return true if order_values.empty?
77
- return false unless order_values.one?
78
- return true if order_values.first == klass.primary_key
79
- return false unless order_values.first.is_a?(::Arel::Nodes::Ordering)
80
- return true if order_values.first.expr == klass.primary_key
81
- order_values.first.expr.try(:name) == klass.primary_key
82
- end
74
+ def order_values_can_cache?
75
+ return true if order_values.empty?
76
+ return false unless order_values.one?
77
+ return true if order_values.first == klass.primary_key
78
+ return false unless order_values.first.is_a?(::Arel::Nodes::Ordering)
79
+ return true if order_values.first.expr == klass.primary_key
80
+ order_values.first.expr.try(:name) == klass.primary_key
81
+ end
83
82
 
84
- def where_clause_predicates_all_equality?
85
- where_clause.send(:predicates).size == where_values_hash.size
86
- end
83
+ def where_clause_predicates_all_equality?
84
+ where_clause.send(:predicates).size == where_values_hash.size
85
+ end
87
86
 
88
- def where_values_match_cache?(record)
89
- where_values_hash.all? do |key, value|
90
- if value.is_a?(Array)
91
- value.include?(record.read_attribute(key))
92
- else
93
- record.read_attribute(key) == value
87
+ def where_values_match_cache?(record)
88
+ where_values_hash.all? do |key, value|
89
+ if value.is_a?(Array)
90
+ value.include?(record.read_attribute(key))
91
+ else
92
+ record.read_attribute(key) == value
93
+ end
94
94
  end
95
95
  end
96
- end
97
96
 
98
- def limit_one?
99
- limit_value.blank? || limit_value == 1
100
- end
97
+ def limit_one?
98
+ limit_value.blank? || limit_value == 1
99
+ end
101
100
  end
102
101
  end
103
102
  end
@@ -11,17 +11,17 @@ module SecondLevelCache
11
11
 
12
12
  through = reflection.options[:through]
13
13
  record = if through
14
- return super unless klass.reflections[through.to_s].klass.second_level_cache_enabled?
15
- begin
16
- reflection.klass.find(owner.send(through).read_attribute(reflection.foreign_key))
17
- rescue StandardError
18
- nil
19
- end
20
- else
21
- uniq_keys = { reflection.foreign_key => owner[reflection.active_record_primary_key] }
22
- uniq_keys[reflection.type] = owner.class.base_class.name if reflection.options[:as]
23
- klass.fetch_by_uniq_keys(uniq_keys)
24
- end
14
+ return super unless klass.reflections[through.to_s].klass.second_level_cache_enabled?
15
+ begin
16
+ reflection.klass.find(owner.send(through).read_attribute(reflection.foreign_key))
17
+ rescue StandardError
18
+ nil
19
+ end
20
+ else
21
+ uniq_keys = { reflection.foreign_key => owner[reflection.active_record_primary_key] }
22
+ uniq_keys[reflection.type] = owner.class.base_class.name if reflection.options[:as]
23
+ klass.fetch_by_uniq_keys(uniq_keys)
24
+ end
25
25
 
26
26
  return nil unless record
27
27
  record.tap { |r| set_inverse_instance(r) }
@@ -15,23 +15,23 @@ module SecondLevelCache
15
15
  records_from_cache = ::SecondLevelCache.cache_store.read_multi(*map_cache_keys)
16
16
 
17
17
  record_marshals = if RAILS6
18
- RecordMarshal.load_multi(records_from_cache.values) do |record|
19
- # This block is copy from:
20
- # https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/associations/preloader/association.rb#L101
21
- owner = owners_by_key[convert_key(record[association_key_name])].first
22
- association = owner.association(reflection.name)
23
- association.set_inverse_instance(record)
24
- end
25
- else
26
- RecordMarshal.load_multi(records_from_cache.values, &block)
27
- end
18
+ RecordMarshal.load_multi(records_from_cache.values) do |record|
19
+ # This block is copy from:
20
+ # https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/associations/preloader/association.rb#L101
21
+ owner = owners_by_key[convert_key(record[association_key_name])].first
22
+ association = owner.association(reflection.name)
23
+ association.set_inverse_instance(record)
24
+ end
25
+ else
26
+ RecordMarshal.load_multi(records_from_cache.values, &block)
27
+ end
28
28
 
29
29
  # NOTICE
30
30
  # Rails.cache.read_multi return hash that has keys only hitted.
31
31
  # eg. Rails.cache.read_multi(1,2,3) => {2 => hit_value, 3 => hit_value}
32
32
  hitted_ids = record_marshals.map { |record| record.read_attribute(association_key_name).to_s }
33
33
  missed_ids = ids.map(&:to_s) - hitted_ids
34
- ::SecondLevelCache.logger.debug("missed #{association_key_name} -> #{missed_ids.join(',')} | hitted #{association_key_name} -> #{hitted_ids.join(',')}")
34
+ ActiveSupport::Notifications.instrument("preload.second_level_cache", key: association_key_name, hit: hitted_ids, miss: missed_ids)
35
35
  return SecondLevelCache::RecordRelation.new(record_marshals) if missed_ids.empty?
36
36
 
37
37
  records_from_db = super(missed_ids, &block)
@@ -41,10 +41,9 @@ module SecondLevelCache
41
41
  end
42
42
 
43
43
  private
44
-
45
- def write_cache(record)
46
- record.write_second_level_cache
47
- end
44
+ def write_cache(record)
45
+ record.write_second_level_cache
46
+ end
48
47
  end
49
48
  end
50
49
  end
@@ -11,6 +11,7 @@ module SecondLevelCache
11
11
  end
12
12
 
13
13
  def logger
14
+ ActiveSupport::Deprecation.warn("logger is deprecated and will be removed from SecondLevelCache 2.7.0")
14
15
  @logger ||= Rails.logger if defined?(Rails)
15
16
  @logger ||= Logger.new(STDOUT)
16
17
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SecondLevelCache
4
+ class LogSubscriber < ActiveSupport::LogSubscriber
5
+ # preload.second_level_cache
6
+ def preload(event)
7
+ prefix = color("SecondLevelCache", CYAN)
8
+ miss_ids = (event.payload[:miss] || []).join(",")
9
+ hit_ids = (event.payload[:hit] || []).join(",")
10
+ debug " #{prefix} preload #{event.payload[:key]} miss [#{miss_ids}], hit [#{hit_ids}]"
11
+ end
12
+ end
13
+ end
14
+
15
+ SecondLevelCache::LogSubscriber.attach_to :second_level_cache
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SecondLevelCache
4
- VERSION = "2.6.0"
4
+ VERSION = "2.6.1"
5
5
  end
@@ -1,12 +1,13 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/second_level_cache/version', __FILE__)
3
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../lib/second_level_cache/version", __FILE__)
4
+ lib = File.expand_path("../lib", __FILE__)
4
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
6
 
6
7
  Gem::Specification.new do |gem|
7
- gem.authors = ['Hooopo']
8
- gem.email = ['hoooopo@gmail.com']
9
- gem.description = 'Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4.'
8
+ gem.authors = ["Hooopo"]
9
+ gem.email = ["hoooopo@gmail.com"]
10
+ gem.description = "Write Through and Read Through caching library inspired by CacheMoney and cache_fu, support ActiveRecord 4."
10
11
  gem.summary = <<-SUMMARY
11
12
  SecondLevelCache is a write-through and read-through caching library inspired by Cache Money and cache_fu, support only Rails3 and ActiveRecord.
12
13
 
@@ -15,26 +16,26 @@ Gem::Specification.new do |gem|
15
16
  Write-Through: As objects are created, updated, and deleted, all of the caches are automatically kept up-to-date and coherent.
16
17
  SUMMARY
17
18
 
18
- gem.homepage = 'https://github.com/hooopo/second_level_cache'
19
+ gem.homepage = "https://github.com/hooopo/second_level_cache"
19
20
 
20
- gem.files = Dir.glob('lib/**/*.rb') + [
21
- 'README.md',
22
- 'Rakefile',
23
- 'Gemfile',
24
- 'CHANGELOG.md',
25
- 'second_level_cache.gemspec'
21
+ gem.files = Dir.glob("lib/**/*.rb") + [
22
+ "README.md",
23
+ "Rakefile",
24
+ "Gemfile",
25
+ "CHANGELOG.md",
26
+ "second_level_cache.gemspec"
26
27
  ]
27
- gem.test_files = Dir.glob('test/**/*.rb')
28
+ gem.test_files = Dir.glob("test/**/*.rb")
28
29
  gem.executables = gem.files.grep(%r{^bin/})
29
- gem.name = 'second_level_cache'
30
- gem.require_paths = ['lib']
30
+ gem.name = "second_level_cache"
31
+ gem.require_paths = ["lib"]
31
32
  gem.version = SecondLevelCache::VERSION
32
33
 
33
- gem.add_runtime_dependency 'activesupport', ['>= 5.2', '< 7']
34
- gem.add_runtime_dependency 'activerecord', ['>= 5.2', '< 7']
34
+ gem.add_runtime_dependency "activerecord", [">= 5.2", "< 7"]
35
+ gem.add_runtime_dependency "activesupport", [">= 5.2", "< 7"]
35
36
 
36
- gem.add_development_dependency 'sqlite3', '> 1.4'
37
- gem.add_development_dependency 'rake'
38
- gem.add_development_dependency 'database_cleaner'
39
- gem.add_development_dependency 'rubocop', "~> 0.52.0"
37
+ gem.add_development_dependency "database_cleaner"
38
+ gem.add_development_dependency "rake"
39
+ gem.add_development_dependency "rubocop"
40
+ gem.add_development_dependency "sqlite3", "> 1.4"
40
41
  end
@@ -21,7 +21,7 @@ module ActiveRecordTestCaseHelper
21
21
  yield
22
22
 
23
23
  stream_io.rewind
24
- return captured_stream.read
24
+ captured_stream.read
25
25
  ensure
26
26
  captured_stream.close
27
27
  captured_stream.unlink
@@ -7,7 +7,7 @@ ActiveRecord::Base.connection.create_table(:accounts, force: true) do |t|
7
7
  t.timestamps null: false
8
8
  end
9
9
 
10
- class Account < ActiveRecord::Base
10
+ class Account < ApplicationRecord
11
11
  second_level_cache expires_in: 3.days
12
12
  belongs_to :user, foreign_key: :user_id, inverse_of: :account
13
13
  end
data/test/model/animal.rb CHANGED
@@ -6,7 +6,7 @@ ActiveRecord::Base.connection.create_table(:animals, force: true) do |t|
6
6
  t.timestamps null: false
7
7
  end
8
8
 
9
- class Animal < ActiveRecord::Base
9
+ class Animal < ApplicationRecord
10
10
  second_level_cache
11
11
  end
12
12
 
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
data/test/model/book.rb CHANGED
@@ -10,7 +10,7 @@ ActiveRecord::Base.connection.create_table(:books, force: true) do |t|
10
10
  t.boolean :normal, default: true, nil: false
11
11
  end
12
12
 
13
- class Book < ActiveRecord::Base
13
+ class Book < ApplicationRecord
14
14
  second_level_cache
15
15
 
16
16
  default_scope -> { where(normal: true) }
@@ -6,7 +6,7 @@ ActiveRecord::Base.connection.create_table(:contributions, force: true) do |t|
6
6
  t.date :date
7
7
  end
8
8
 
9
- class Contribution < ActiveRecord::Base
9
+ class Contribution < ApplicationRecord
10
10
  second_level_cache
11
11
 
12
12
  validates_uniqueness_of :user_id, scope: :date, if: -> { user_id_changed? || date_changed? }
data/test/model/image.rb CHANGED
@@ -6,7 +6,7 @@ ActiveRecord::Base.connection.create_table(:images, force: true) do |t|
6
6
  t.integer :imagable_id
7
7
  end
8
8
 
9
- class Image < ActiveRecord::Base
9
+ class Image < ApplicationRecord
10
10
  second_level_cache
11
11
 
12
12
  belongs_to :imagable, polymorphic: true, counter_cache: true
data/test/model/order.rb CHANGED
@@ -7,7 +7,7 @@ ActiveRecord::Base.connection.create_table(:orders, force: true, id: :uuid) do |
7
7
  t.timestamps null: false
8
8
  end
9
9
 
10
- class Order < ActiveRecord::Base
10
+ class Order < ApplicationRecord
11
11
  second_level_cache
12
12
 
13
13
  has_many :order_items
@@ -6,7 +6,7 @@ ActiveRecord::Base.connection.create_table(:order_items, force: true, id: :uuid)
6
6
  t.string :order_id
7
7
  end
8
8
 
9
- class OrderItem < ActiveRecord::Base
9
+ class OrderItem < ApplicationRecord
10
10
  second_level_cache
11
11
  belongs_to :order, touch: true
12
12
  end
data/test/model/post.rb CHANGED
@@ -6,7 +6,7 @@ ActiveRecord::Base.connection.create_table(:posts, force: true) do |t|
6
6
  t.integer :topic_id
7
7
  end
8
8
 
9
- class Post < ActiveRecord::Base
9
+ class Post < ApplicationRecord
10
10
  second_level_cache
11
11
  belongs_to :topic, touch: true
12
12
  end
data/test/model/topic.rb CHANGED
@@ -7,7 +7,7 @@ ActiveRecord::Base.connection.create_table(:topics, force: true) do |t|
7
7
  t.timestamps null: false
8
8
  end
9
9
 
10
- class Topic < ActiveRecord::Base
10
+ class Topic < ApplicationRecord
11
11
  second_level_cache
12
12
 
13
13
  has_many :posts
data/test/model/user.rb CHANGED
@@ -26,7 +26,7 @@ ActiveRecord::Base.connection.create_table(:namespaces, force: true) do |t|
26
26
  t.timestamps null: false
27
27
  end
28
28
 
29
- class User < ActiveRecord::Base
29
+ class User < ApplicationRecord
30
30
  CACHE_VERSION = 3
31
31
  second_level_cache(version: CACHE_VERSION, expires_in: 3.days)
32
32
  acts_as_paranoid
@@ -46,13 +46,13 @@ class User < ActiveRecord::Base
46
46
  enum status: %i[active archived]
47
47
  end
48
48
 
49
- class Namespace < ActiveRecord::Base
49
+ class Namespace < ApplicationRecord
50
50
  second_level_cache version: 1, expires_in: 3.days
51
51
 
52
52
  belongs_to :user
53
53
  end
54
54
 
55
- class ForkedUserLink < ActiveRecord::Base
55
+ class ForkedUserLink < ApplicationRecord
56
56
  second_level_cache version: 1, expires_in: 1.day
57
57
 
58
58
  belongs_to :forked_from_user, class_name: "User"
data/test/test_helper.rb CHANGED
@@ -16,6 +16,7 @@ require "second_level_cache"
16
16
 
17
17
  ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
18
18
 
19
+ require "model/application_record"
19
20
  require "model/user"
20
21
  require "model/book"
21
22
  require "model/image"
@@ -33,10 +34,6 @@ SecondLevelCache.configure do |config|
33
34
  config.cache_store = ActiveSupport::Cache::MemoryStore.new
34
35
  end
35
36
 
36
- SecondLevelCache.logger.level = Logger::INFO
37
- ActiveSupport::Cache::MemoryStore.logger = SecondLevelCache.logger
38
- ActiveRecord::Base.logger = SecondLevelCache.logger
39
-
40
37
  module ActiveSupport
41
38
  class TestCase
42
39
  setup do
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: second_level_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hooopo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-08 00:00:00.000000000 Z
11
+ date: 2020-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -31,7 +31,7 @@ dependencies:
31
31
  - !ruby/object:Gem::Version
32
32
  version: '7'
33
33
  - !ruby/object:Gem::Dependency
34
- name: activerecord
34
+ name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
@@ -51,19 +51,19 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: '7'
53
53
  - !ruby/object:Gem::Dependency
54
- name: sqlite3
54
+ name: database_cleaner
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - ">"
57
+ - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '1.4'
59
+ version: '0'
60
60
  type: :development
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - ">"
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: '1.4'
66
+ version: '0'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: rake
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -79,7 +79,7 @@ dependencies:
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
81
  - !ruby/object:Gem::Dependency
82
- name: database_cleaner
82
+ name: rubocop
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
85
  - - ">="
@@ -93,19 +93,19 @@ dependencies:
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  - !ruby/object:Gem::Dependency
96
- name: rubocop
96
+ name: sqlite3
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - "~>"
99
+ - - ">"
100
100
  - !ruby/object:Gem::Version
101
- version: 0.52.0
101
+ version: '1.4'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - "~>"
106
+ - - ">"
107
107
  - !ruby/object:Gem::Version
108
- version: 0.52.0
108
+ version: '1.4'
109
109
  description: Write Through and Read Through caching library inspired by CacheMoney
110
110
  and cache_fu, support ActiveRecord 4.
111
111
  email:
@@ -129,6 +129,7 @@ files:
129
129
  - lib/second_level_cache/active_record/persistence.rb
130
130
  - lib/second_level_cache/active_record/preloader.rb
131
131
  - lib/second_level_cache/config.rb
132
+ - lib/second_level_cache/log_subscriber.rb
132
133
  - lib/second_level_cache/mixin.rb
133
134
  - lib/second_level_cache/record_marshal.rb
134
135
  - lib/second_level_cache/record_relation.rb
@@ -143,6 +144,7 @@ files:
143
144
  - test/has_one_association_test.rb
144
145
  - test/model/account.rb
145
146
  - test/model/animal.rb
147
+ - test/model/application_record.rb
146
148
  - test/model/book.rb
147
149
  - test/model/contribution.rb
148
150
  - test/model/image.rb
@@ -211,6 +213,7 @@ test_files:
211
213
  - test/model/topic.rb
212
214
  - test/model/animal.rb
213
215
  - test/model/order.rb
216
+ - test/model/application_record.rb
214
217
  - test/model/post.rb
215
218
  - test/model/user.rb
216
219
  - test/fetch_by_uniq_key_test.rb