second_level_cache 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/lib/second_level_cache/record_marshal.rb +27 -0
- data/lib/second_level_cache/version.rb +1 -1
- data/lib/second_level_cache.rb +3 -4
- data/test/active_record/polymorphic_association_test.rb +0 -2
- data/test/record_marshal_test.rb +33 -0
- metadata +4 -9
- data/lib/second_level_cache/marshal.rb +0 -16
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module RecordMarshal
|
3
|
+
class << self
|
4
|
+
# dump ActiveRecord instace with only attributes.
|
5
|
+
# ["User",
|
6
|
+
# {"id"=>30,
|
7
|
+
# "email"=>"dddssddd@gmail.com",
|
8
|
+
# "created_at"=>2012-07-25 18:25:57 UTC
|
9
|
+
# }
|
10
|
+
# ]
|
11
|
+
|
12
|
+
def dump(record)
|
13
|
+
[
|
14
|
+
record.class.name,
|
15
|
+
record.instance_variable_get(:@attributes)
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
# load a cached record
|
20
|
+
def load(serialized)
|
21
|
+
return unless serialized
|
22
|
+
record = serialized[0].constantize.allocate
|
23
|
+
record.init_with('attributes' => serialized[1])
|
24
|
+
record
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/second_level_cache.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
require 'active_support/all'
|
3
3
|
require 'second_level_cache/config'
|
4
|
-
require 'second_level_cache/
|
4
|
+
require 'second_level_cache/record_marshal'
|
5
5
|
|
6
6
|
module SecondLevelCache
|
7
7
|
def self.configure
|
@@ -50,7 +50,7 @@ module SecondLevelCache
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def read_second_level_cache(id)
|
53
|
-
SecondLevelCache.cache_store.read(second_level_cache_key(id)) if self.second_level_cache_enabled?
|
53
|
+
RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id))) if self.second_level_cache_enabled?
|
54
54
|
end
|
55
55
|
|
56
56
|
def expire_second_level_cache(id)
|
@@ -68,8 +68,7 @@ module SecondLevelCache
|
|
68
68
|
|
69
69
|
def write_second_level_cache
|
70
70
|
if self.class.second_level_cache_enabled?
|
71
|
-
self.
|
72
|
-
SecondLevelCache.cache_store.write(second_level_cache_key, self, :expires_in => self.class.second_level_cache_options[:expires_in])
|
71
|
+
SecondLevelCache.cache_store.write(second_level_cache_key, RecordMarshal.dump(self), :expires_in => self.class.second_level_cache_options[:expires_in])
|
73
72
|
end
|
74
73
|
end
|
75
74
|
end
|
@@ -10,7 +10,6 @@ class ActiveRecord::PolymorphicAssociationTest < Test::Unit::TestCase
|
|
10
10
|
image = @user.images.create
|
11
11
|
|
12
12
|
@user.write_second_level_cache
|
13
|
-
image.clear_association_cache
|
14
13
|
no_connection do
|
15
14
|
assert_equal @user, image.imagable
|
16
15
|
end
|
@@ -18,7 +17,6 @@ class ActiveRecord::PolymorphicAssociationTest < Test::Unit::TestCase
|
|
18
17
|
|
19
18
|
def test_should_write_polymorphic_association_cache
|
20
19
|
image = @user.images.create
|
21
|
-
@user.expire_second_level_cache
|
22
20
|
assert_nil User.read_second_level_cache(@user.id)
|
23
21
|
assert_equal @user, image.imagable
|
24
22
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'active_record/test_helper'
|
3
|
+
|
4
|
+
class RecordMarshalTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@user = User.create :name => 'csdn', :email => 'test@csdn.com'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_dump_active_record_object
|
10
|
+
dumped = RecordMarshal.dump(@user)
|
11
|
+
assert dumped.is_a?(Array)
|
12
|
+
assert_equal "User", dumped[0]
|
13
|
+
assert_equal @user.attributes, dumped[1]
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def test_should_load_active_record_object
|
18
|
+
@user.write_second_level_cache
|
19
|
+
assert_equal @user, User.read_second_level_cache(@user.id)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def test_should_load_nil
|
24
|
+
@user.expire_second_level_cache
|
25
|
+
assert_nil User.read_second_level_cache(@user.id)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_load_active_record_object_without_association_cache
|
29
|
+
@user.books
|
30
|
+
@user.write_second_level_cache
|
31
|
+
assert_empty User.read_second_level_cache(@user.id).association_cache
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: second_level_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -99,7 +99,7 @@ files:
|
|
99
99
|
- lib/second_level_cache/active_record/persistence.rb
|
100
100
|
- lib/second_level_cache/arel/wheres.rb
|
101
101
|
- lib/second_level_cache/config.rb
|
102
|
-
- lib/second_level_cache/
|
102
|
+
- lib/second_level_cache/record_marshal.rb
|
103
103
|
- lib/second_level_cache/version.rb
|
104
104
|
- second_level_cache.gemspec
|
105
105
|
- test/active_record/base_test.rb
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- test/active_record/polymorphic_association_test.rb
|
115
115
|
- test/active_record/second_level_cache_test.rb
|
116
116
|
- test/active_record/test_helper.rb
|
117
|
+
- test/record_marshal_test.rb
|
117
118
|
- test/test_helper.rb
|
118
119
|
homepage: https://github.com/csdn-dev/second_level_cache
|
119
120
|
licenses: []
|
@@ -127,18 +128,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
128
|
- - ! '>='
|
128
129
|
- !ruby/object:Gem::Version
|
129
130
|
version: '0'
|
130
|
-
segments:
|
131
|
-
- 0
|
132
|
-
hash: -453317869
|
133
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
132
|
none: false
|
135
133
|
requirements:
|
136
134
|
- - ! '>='
|
137
135
|
- !ruby/object:Gem::Version
|
138
136
|
version: '0'
|
139
|
-
segments:
|
140
|
-
- 0
|
141
|
-
hash: -453317869
|
142
137
|
requirements: []
|
143
138
|
rubyforge_project:
|
144
139
|
rubygems_version: 1.8.24
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Marshal
|
3
|
-
class << self
|
4
|
-
def load_with_constantize(value)
|
5
|
-
begin
|
6
|
-
Marshal.load_without_constantize value
|
7
|
-
rescue ArgumentError => e
|
8
|
-
_, class_name = *(/undefined class\/module (\w+)/.match(e.message))
|
9
|
-
raise if !class_name
|
10
|
-
class_name.constantize
|
11
|
-
Marshal.load value
|
12
|
-
end
|
13
|
-
end
|
14
|
-
alias_method_chain :load, :constantize
|
15
|
-
end
|
16
|
-
end
|