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 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