second_level_cache 2.3.0 → 2.3.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
  SHA1:
3
- metadata.gz: 4abc1a1470dbaddc2928a7b91c0c629eb0c92891
4
- data.tar.gz: eb785ea9967fa623b5492ef1677388e53d693fe7
3
+ metadata.gz: 4ca8ef3f66bcc6dcc76e93958357d577a63a4769
4
+ data.tar.gz: f90a4c724367d36589712a31df03723c2f4b7248
5
5
  SHA512:
6
- metadata.gz: e828132b84bec6a95eb5506b0d8ea55f2c713d1e6ef775d40780f8ab75ba490c2bab37c63c77a26a2ffd81669fc577f2de76e623e5dd9576cc890af3e504f3e7
7
- data.tar.gz: a453166bc6e5216b5b4dd3b3abbea6a995b626916eff9346bbf5bfa1d7a53f2af93825cfb93077c6482c4cd0fc134fb97465a6c1452b58729c728b6d28c7b11d
6
+ metadata.gz: 2a544566618c8643153d1bbd7c764878323b67e731cded7b1a0419866f8be54564a4fc8bcfb4c6a6511aa6ee54ad3e7824fc0887206463aed2146d075bb18fd8
7
+ data.tar.gz: c94834042b2d630e6a3281af8cfedac728d9e4e7f76df5bd6230b577eb2669451391881bb732c42416c15ee1eeee8aff162abe4f9186d401bc28913fef98747d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ 2.3.1
2
+ -----
3
+
4
+ - Fix some cases will raise "uninitialized constant SecondLevelCache::Mixin" error. (#66)
5
+
6
+ 2.3.0
7
+ -----
8
+
9
+ * Use Model schema digest as cache_version, so you don't need set `:version` option now. (#60)
10
+ * Fix `store` serialize option (#62)
11
+ * Remove `acts_as_cached` method now! Please use `second_level_cache`. (#59)
12
+
1
13
  2.2.7
2
14
  -----
3
15
 
@@ -12,92 +12,4 @@ module SecondLevelCache
12
12
  class << self
13
13
  delegate :logger, :cache_store, :cache_key_prefix, to: Config
14
14
  end
15
-
16
- module Mixin
17
- extend ActiveSupport::Concern
18
-
19
- module ClassMethods
20
- attr_reader :second_level_cache_options
21
-
22
- delegate :logger, :cache_store, :cache_key_prefix, to: SecondLevelCache
23
-
24
- def second_level_cache(options = {})
25
- @second_level_cache_enabled = true
26
- @second_level_cache_options = options
27
- @second_level_cache_options[:version] ||= 0
28
- @second_level_cache_options[:expires_in] ||= 1.week
29
- relation.class.send :prepend, SecondLevelCache::ActiveRecord::FinderMethods
30
- prepend SecondLevelCache::ActiveRecord::Core
31
- end
32
-
33
- def second_level_cache_enabled?
34
- if defined? @second_level_cache_enabled
35
- @second_level_cache_enabled == true
36
- else
37
- false
38
- end
39
- end
40
-
41
- def without_second_level_cache
42
- old = @second_level_cache_enabled
43
- @second_level_cache_enabled = false
44
-
45
- yield if block_given?
46
- ensure
47
- @second_level_cache_enabled = old
48
- end
49
-
50
- # Get MD5 digest of this Model schema
51
- # http://api.rubyonrails.org/classes/ActiveRecord/Core/ClassMethods.html#method-i-inspect
52
- def cache_version
53
- return @cache_version if defined? @cache_version
54
- # This line is copy from:
55
- # https://github.com/rails/rails/blob/f9a5f48/activerecord/lib/active_record/core.rb#L236
56
- attr_list = attribute_types.map { |name, type| "#{name}: #{type.type}" } * ', '
57
- model_schema_digest = Digest::MD5.hexdigest(attr_list)
58
- @cache_version = "#{second_level_cache_options[:version]}/#{model_schema_digest}"
59
- end
60
-
61
- def second_level_cache_key(id)
62
- "#{cache_key_prefix}/#{table_name.downcase}/#{id}/#{cache_version}"
63
- end
64
-
65
- def read_second_level_cache(id)
66
- return unless second_level_cache_enabled?
67
- RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id)))
68
- end
69
-
70
- def expire_second_level_cache(id)
71
- return unless second_level_cache_enabled?
72
- SecondLevelCache.cache_store.delete(second_level_cache_key(id))
73
- end
74
- end
75
-
76
- def second_level_cache_key
77
- self.class.second_level_cache_key(id)
78
- end
79
-
80
- def expire_second_level_cache
81
- return unless self.class.second_level_cache_enabled?
82
- SecondLevelCache.cache_store.delete(second_level_cache_key)
83
- end
84
-
85
- def write_second_level_cache
86
- return unless self.class.second_level_cache_enabled?
87
- marshal = RecordMarshal.dump(self)
88
- expires_in = self.class.second_level_cache_options[:expires_in]
89
- expire_changed_association_uniq_keys
90
- SecondLevelCache.cache_store.write(second_level_cache_key, marshal, expires_in: expires_in)
91
- end
92
-
93
- alias update_second_level_cache write_second_level_cache
94
-
95
- def expire_changed_association_uniq_keys
96
- reflections = self.class.reflections.select { |_, reflection| reflection.belongs_to? }
97
- changed_keys = reflections.map { |_, reflection| reflection.foreign_key } & previous_changes.keys
98
- changed_keys.each do |key|
99
- SecondLevelCache.cache_store.delete(self.class.send(:cache_uniq_key, key => previous_changes[key][0]))
100
- end
101
- end
102
- end
103
15
  end
