second_level_cache 2.0.0.beta → 2.0.0.rc1
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.
- data/lib/second_level_cache/active_record/fetch_by_uniq_key.rb +1 -1
- data/lib/second_level_cache/active_record/has_one_association.rb +2 -2
- data/lib/second_level_cache/version.rb +1 -1
- data/test/active_record/fetch_by_uniq_key_test.rb +30 -0
- data/test/active_record/has_one_association_test.rb +16 -0
- data/test/active_record/model/account.rb +12 -0
- data/test/active_record/model/user.rb +2 -2
- data/test/active_record/test_helper.rb +2 -0
- metadata +7 -1
@@ -5,7 +5,7 @@ module SecondLevelCache
|
|
5
5
|
def fetch_by_uniq_key(value, uniq_key_name)
|
6
6
|
return self.where(uniq_key_name => value).first unless self.second_level_cache_enabled?
|
7
7
|
if _id = SecondLevelCache.cache_store.read(cache_uniq_key(value, uniq_key_name))
|
8
|
-
self.
|
8
|
+
self.find(_id) rescue nil
|
9
9
|
else
|
10
10
|
record = self.where(uniq_key_name => value).first
|
11
11
|
record.tap{|record| SecondLevelCache.cache_store.write(cache_uniq_key(value, uniq_key_name), record.id)} if record
|
@@ -11,8 +11,8 @@ module SecondLevelCache
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def find_target_with_second_level_cache
|
14
|
-
return find_target_without_second_level_cache unless
|
15
|
-
cache_record =
|
14
|
+
return find_target_without_second_level_cache unless klass.second_level_cache_enabled?
|
15
|
+
cache_record = klass.fetch_by_uniq_key(owner[reflection.active_record_primary_key], reflection.foreign_key)
|
16
16
|
return cache_record.tap{|record| set_inverse_instance(record)} if cache_record
|
17
17
|
|
18
18
|
record = find_target_without_second_level_cache
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'active_record/test_helper'
|
3
|
+
|
4
|
+
class ActiveRecord::FetchByUinqKeyTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
DatabaseCleaner[:active_record].start
|
7
|
+
@user = User.create :name => 'hooopo', :email => 'hoooopo@gmail.com'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_query_from_db_using_primary_key
|
11
|
+
User.fetch_by_uniq_key(@user.name, :name)
|
12
|
+
$sql_logger = nil
|
13
|
+
User.fetch_by_uniq_key(@user.name, :name)
|
14
|
+
assert_equal $sql_logger.strip, 'SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_hit_db_using_fetch_by_uniq_key_twice
|
18
|
+
user = User.fetch_by_uniq_key(@user.name, :name)
|
19
|
+
assert_equal user, @user
|
20
|
+
no_connection do
|
21
|
+
User.fetch_by_uniq_key(@user.name, :name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_fail_when_fetch_by_uniq_key_with_bang_method
|
26
|
+
assert_raise(ActiveRecord::RecordNotFound) do
|
27
|
+
User.fetch_by_uniq_key!(@user.name + "not_exist", :name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'active_record/test_helper'
|
3
|
+
|
4
|
+
class ActiveRecord::HasOneAssociationTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@user = User.create :name => 'hooopo', :email => 'hoooopo@gmail.com'
|
7
|
+
@account = @user.create_account
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_fetch_account_from_cache
|
11
|
+
clean_user = @user.reload
|
12
|
+
no_connection do
|
13
|
+
clean_user.account
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
ActiveRecord::Base.connection.create_table(:accounts, :force => true) do |t|
|
3
|
+
t.integer :age
|
4
|
+
t.string :site
|
5
|
+
t.integer :user_id
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
class Account < ActiveRecord::Base
|
10
|
+
acts_as_cached(:expires_in => 3.day)
|
11
|
+
belongs_to :user
|
12
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
ActiveRecord::Base.connection.create_table(:users, :force => true) do |t|
|
3
3
|
t.text :options
|
4
|
-
t.string :name
|
4
|
+
t.string :name, :unique => true
|
5
5
|
t.string :email
|
6
6
|
t.integer :books_count, :default => 0
|
7
7
|
t.integer :images_count, :default => 0
|
@@ -12,7 +12,7 @@ class User < ActiveRecord::Base
|
|
12
12
|
CacheVersion = 3
|
13
13
|
serialize :options, Array
|
14
14
|
acts_as_cached(:version => CacheVersion, :expires_in => 3.day)
|
15
|
-
|
15
|
+
has_one :account
|
16
16
|
has_many :books
|
17
17
|
has_many :images, :as => :imagable
|
18
18
|
end
|
@@ -25,6 +25,7 @@ class Test::Unit::TestCase
|
|
25
25
|
|
26
26
|
def teardown
|
27
27
|
$sql_logger = nil
|
28
|
+
SecondLevelCache.cache_store.clear
|
28
29
|
DatabaseCleaner[:active_record].clean
|
29
30
|
end
|
30
31
|
end
|
@@ -46,3 +47,4 @@ require 'active_record/model/book'
|
|
46
47
|
require 'active_record/model/image'
|
47
48
|
require 'active_record/model/topic'
|
48
49
|
require 'active_record/model/post'
|
50
|
+
require 'active_record/model/account'
|
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: 2.0.0.
|
4
|
+
version: 2.0.0.rc1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -119,7 +119,10 @@ files:
|
|
119
119
|
- second_level_cache.gemspec
|
120
120
|
- test/active_record/base_test.rb
|
121
121
|
- test/active_record/belongs_to_association_test.rb
|
122
|
+
- test/active_record/fetch_by_uniq_key_test.rb
|
122
123
|
- test/active_record/finder_methods_test.rb
|
124
|
+
- test/active_record/has_one_association_test.rb
|
125
|
+
- test/active_record/model/account.rb
|
123
126
|
- test/active_record/model/book.rb
|
124
127
|
- test/active_record/model/image.rb
|
125
128
|
- test/active_record/model/post.rb
|
@@ -165,7 +168,10 @@ summary: ! 'SecondLevelCache is a write-through and read-through caching library
|
|
165
168
|
test_files:
|
166
169
|
- test/active_record/base_test.rb
|
167
170
|
- test/active_record/belongs_to_association_test.rb
|
171
|
+
- test/active_record/fetch_by_uniq_key_test.rb
|
168
172
|
- test/active_record/finder_methods_test.rb
|
173
|
+
- test/active_record/has_one_association_test.rb
|
174
|
+
- test/active_record/model/account.rb
|
169
175
|
- test/active_record/model/book.rb
|
170
176
|
- test/active_record/model/image.rb
|
171
177
|
- test/active_record/model/post.rb
|