rcache 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.test_files = FileList['test/*_test.rb']
7
+ end
8
+
9
+ desc "Run tests"
10
+ task :default => :test
data/config/redis.yml ADDED
@@ -0,0 +1,8 @@
1
+ development: &development
2
+ host: 127.0.0.1
3
+ port: 6379
4
+ database: 0
5
+
6
+ test:
7
+ <<: *development
8
+ database: 15
@@ -2,24 +2,11 @@ module ActiveRecord
2
2
  module Associations
3
3
  class Preloader
4
4
  class Association #:nodoc:
5
- def build_scope
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
- if options[:as]
15
- scope = scope.where(
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
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module Rcache
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/rcache.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "rcache/version"
2
2
  require "json"
3
+ require "active_record"
4
+ require "redis"
3
5
  require "digest/md5"
4
6
  require "rcache/query_cache"
5
7
  require "rcache/query_methods"
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
@@ -0,0 +1,3 @@
1
+ class Client < ActiveRecord::Base
2
+ has_many :events
3
+ end
@@ -0,0 +1,4 @@
1
+ class Event < ActiveRecord::Base
2
+ belongs_to :client
3
+ has_many :quotes
4
+ end
@@ -0,0 +1,5 @@
1
+ class Quote < ActiveRecord::Base
2
+ belongs_to :event
3
+
4
+ default_scope order(:name)
5
+ end
@@ -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
@@ -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
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-18 00:00:00.000000000 Z
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: -932354997145963509
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: -932354997145963509
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