second_level_cache 2.1.0 → 2.1.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 +4 -4
- data/README.md +1 -1
- data/lib/second_level_cache.rb +1 -1
- data/lib/second_level_cache/active_record/finder_methods.rb +16 -29
- data/lib/second_level_cache/version.rb +1 -1
- data/test/model/animal.rb +14 -0
- data/test/second_level_cache_test.rb +1 -1
- data/test/single_table_inheritance_test.rb +36 -0
- data/test/test_helper.rb +1 -0
- metadata +6 -3
- data/lib/second_level_cache/arel/wheres.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c1235017053004991468a6a2eb8661d8e9d82e7
|
4
|
+
data.tar.gz: db06d8212c45306ba2b895765a2aa90a30e29569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 467e7aba16374a978b653ca9c4236214ad33d178b10643027b4e2adc45337016b292dc212ae6ce7985d2ac2794765ba9038583decaa000183e7ef081846b6038
|
7
|
+
data.tar.gz: b66b78795b29cbabd3dc263c2a22f11681acf937dac404629af4d0b754e948926fea1e4730e1631a4d1b5c8069d2792b6e54d486cd2def0901c956b9cc746829
|
data/README.md
CHANGED
data/lib/second_level_cache.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
require 'second_level_cache/arel/wheres'
|
3
|
-
|
4
2
|
module SecondLevelCache
|
5
3
|
module ActiveRecord
|
6
4
|
module FinderMethods
|
7
5
|
extend ActiveSupport::Concern
|
8
6
|
|
9
7
|
included do
|
10
|
-
|
11
|
-
alias_method_chain :find_one, :second_level_cache
|
12
|
-
end
|
8
|
+
alias_method_chain :find_one, :second_level_cache
|
13
9
|
end
|
14
10
|
|
15
11
|
# TODO find_some
|
@@ -28,46 +24,37 @@ module SecondLevelCache
|
|
28
24
|
def find_one_with_second_level_cache(id)
|
29
25
|
return find_one_without_second_level_cache(id) unless second_level_cache_enabled?
|
30
26
|
return find_one_without_second_level_cache(id) unless select_all_column?
|
31
|
-
|
27
|
+
|
32
28
|
id = id.id if ActiveRecord::Base === id
|
33
29
|
|
34
30
|
if cachable?
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
if cachable_without_conditions?
|
41
|
-
if record = @klass.read_second_level_cache(id)
|
42
|
-
return record if where_match_with_cache?(where_values, record)
|
31
|
+
record = @klass.read_second_level_cache(id)
|
32
|
+
if record
|
33
|
+
return record if where_values.blank? || where_values_match_cache?(record)
|
43
34
|
end
|
44
35
|
end
|
45
|
-
|
36
|
+
|
46
37
|
record = find_one_without_second_level_cache(id)
|
47
38
|
record.write_second_level_cache
|
48
39
|
record
|
49
40
|
end
|
50
41
|
|
51
|
-
|
42
|
+
private
|
52
43
|
|
53
44
|
def cachable?
|
54
|
-
where_values.blank? &&
|
55
|
-
limit_one? && order_values.blank? &&
|
56
|
-
includes_values.blank? && preload_values.blank? &&
|
57
|
-
readonly_value.nil? && joins_values.blank? && !@klass.locking_enabled?
|
58
|
-
end
|
59
|
-
|
60
|
-
def cachable_without_conditions?
|
61
45
|
limit_one? && order_values.blank? &&
|
62
46
|
includes_values.blank? && preload_values.blank? &&
|
63
|
-
readonly_value.nil? && joins_values.blank? && !@klass.locking_enabled?
|
47
|
+
readonly_value.nil? && joins_values.blank? && !@klass.locking_enabled? &&
|
48
|
+
where_values.all? { |where_value| where_value.is_a?(::Arel::Nodes::Equality) }
|
64
49
|
end
|
65
50
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
51
|
+
def where_values_match_cache?(record)
|
52
|
+
where_values_hash.all? do |key, value|
|
53
|
+
if value.is_a?(Array)
|
54
|
+
value.include?(record.read_attribute(key))
|
55
|
+
else
|
56
|
+
record.read_attribute(key) == value
|
57
|
+
end
|
71
58
|
end
|
72
59
|
end
|
73
60
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
ActiveRecord::Base.connection.create_table(:animals, force: true) do |t|
|
3
|
+
t.string :type
|
4
|
+
t.string :name
|
5
|
+
t.timestamps
|
6
|
+
end
|
7
|
+
|
8
|
+
class Animal < ActiveRecord::Base
|
9
|
+
acts_as_cached
|
10
|
+
end
|
11
|
+
|
12
|
+
class Dog < Animal
|
13
|
+
acts_as_cached
|
14
|
+
end
|
@@ -7,7 +7,7 @@ class SecondLevelCacheTest < ActiveSupport::TestCase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_should_get_cache_key
|
10
|
-
assert_equal "slc/
|
10
|
+
assert_equal "slc/users/#{@user.id}/#{User::CacheVersion}", @user.second_level_cache_key
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_should_write_and_read_cache
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SingleTableInheritanceTest < ActiveSupport::TestCase
|
5
|
+
def test_superclass_find__caches_superclass_record
|
6
|
+
animal = Animal.create
|
7
|
+
assert_no_queries do
|
8
|
+
assert_equal animal, Animal.find(animal.id)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_superclass_find__caches_subclass_record
|
13
|
+
dog = Dog.create
|
14
|
+
assert_no_queries do
|
15
|
+
assert_equal dog, Animal.find(dog.id)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_subclass_find__caches_subclass_record
|
20
|
+
dog = Dog.create
|
21
|
+
dog_id = dog.id
|
22
|
+
assert_no_queries do
|
23
|
+
newdog = Dog.find(dog_id)
|
24
|
+
assert_equal dog, newdog
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_subclass_find__doesnt_find_superclass_record
|
29
|
+
animal = Animal.create
|
30
|
+
assert_queries(:any) do
|
31
|
+
assert_raises ActiveRecord::RecordNotFound do
|
32
|
+
Dog.find(animal.id)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/test/test_helper.rb
CHANGED
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.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hooopo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -113,7 +113,6 @@ files:
|
|
113
113
|
- lib/second_level_cache/active_record/has_one_association.rb
|
114
114
|
- lib/second_level_cache/active_record/persistence.rb
|
115
115
|
- lib/second_level_cache/active_record/preloader.rb
|
116
|
-
- lib/second_level_cache/arel/wheres.rb
|
117
116
|
- lib/second_level_cache/config.rb
|
118
117
|
- lib/second_level_cache/record_marshal.rb
|
119
118
|
- lib/second_level_cache/version.rb
|
@@ -125,6 +124,7 @@ files:
|
|
125
124
|
- test/finder_methods_test.rb
|
126
125
|
- test/has_one_association_test.rb
|
127
126
|
- test/model/account.rb
|
127
|
+
- test/model/animal.rb
|
128
128
|
- test/model/book.rb
|
129
129
|
- test/model/image.rb
|
130
130
|
- test/model/post.rb
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- test/record_marshal_test.rb
|
137
137
|
- test/require_test.rb
|
138
138
|
- test/second_level_cache_test.rb
|
139
|
+
- test/single_table_inheritance_test.rb
|
139
140
|
- test/test_helper.rb
|
140
141
|
homepage: https://github.com/csdn-dev/second_level_cache
|
141
142
|
licenses: []
|
@@ -173,6 +174,7 @@ test_files:
|
|
173
174
|
- test/finder_methods_test.rb
|
174
175
|
- test/has_one_association_test.rb
|
175
176
|
- test/model/account.rb
|
177
|
+
- test/model/animal.rb
|
176
178
|
- test/model/book.rb
|
177
179
|
- test/model/image.rb
|
178
180
|
- test/model/post.rb
|
@@ -184,4 +186,5 @@ test_files:
|
|
184
186
|
- test/record_marshal_test.rb
|
185
187
|
- test/require_test.rb
|
186
188
|
- test/second_level_cache_test.rb
|
189
|
+
- test/single_table_inheritance_test.rb
|
187
190
|
- test/test_helper.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module SecondLevelCache
|
3
|
-
module Arel
|
4
|
-
class Wheres
|
5
|
-
attr_reader :where_values
|
6
|
-
|
7
|
-
def initialize(where_values)
|
8
|
-
@where_values = where_values
|
9
|
-
end
|
10
|
-
|
11
|
-
# Determine whether all conditions is equality, for example:
|
12
|
-
#
|
13
|
-
# Article.where("user_id = 1").where(:status => 1).find(1)
|
14
|
-
def all_equality?
|
15
|
-
where_values.all?{|where_value| where_value.is_a?(::Arel::Nodes::Equality)}
|
16
|
-
end
|
17
|
-
|
18
|
-
# Extract conditions to pairs, for checking whether cache match the conditions.
|
19
|
-
def extract_pairs
|
20
|
-
where_values.map do |where_value|
|
21
|
-
if where_value.is_a?(String)
|
22
|
-
left, right = where_value.split(/\s*=\s*/, 2)
|
23
|
-
right = right.to_i
|
24
|
-
else
|
25
|
-
left, right = where_value.left.name, where_value.right
|
26
|
-
end
|
27
|
-
{
|
28
|
-
:left => left,
|
29
|
-
:right => right
|
30
|
-
}
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|