record_cache 0.9.12 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.rbenv-gemsets +1 -0
- data/.rbenv-version +1 -0
- data/Gemfile +3 -0
- data/README.rdoc +3 -1
- data/Rakefile +2 -41
- data/VERSION +1 -1
- data/lib/record_cache/index.rb +21 -10
- data/lib/record_cache.rb +16 -4
- data/record_cache.gemspec +25 -61
- data/test/record_cache_test.rb +20 -15
- data/test/test_helper.rb +1 -10
- metadata +119 -29
data/.gitignore
ADDED
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
record_cache
|
data/.rbenv-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ree-1.8.7-2012.02
|
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -24,13 +24,15 @@ direct SQL will not.
|
|
24
24
|
|
25
25
|
== Install:
|
26
26
|
|
27
|
-
|
27
|
+
gem install record_cache
|
28
28
|
|
29
29
|
== Dependencies:
|
30
30
|
|
31
31
|
* {after_commit}[http://github.com/freelancing-god/after_commit]
|
32
32
|
* {memcache}[http://github.com/ninjudd/memcache]
|
33
33
|
|
34
|
+
RecordCache is confirmed to work with Rails 2.3.9. It does not currently work with Rails 3.
|
35
|
+
|
34
36
|
== License:
|
35
37
|
|
36
38
|
Copyright (c) 2009 Justin Balthrop, Geni.com; Published under The MIT License, see LICENSE
|
data/Rakefile
CHANGED
@@ -1,49 +1,10 @@
|
|
1
|
-
require 'rake'
|
2
1
|
require 'rake/testtask'
|
3
|
-
require '
|
4
|
-
|
5
|
-
begin
|
6
|
-
require 'jeweler'
|
7
|
-
Jeweler::Tasks.new do |s|
|
8
|
-
s.name = "record_cache"
|
9
|
-
s.summary = %Q{Active Record caching and indexing in memcache. An alternative to cache_fu}
|
10
|
-
s.email = "code@justinbalthrop.com"
|
11
|
-
s.homepage = "http://github.com/ninjudd/record_cache"
|
12
|
-
s.description = "Active Record caching and indexing in memcache"
|
13
|
-
s.authors = ["Justin Balthrop"]
|
14
|
-
s.add_dependency('after_commit', '>= 1.0.0')
|
15
|
-
s.add_dependency('deferrable', '>= 0.1.0')
|
16
|
-
s.add_dependency('memcache', '>= 1.0.0')
|
17
|
-
s.add_dependency('cache_version', '>= 0.9.4')
|
18
|
-
s.add_dependency('activerecord', '>= 2.0.0')
|
19
|
-
end
|
20
|
-
Jeweler::GemcutterTasks.new
|
21
|
-
rescue LoadError
|
22
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
23
|
-
end
|
2
|
+
require 'bundler/gem_tasks'
|
24
3
|
|
25
4
|
Rake::TestTask.new do |t|
|
26
|
-
t.libs
|
5
|
+
t.libs = ['lib', 'test']
|
27
6
|
t.pattern = 'test/**/*_test.rb'
|
28
7
|
t.verbose = false
|
29
8
|
end
|
30
9
|
|
31
|
-
Rake::RDocTask.new do |rdoc|
|
32
|
-
rdoc.rdoc_dir = 'rdoc'
|
33
|
-
rdoc.title = 'record_cache'
|
34
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
35
|
-
rdoc.rdoc_files.include('README*')
|
36
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
37
|
-
end
|
38
|
-
|
39
|
-
begin
|
40
|
-
require 'rcov/rcovtask'
|
41
|
-
Rcov::RcovTask.new do |t|
|
42
|
-
t.libs << 'test'
|
43
|
-
t.test_files = FileList['test/**/*_test.rb']
|
44
|
-
t.verbose = true
|
45
|
-
end
|
46
|
-
rescue LoadError
|
47
|
-
end
|
48
|
-
|
49
10
|
task :default => :test
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/record_cache/index.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'digest'
|
2
|
+
|
1
3
|
module RecordCache
|
2
4
|
class Index
|
3
5
|
include Deferrable
|
@@ -26,6 +28,10 @@ module RecordCache
|
|
26
28
|
@scope_query = opts[:scope] || {}
|
27
29
|
end
|
28
30
|
|
31
|
+
def to_s
|
32
|
+
"<RecordCache::Index #{@model_class} by #{@index_field} (#{@name})>"
|
33
|
+
end
|
34
|
+
|
29
35
|
def cache
|
30
36
|
if RecordCache.config[:thread_safe]
|
31
37
|
Thread.current[:record_cache] ||= @cache.clone
|
@@ -51,16 +57,15 @@ module RecordCache
|
|
51
57
|
end
|
52
58
|
|
53
59
|
def namespace
|
54
|
-
"#{model_class.name}_#{model_class.version}_#{RecordCache.version}
|
60
|
+
"#{model_class.name}_#{model_class.version}_#{RecordCache.version}_#{fields_hash}:#{name}"
|
55
61
|
end
|
56
62
|
|
57
63
|
def fields_hash
|
58
64
|
if @fields_hash.nil?
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
65
|
+
fields = full_record? ? model_class.column_names : self.fields
|
66
|
+
md5 = Digest::MD5::new
|
67
|
+
md5 << fields.sort.join(',')
|
68
|
+
@fields_hash = md5.hexdigest
|
64
69
|
end
|
65
70
|
@fields_hash
|
66
71
|
end
|
@@ -182,7 +187,7 @@ module RecordCache
|
|
182
187
|
end
|
183
188
|
|
184
189
|
def invalidate_model(model)
|
185
|
-
attribute = model.
|
190
|
+
attribute = model.read_attribute(index_field)
|
186
191
|
attribute_was = model.attr_was(index_field)
|
187
192
|
if scope.match_previous?(model)
|
188
193
|
if write_ahead?
|
@@ -258,7 +263,6 @@ module RecordCache
|
|
258
263
|
opts = {
|
259
264
|
:expiry => expiry,
|
260
265
|
:disable_write => model_class.record_cache_config[:disable_write],
|
261
|
-
:validation => lambda {|key, record_set| record_set and record_set.fields_hash == fields_hash},
|
262
266
|
}
|
263
267
|
cache.get_some(keys, opts) do |keys_to_fetch|
|
264
268
|
raise 'db access is disabled' if @@disable_db
|
@@ -275,7 +279,11 @@ module RecordCache
|
|
275
279
|
|
276
280
|
db.select_all(sql).each do |record|
|
277
281
|
key = record[index_field] || NULL
|
278
|
-
fetched_records[key]
|
282
|
+
if fetched_records[key]
|
283
|
+
fetched_records[key] << record
|
284
|
+
else
|
285
|
+
raise "no records found in #{self} for #{key.inspect}. existing keys: #{fetched_records.keys.inspect}"
|
286
|
+
end
|
279
287
|
end
|
280
288
|
end
|
281
289
|
fetched_records
|
@@ -378,7 +386,10 @@ module RecordCache
|
|
378
386
|
|
379
387
|
def stringify(keys)
|
380
388
|
keys.compact! if disallow_null?
|
381
|
-
keys.collect
|
389
|
+
keys.collect do |key|
|
390
|
+
key = key.nil? ? NULL : key.to_s
|
391
|
+
index_column.number? ? key.strip : key
|
392
|
+
end.uniq
|
382
393
|
end
|
383
394
|
|
384
395
|
def db
|
data/lib/record_cache.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'memcache'
|
3
2
|
require 'active_record'
|
3
|
+
require 'after_commit'
|
4
4
|
require 'cache_version'
|
5
5
|
require 'deferrable'
|
6
6
|
|
@@ -53,7 +53,11 @@ module RecordCache
|
|
53
53
|
|
54
54
|
def attr_was(attr)
|
55
55
|
attr = attr.to_s
|
56
|
-
['id', 'type'].include?(attr)
|
56
|
+
if ['id', 'type'].include?(attr) or not attribute_changed?(attr)
|
57
|
+
read_attribute(attr)
|
58
|
+
else
|
59
|
+
changed_attributes[attr]
|
60
|
+
end
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
@@ -107,6 +111,14 @@ module RecordCache
|
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
114
|
+
def id_field
|
115
|
+
connection.quote_column_name(primary_key)
|
116
|
+
end
|
117
|
+
|
118
|
+
def id_column
|
119
|
+
columns_hash[primary_key]
|
120
|
+
end
|
121
|
+
|
110
122
|
def invalidate_from_conditions(conditions, flag = nil)
|
111
123
|
if conditions.nil?
|
112
124
|
# Just invalidate all indexes.
|
@@ -116,12 +128,12 @@ module RecordCache
|
|
116
128
|
end
|
117
129
|
|
118
130
|
# Freeze ids to avoid race conditions.
|
119
|
-
sql = "SELECT
|
131
|
+
sql = "SELECT #{id_field} FROM #{table_name} "
|
120
132
|
self.send(:add_conditions!, sql, conditions, self.send(:scope, :find))
|
121
133
|
ids = RecordCache.db(self).select_values(sql)
|
122
134
|
|
123
135
|
return if ids.empty?
|
124
|
-
conditions = "
|
136
|
+
conditions = "#{id_field} IN (#{ids.collect {|id| quote_value(id, id_column)}.join(',')})"
|
125
137
|
|
126
138
|
if block_given?
|
127
139
|
# Capture the ids to invalidate in lambdas.
|
data/record_cache.gemspec
CHANGED
@@ -1,66 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "record_cache"
|
6
|
+
gem.version = IO.read('VERSION')
|
7
|
+
gem.authors = ["Justin Balthrop"]
|
8
|
+
gem.email = ["git@justinbalthrop.com"]
|
9
|
+
gem.description = %q{Active Record caching and indexing in memcache.}
|
10
|
+
gem.summary = gem.description
|
11
|
+
gem.homepage = "https://github.com/ninjudd/record_cache"
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
"LICENSE",
|
21
|
-
"README.rdoc",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"lib/record_cache.rb",
|
25
|
-
"lib/record_cache/index.rb",
|
26
|
-
"lib/record_cache/scope.rb",
|
27
|
-
"lib/record_cache/set.rb",
|
28
|
-
"record_cache.gemspec",
|
29
|
-
"test/record_cache_test.rb",
|
30
|
-
"test/test_helper.rb"
|
31
|
-
]
|
32
|
-
s.homepage = %q{http://github.com/ninjudd/record_cache}
|
33
|
-
s.require_paths = ["lib"]
|
34
|
-
s.rubygems_version = %q{1.3.7}
|
35
|
-
s.summary = %q{Active Record caching and indexing in memcache. An alternative to cache_fu}
|
36
|
-
s.test_files = [
|
37
|
-
"test/record_cache_test.rb",
|
38
|
-
"test/test_helper.rb"
|
39
|
-
]
|
13
|
+
gem.add_development_dependency 'shoulda', '3.0.1'
|
14
|
+
gem.add_development_dependency 'mocha'
|
15
|
+
gem.add_development_dependency 'rsolr'
|
16
|
+
gem.add_development_dependency 'json'
|
17
|
+
gem.add_development_dependency 'rake'
|
18
|
+
gem.add_development_dependency 'activerecord-postgresql-adapter'
|
40
19
|
|
41
|
-
|
42
|
-
|
43
|
-
|
20
|
+
gem.add_dependency 'after_commit', '>= 1.0.0'
|
21
|
+
gem.add_dependency 'deferrable', '>= 0.1.0'
|
22
|
+
gem.add_dependency 'memcache', '>= 1.0.0'
|
23
|
+
gem.add_dependency 'cache_version', '>= 0.9.4'
|
24
|
+
gem.add_dependency 'activerecord', '~> 2.3.9'
|
44
25
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
s.add_runtime_dependency(%q<cache_version>, [">= 0.9.4"])
|
50
|
-
s.add_runtime_dependency(%q<activerecord>, [">= 2.0.0"])
|
51
|
-
else
|
52
|
-
s.add_dependency(%q<after_commit>, [">= 1.0.0"])
|
53
|
-
s.add_dependency(%q<deferrable>, [">= 0.1.0"])
|
54
|
-
s.add_dependency(%q<memcache>, [">= 1.0.0"])
|
55
|
-
s.add_dependency(%q<cache_version>, [">= 0.9.4"])
|
56
|
-
s.add_dependency(%q<activerecord>, [">= 2.0.0"])
|
57
|
-
end
|
58
|
-
else
|
59
|
-
s.add_dependency(%q<after_commit>, [">= 1.0.0"])
|
60
|
-
s.add_dependency(%q<deferrable>, [">= 0.1.0"])
|
61
|
-
s.add_dependency(%q<memcache>, [">= 1.0.0"])
|
62
|
-
s.add_dependency(%q<cache_version>, [">= 0.9.4"])
|
63
|
-
s.add_dependency(%q<activerecord>, [">= 2.0.0"])
|
64
|
-
end
|
26
|
+
gem.files = `git ls-files`.split($/)
|
27
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
28
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
29
|
+
gem.require_paths = ["lib"]
|
65
30
|
end
|
66
|
-
|
data/test/record_cache_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
RecordCache::Set.source_tracking = true
|
4
4
|
|
5
|
-
class CreateTables < ActiveRecord::Migration
|
5
|
+
class CreateTables < ActiveRecord::Migration
|
6
6
|
def self.up
|
7
7
|
down
|
8
8
|
create_table :pets do |t|
|
@@ -64,14 +64,19 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
64
64
|
CreateTables.up
|
65
65
|
CacheVersionMigration.up
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
teardown do
|
69
69
|
system('killall memcached')
|
70
70
|
CreateTables.down
|
71
71
|
CacheVersionMigration.down
|
72
72
|
RecordCache::Index.enable_db
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
|
+
should 'find_by_id with space' do
|
76
|
+
dog = Dog.create(:name => 'Frankie')
|
77
|
+
assert Pet.find_by_id("#{dog.id} ")
|
78
|
+
end
|
79
|
+
|
75
80
|
should 'create field lookup functions' do
|
76
81
|
dog = Breed.new(:name => 'pitbull retriever')
|
77
82
|
cat = Breed.new(:name => 'house cat')
|
@@ -79,16 +84,16 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
79
84
|
daisy = Dog.create(:name => 'Daisy', :breed => dog)
|
80
85
|
|
81
86
|
expected = {dog.id => daisy.id, cat.id => willy.id}
|
82
|
-
assert_equal expected, Pet.id_by_breed_id([dog.id, cat.id, 100, 101])
|
87
|
+
assert_equal expected, Pet.id_by_breed_id([dog.id, cat.id, 100, 101])
|
83
88
|
end
|
84
|
-
|
89
|
+
|
85
90
|
should 'return cached values without accessing the database' do
|
86
91
|
color = Color.new(:name => 'black & white')
|
87
92
|
dog = Breed.new(:name => 'pitbull retriever')
|
88
93
|
cat = Breed.new(:name => 'house cat')
|
89
94
|
daisy = Dog.create(:name => 'Daisy', :color => color, :breed => dog)
|
90
95
|
willy = Cat.create(:name => 'Willy', :color => color, :breed => cat)
|
91
|
-
|
96
|
+
|
92
97
|
Pet.find(daisy.id, willy.id)
|
93
98
|
Dog.find_all_by_color_id(color.id)
|
94
99
|
Dog.find_all_by_breed_id(dog.id)
|
@@ -121,7 +126,7 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
121
126
|
breed2 = Breed.new(:name => 'pitbull terrier')
|
122
127
|
daisy = Dog.create(:name => 'Daisy', :color => color1, :breed => breed1)
|
123
128
|
sammy = Dog.create(:name => 'Sammy', :color => color1, :breed => breed2)
|
124
|
-
|
129
|
+
|
125
130
|
Dog.find(daisy.id, sammy.id)
|
126
131
|
Dog.find_all_by_color_id(color1.id)
|
127
132
|
Dog.find_all_by_breed_id([breed1.id, breed2.id])
|
@@ -152,7 +157,7 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
152
157
|
should 'create raw find methods' do
|
153
158
|
daisy = Dog.create(:name => 'Daisy')
|
154
159
|
sammy = Dog.create(:name => 'Sammy')
|
155
|
-
|
160
|
+
|
156
161
|
Dog.find(daisy.id, sammy.id)
|
157
162
|
RecordCache::Index.disable_db
|
158
163
|
|
@@ -166,7 +171,7 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
166
171
|
breed2 = Breed.new(:name => 'pitbull terrier')
|
167
172
|
daisy = Dog.create(:name => 'Daisy', :color => color, :breed => breed1, :sex => 'f')
|
168
173
|
sammy = Dog.create(:name => 'Sammy', :color => color, :breed => breed2, :sex => 'm')
|
169
|
-
|
174
|
+
|
170
175
|
assert_equal [sammy], Dog.find_all_male_by_color_id(color.id)
|
171
176
|
assert_equal [daisy], Dog.find_all_female_by_color_id(color.id)
|
172
177
|
assert_equal [daisy, sammy], Dog.find_all_colors(color.id)
|
@@ -184,22 +189,22 @@ class RecordCacheTest < Test::Unit::TestCase
|
|
184
189
|
end
|
185
190
|
assert_equal 6, count
|
186
191
|
end
|
187
|
-
|
192
|
+
|
188
193
|
should 'invalidate indexes on save' do
|
189
194
|
b_w = Color.new(:name => 'black & white')
|
190
195
|
brown = Color.new(:name => 'brown')
|
191
196
|
breed = Breed.new(:name => 'mutt')
|
192
197
|
daisy = Dog.create(:name => 'Daisy', :color => b_w, :breed => breed, :sex => 'f')
|
193
|
-
|
198
|
+
|
194
199
|
assert_equal daisy, Dog.find_by_color_id(b_w.id)
|
195
|
-
|
200
|
+
|
196
201
|
daisy.name = 'Molly'
|
197
202
|
daisy.color = brown
|
198
203
|
daisy.save
|
199
|
-
|
204
|
+
|
200
205
|
assert_equal 'Molly', daisy.name
|
201
206
|
assert_equal brown.id, daisy.color_id
|
202
|
-
|
207
|
+
|
203
208
|
assert_equal daisy, Dog.find_by_color_id(brown.id)
|
204
209
|
assert_equal nil, Dog.find_by_color_id(b_w.id)
|
205
210
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,20 +1,11 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'shoulda'
|
4
|
-
require 'mocha'
|
4
|
+
require 'mocha/setup'
|
5
5
|
require 'pp'
|
6
6
|
|
7
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
|
8
|
-
['cache_version', 'model_set', 'memcache', 'deferrable'].each do |dir|
|
9
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../../#{dir}/lib"
|
10
|
-
end
|
11
|
-
|
12
7
|
require 'record_cache'
|
13
8
|
|
14
|
-
['lib/after_commit', 'lib/after_commit/active_record', 'lib/after_commit/connection_adapters', 'init'].each do |file|
|
15
|
-
require File.dirname(__FILE__) + "/../../after_commit/#{file}"
|
16
|
-
end
|
17
|
-
|
18
9
|
class Test::Unit::TestCase
|
19
10
|
end
|
20
11
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: record_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
7
9
|
- 0
|
8
|
-
|
9
|
-
- 12
|
10
|
-
version: 0.9.12
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Balthrop
|
@@ -15,13 +15,99 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-06-03 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: shoulda
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - "="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 5
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 1
|
34
|
+
version: 3.0.1
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: mocha
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rsolr
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :development
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: json
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
type: :development
|
78
|
+
version_requirements: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rake
|
81
|
+
prerelease: false
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
hash: 3
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
version: "0"
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id005
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: activerecord-postgresql-adapter
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
type: :development
|
106
|
+
version_requirements: *id006
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: after_commit
|
109
|
+
prerelease: false
|
110
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
25
111
|
none: false
|
26
112
|
requirements:
|
27
113
|
- - ">="
|
@@ -33,11 +119,11 @@ dependencies:
|
|
33
119
|
- 0
|
34
120
|
version: 1.0.0
|
35
121
|
type: :runtime
|
36
|
-
version_requirements: *
|
122
|
+
version_requirements: *id007
|
37
123
|
- !ruby/object:Gem::Dependency
|
38
124
|
name: deferrable
|
39
125
|
prerelease: false
|
40
|
-
requirement: &
|
126
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
41
127
|
none: false
|
42
128
|
requirements:
|
43
129
|
- - ">="
|
@@ -49,11 +135,11 @@ dependencies:
|
|
49
135
|
- 0
|
50
136
|
version: 0.1.0
|
51
137
|
type: :runtime
|
52
|
-
version_requirements: *
|
138
|
+
version_requirements: *id008
|
53
139
|
- !ruby/object:Gem::Dependency
|
54
140
|
name: memcache
|
55
141
|
prerelease: false
|
56
|
-
requirement: &
|
142
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
57
143
|
none: false
|
58
144
|
requirements:
|
59
145
|
- - ">="
|
@@ -65,11 +151,11 @@ dependencies:
|
|
65
151
|
- 0
|
66
152
|
version: 1.0.0
|
67
153
|
type: :runtime
|
68
|
-
version_requirements: *
|
154
|
+
version_requirements: *id009
|
69
155
|
- !ruby/object:Gem::Dependency
|
70
156
|
name: cache_version
|
71
157
|
prerelease: false
|
72
|
-
requirement: &
|
158
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
73
159
|
none: false
|
74
160
|
requirements:
|
75
161
|
- - ">="
|
@@ -81,33 +167,37 @@ dependencies:
|
|
81
167
|
- 4
|
82
168
|
version: 0.9.4
|
83
169
|
type: :runtime
|
84
|
-
version_requirements: *
|
170
|
+
version_requirements: *id010
|
85
171
|
- !ruby/object:Gem::Dependency
|
86
172
|
name: activerecord
|
87
173
|
prerelease: false
|
88
|
-
requirement: &
|
174
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
89
175
|
none: false
|
90
176
|
requirements:
|
91
|
-
- -
|
177
|
+
- - ~>
|
92
178
|
- !ruby/object:Gem::Version
|
93
|
-
hash:
|
179
|
+
hash: 17
|
94
180
|
segments:
|
95
181
|
- 2
|
96
|
-
-
|
97
|
-
-
|
98
|
-
version: 2.
|
182
|
+
- 3
|
183
|
+
- 9
|
184
|
+
version: 2.3.9
|
99
185
|
type: :runtime
|
100
|
-
version_requirements: *
|
101
|
-
description: Active Record caching and indexing in memcache
|
102
|
-
email:
|
186
|
+
version_requirements: *id011
|
187
|
+
description: Active Record caching and indexing in memcache.
|
188
|
+
email:
|
189
|
+
- git@justinbalthrop.com
|
103
190
|
executables: []
|
104
191
|
|
105
192
|
extensions: []
|
106
193
|
|
107
|
-
extra_rdoc_files:
|
108
|
-
|
109
|
-
- README.rdoc
|
194
|
+
extra_rdoc_files: []
|
195
|
+
|
110
196
|
files:
|
197
|
+
- .gitignore
|
198
|
+
- .rbenv-gemsets
|
199
|
+
- .rbenv-version
|
200
|
+
- Gemfile
|
111
201
|
- LICENSE
|
112
202
|
- README.rdoc
|
113
203
|
- Rakefile
|
@@ -120,7 +210,7 @@ files:
|
|
120
210
|
- test/record_cache_test.rb
|
121
211
|
- test/test_helper.rb
|
122
212
|
has_rdoc: true
|
123
|
-
homepage:
|
213
|
+
homepage: https://github.com/ninjudd/record_cache
|
124
214
|
licenses: []
|
125
215
|
|
126
216
|
post_install_message:
|
@@ -149,10 +239,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
239
|
requirements: []
|
150
240
|
|
151
241
|
rubyforge_project:
|
152
|
-
rubygems_version: 1.
|
242
|
+
rubygems_version: 1.5.2
|
153
243
|
signing_key:
|
154
244
|
specification_version: 3
|
155
|
-
summary: Active Record caching and indexing in memcache.
|
245
|
+
summary: Active Record caching and indexing in memcache.
|
156
246
|
test_files:
|
157
247
|
- test/record_cache_test.rb
|
158
248
|
- test/test_helper.rb
|