@@ -1,3 +1,4 @@
1
+ require 'second_level_cache/mixin'
1
2
  require 'second_level_cache/active_record/base'
2
3
  require 'second_level_cache/active_record/core'
3
4
  require 'second_level_cache/active_record/fetch_by_uniq_key'
@@ -0,0 +1,89 @@
1
+ module SecondLevelCache
2
+ module Mixin
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ attr_reader :second_level_cache_options
7
+
8
+ delegate :logger, :cache_store, :cache_key_prefix, to: SecondLevelCache
9
+
10
+ def second_level_cache(options = {})
11
+ @second_level_cache_enabled = true
12
+ @second_level_cache_options = options
13
+ @second_level_cache_options[:version] ||= 0
14
+ @second_level_cache_options[:expires_in] ||= 1.week
15
+ relation.class.send :prepend, SecondLevelCache::ActiveRecord::FinderMethods
16
+ prepend SecondLevelCache::ActiveRecord::Core
17
+ end
18
+
19
+ def second_level_cache_enabled?
20
+ if defined? @second_level_cache_enabled
21
+ @second_level_cache_enabled == true
22
+ else
23
+ false
24
+ end
25
+ end
26
+
27
+ def without_second_level_cache
28
+ old = @second_level_cache_enabled
29
+ @second_level_cache_enabled = false
30
+
31
+ yield if block_given?
32
+ ensure
33
+ @second_level_cache_enabled = old
34
+ end
35
+
36
+ # Get MD5 digest of this Model schema
37
+ # http://api.rubyonrails.org/classes/ActiveRecord/Core/ClassMethods.html#method-i-inspect
38
+ def cache_version
39
+ return @cache_version if defined? @cache_version
40
+ # This line is copy from:
41
+ # https://github.com/rails/rails/blob/f9a5f48/activerecord/lib/active_record/core.rb#L236
42
+ attr_list = attribute_types.map { |name, type| "#{name}: #{type.type}" } * ', '
43
+ model_schema_digest = Digest::MD5.hexdigest(attr_list)
44
+ @cache_version = "#{second_level_cache_options[:version]}/#{model_schema_digest}"
45
+ end
46
+
47
+ def second_level_cache_key(id)
48
+ "#{cache_key_prefix}/#{table_name.downcase}/#{id}/#{cache_version}"
49
+ end
50
+
51
+ def read_second_level_cache(id)
52
+ return unless second_level_cache_enabled?
53
+ RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id)))
54
+ end
55
+
56
+ def expire_second_level_cache(id)
57
+ return unless second_level_cache_enabled?
58
+ SecondLevelCache.cache_store.delete(second_level_cache_key(id))
59
+ end
60
+ end
61
+
62
+ def second_level_cache_key
63
+ self.class.second_level_cache_key(id)
64
+ end
65
+
66
+ def expire_second_level_cache
67
+ return unless self.class.second_level_cache_enabled?
68
+ SecondLevelCache.cache_store.delete(second_level_cache_key)
69
+ end
70
+
71
+ def write_second_level_cache
72
+ return unless self.class.second_level_cache_enabled?
73
+ marshal = RecordMarshal.dump(self)
74
+ expires_in = self.class.second_level_cache_options[:expires_in]
75
+ expire_changed_association_uniq_keys
76
+ SecondLevelCache.cache_store.write(second_level_cache_key, marshal, expires_in: expires_in)
77
+ end
78
+
79
+ alias update_second_level_cache write_second_level_cache
80
+
81
+ def expire_changed_association_uniq_keys
82
+ reflections = self.class.reflections.select { |_, reflection| reflection.belongs_to? }
83
+ changed_keys = reflections.map { |_, reflection| reflection.foreign_key } & previous_changes.keys
84
+ changed_keys.each do |key|
85
+ SecondLevelCache.cache_store.delete(self.class.send(:cache_uniq_key, key => previous_changes[key][0]))
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module SecondLevelCache
3
- VERSION = '2.3.0'.freeze
3
+ VERSION = '2.3.1'.freeze
4
4
  end
data/test/test_helper.rb CHANGED
@@ -6,6 +6,8 @@ require 'database_cleaner'
6
6
  require 'active_record'
7
7
 
8
8
  ActiveSupport.test_order = :sorted if ActiveSupport.respond_to?(:test_order=)
9
+ # Force hook :active_record on_load event to make sure loader can work.
10
+ ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base)
9
11
 
10
12
  require 'second_level_cache'
11
13
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: second_level_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hooopo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-19 00:00:00.000000000 Z
11
+ date: 2017-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -143,6 +143,7 @@ files:
143
143
  - lib/second_level_cache/active_record/persistence.rb
144
144
  - lib/second_level_cache/active_record/preloader.rb
145
145
  - lib/second_level_cache/config.rb
146
+ - lib/second_level_cache/mixin.rb
146
147
  - lib/second_level_cache/record_marshal.rb
147
148
  - lib/second_level_cache/record_relation.rb
148
149
  - lib/second_level_cache/version.rb