rcache 0.0.4 → 0.0.6
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/README.md +2 -0
- data/Rakefile +9 -0
- data/config/redis.yml +8 -0
- data/lib/rcache/association.rb +3 -16
- data/lib/rcache/relation.rb +1 -1
- data/lib/rcache/version.rb +1 -1
- data/lib/rcache.rb +2 -0
- data/rcache.gemspec +5 -0
- data/test/models/client.rb +3 -0
- data/test/models/event.rb +4 -0
- data/test/models/quote.rb +5 -0
- data/test/rcache_test.rb +43 -0
- data/test/test_helper.rb +64 -0
- metadata +96 -5
data/README.md
CHANGED
@@ -39,6 +39,8 @@ Cache where results with includes for 10 seconds and not show cached queries in
|
|
39
39
|
|
40
40
|
Event.limit(2).includes(:thumbnails, :type => :variable).rcache(:expires_in => 10.seconds, :log_cached_queries => false)
|
41
41
|
|
42
|
+
It supports only activerecord 3.2 so far
|
43
|
+
|
42
44
|
## Contributing
|
43
45
|
|
44
46
|
1. Fork it
|
data/Rakefile
CHANGED
data/config/redis.yml
ADDED
data/lib/rcache/association.rb
CHANGED
@@ -2,24 +2,11 @@ module ActiveRecord
|
|
2
2
|
module Associations
|
3
3
|
class Preloader
|
4
4
|
class Association #:nodoc:
|
5
|
-
|
6
|
-
scope = klass.scoped
|
7
|
-
|
8
|
-
scope = scope.where(process_conditions(options[:conditions]))
|
9
|
-
scope = scope.where(process_conditions(preload_options[:conditions]))
|
10
|
-
|
11
|
-
scope = scope.select(preload_options[:select] || options[:select] || table[Arel.star])
|
12
|
-
scope = scope.includes(preload_options[:include] || options[:include])
|
5
|
+
alias :old_build_scope :build_scope
|
13
6
|
|
14
|
-
|
15
|
-
|
16
|
-
klass.table_name => {
|
17
|
-
reflection.type => model.base_class.sti_name
|
18
|
-
}
|
19
|
-
)
|
20
|
-
end
|
7
|
+
def build_scope
|
8
|
+
scope = old_build_scope
|
21
9
|
scope = scope.rcache(preload_options[:rcache_value]) if preload_options[:rcache_value]
|
22
|
-
|
23
10
|
scope
|
24
11
|
end
|
25
12
|
end
|
data/lib/rcache/relation.rb
CHANGED
@@ -30,7 +30,7 @@ module ActiveRecord
|
|
30
30
|
readonly = @readonly_value.nil? ? @implicit_readonly : @readonly_value
|
31
31
|
@records.each { |record| record.readonly! } if readonly
|
32
32
|
else
|
33
|
-
@records = default_scoped.to_a
|
33
|
+
@records = default_scoped.rcache(rcache_value).to_a
|
34
34
|
end
|
35
35
|
|
36
36
|
|
data/lib/rcache/version.rb
CHANGED
data/lib/rcache.rb
CHANGED
data/rcache.gemspec
CHANGED
@@ -19,7 +19,12 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "json"
|
22
|
+
spec.add_runtime_dependency "activerecord", "~> 3.2"
|
23
|
+
spec.add_runtime_dependency "redis"
|
22
24
|
|
23
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
26
|
+
spec.add_development_dependency "sqlite3"
|
24
27
|
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "test-unit"
|
29
|
+
spec.add_development_dependency "shoulda-context"
|
25
30
|
end
|
data/test/rcache_test.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RcacheTest < Test::Unit::TestCase
|
4
|
+
context 'rcache' do
|
5
|
+
setup do
|
6
|
+
setup_db
|
7
|
+
seed_db
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'disabled' do
|
11
|
+
should 'return from db' do
|
12
|
+
assert Client.includes(:events => :quotes).first.events.map(&:quotes).flatten.any?
|
13
|
+
ActiveRecord::Base.connection.execute('delete from quotes')
|
14
|
+
assert Client.includes(:events => :quotes).first.events.map(&:quotes).flatten.empty?
|
15
|
+
|
16
|
+
assert Client.first.present?
|
17
|
+
ActiveRecord::Base.connection.execute('delete from clients')
|
18
|
+
assert Client.first.nil?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'enabled' do
|
23
|
+
should 'return from cache' do
|
24
|
+
assert Client.rcache.includes(:events => :quotes).first.events.map(&:quotes).flatten.any?
|
25
|
+
ActiveRecord::Base.connection.execute('delete from quotes')
|
26
|
+
assert Client.rcache.includes(:events => :quotes).first.events.map(&:quotes).flatten.any?
|
27
|
+
teardown_redis
|
28
|
+
assert Client.rcache.includes(:events => :quotes).first.events.map(&:quotes).flatten.empty?
|
29
|
+
|
30
|
+
assert Client.rcache.first.present?
|
31
|
+
ActiveRecord::Base.connection.execute('delete from clients')
|
32
|
+
assert Client.rcache.first.present?
|
33
|
+
teardown_redis
|
34
|
+
assert Client.rcache.first.nil?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
teardown do
|
39
|
+
teardown_db
|
40
|
+
teardown_redis
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'shoulda-context'
|
5
|
+
require 'rcache'
|
6
|
+
|
7
|
+
redis_config = YAML.load_file("config/redis.yml")['test'].symbolize_keys
|
8
|
+
redis = Redis.new(
|
9
|
+
:host => redis_config[:host],
|
10
|
+
:port => redis_config[:port],
|
11
|
+
:db => redis_config[:database],
|
12
|
+
:password => redis_config[:password]
|
13
|
+
)
|
14
|
+
Rcache.configure do |config|
|
15
|
+
config.redis = redis
|
16
|
+
config.expires_in = 10
|
17
|
+
end
|
18
|
+
|
19
|
+
MODELS = File.join(File.dirname(__FILE__), "models")
|
20
|
+
$LOAD_PATH.unshift(MODELS)
|
21
|
+
Dir[ File.join(MODELS, "*.rb") ].each do |model|
|
22
|
+
model = File.basename(model, ".rb")
|
23
|
+
autoload model.camelize.to_sym, model
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveRecord::Migration.verbose = false
|
27
|
+
|
28
|
+
def setup_db
|
29
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
30
|
+
|
31
|
+
ActiveRecord::Schema.define(:version => 1) do
|
32
|
+
create_table :clients do |t|
|
33
|
+
t.string :name
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :events do |t|
|
37
|
+
t.string :name
|
38
|
+
t.integer :client_id
|
39
|
+
end
|
40
|
+
|
41
|
+
create_table :quotes do |t|
|
42
|
+
t.string :name
|
43
|
+
t.integer :event_id
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def seed_db
|
49
|
+
clients = Client.create([{ :name => 'client1' }, { :name => 'client2' }])
|
50
|
+
3.times do |n|
|
51
|
+
event = Event.create(:name => "event#{n + 1}", :client => clients.sample)
|
52
|
+
Quote.create(:name => "quote#{n + 1}", :event => event)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def teardown_db
|
57
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
58
|
+
ActiveRecord::Base.connection.drop_table(table)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def teardown_redis
|
63
|
+
Rcache.redis.keys(Rcache.key_prefix + '*').each { |k| Rcache.redis.del k }
|
64
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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: 2013-12-
|
12
|
+
date: 2013-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activerecord
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.2'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.2'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: redis
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
63
|
name: bundler
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +75,22 @@ dependencies:
|
|
43
75
|
- - ~>
|
44
76
|
- !ruby/object:Gem::Version
|
45
77
|
version: '1.3'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sqlite3
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
46
94
|
- !ruby/object:Gem::Dependency
|
47
95
|
name: rake
|
48
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,6 +107,38 @@ dependencies:
|
|
59
107
|
- - ! '>='
|
60
108
|
- !ruby/object:Gem::Version
|
61
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: test-unit
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: shoulda-context
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
62
142
|
description: ActiveRecord redis query cache
|
63
143
|
email:
|
64
144
|
- novikov@inventos.ru
|
@@ -71,6 +151,7 @@ files:
|
|
71
151
|
- LICENSE.txt
|
72
152
|
- README.md
|
73
153
|
- Rakefile
|
154
|
+
- config/redis.yml
|
74
155
|
- lib/rcache.rb
|
75
156
|
- lib/rcache/arel.rb
|
76
157
|
- lib/rcache/association.rb
|
@@ -81,6 +162,11 @@ files:
|
|
81
162
|
- lib/rcache/relation.rb
|
82
163
|
- lib/rcache/version.rb
|
83
164
|
- rcache.gemspec
|
165
|
+
- test/models/client.rb
|
166
|
+
- test/models/event.rb
|
167
|
+
- test/models/quote.rb
|
168
|
+
- test/rcache_test.rb
|
169
|
+
- test/test_helper.rb
|
84
170
|
homepage: ''
|
85
171
|
licenses:
|
86
172
|
- MIT
|
@@ -96,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
182
|
version: '0'
|
97
183
|
segments:
|
98
184
|
- 0
|
99
|
-
hash: -
|
185
|
+
hash: -2852935033633211742
|
100
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
187
|
none: false
|
102
188
|
requirements:
|
@@ -105,11 +191,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
191
|
version: '0'
|
106
192
|
segments:
|
107
193
|
- 0
|
108
|
-
hash: -
|
194
|
+
hash: -2852935033633211742
|
109
195
|
requirements: []
|
110
196
|
rubyforge_project:
|
111
197
|
rubygems_version: 1.8.25
|
112
198
|
signing_key:
|
113
199
|
specification_version: 3
|
114
200
|
summary: ActiveRecord redis query cache
|
115
|
-
test_files:
|
201
|
+
test_files:
|
202
|
+
- test/models/client.rb
|
203
|
+
- test/models/event.rb
|
204
|
+
- test/models/quote.rb
|
205
|
+
- test/rcache_test.rb
|
206
|
+
- test/test_helper.rb
|