redrecord 0.2 → 0.3
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/CHANGELOG +2 -0
- data/lib/redrecord.rb +10 -5
- data/redrecord.gemspec +2 -2
- data/test/test_all.rb +15 -0
- data/test/test_helper.rb +3 -2
- metadata +8 -8
data/CHANGELOG
CHANGED
data/lib/redrecord.rb
CHANGED
@@ -17,8 +17,9 @@ class Redrecord
|
|
17
17
|
Timeout.timeout(@timeout || 15) do
|
18
18
|
redis.send(op, *args)
|
19
19
|
end
|
20
|
-
rescue
|
21
|
-
|
20
|
+
rescue Exception => e
|
21
|
+
STDERR.puts "Redrecord: Disabling redis due to exception (#{e})"
|
22
|
+
@enabled = false
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -44,7 +45,8 @@ class Redrecord
|
|
44
45
|
end
|
45
46
|
redrecord_cached_fields.push(*fields)
|
46
47
|
fields.each do |f|
|
47
|
-
|
48
|
+
aliased_target, punctuation = f.to_s.sub(/([?!=])$/, ''), $1
|
49
|
+
define_method("#{aliased_target}_with_cache#{punctuation}") do
|
48
50
|
cached_method(f)
|
49
51
|
end
|
50
52
|
alias_method_chain f, :cache
|
@@ -95,6 +97,7 @@ class Redrecord
|
|
95
97
|
record.remove_from_cache!
|
96
98
|
elsif command == :save
|
97
99
|
record.add_to_cache!
|
100
|
+
# possible todo: cascade invalidation (but avoid loops)
|
98
101
|
end
|
99
102
|
end
|
100
103
|
Redrecord.update_queue.clear
|
@@ -111,7 +114,8 @@ class Redrecord
|
|
111
114
|
def add_to_cache!
|
112
115
|
Redrecord.redis_op(:hmset, redrecord_key,
|
113
116
|
*(self.class.redrecord_cached_fields.map {|f|
|
114
|
-
|
117
|
+
aliased_target, punctuation = f.to_s.sub(/([?!=])$/, ''), $1
|
118
|
+
val = send("#{aliased_target}_without_cache#{punctuation}")
|
115
119
|
[f.to_s, String===val && !Redrecord.is_marshalled?(val) ? val : Marshal.dump(val)]
|
116
120
|
}.flatten)
|
117
121
|
)
|
@@ -130,7 +134,8 @@ class Redrecord
|
|
130
134
|
h[k.to_sym] = if(cached = (redrecord_redis_cache && redrecord_redis_cache[k.to_s] unless new_record?))
|
131
135
|
Redrecord.is_marshalled?(cached) ? Marshal.load(cached) : cached
|
132
136
|
else
|
133
|
-
|
137
|
+
aliased_target, punctuation = k.to_s.sub(/([?!=])$/, ''), $1
|
138
|
+
send("#{aliased_target}_without_cache#{punctuation}")
|
134
139
|
end
|
135
140
|
end
|
136
141
|
end
|
data/redrecord.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "redrecord"
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Andrew Snow"]
|
9
|
-
s.date = "2012-01-
|
9
|
+
s.date = "2012-01-26"
|
10
10
|
s.description = "Redis cacheing for ActiveRecord"
|
11
11
|
s.email = "andrew@modulus.org"
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "README", "lib/redrecord.rb"]
|
data/test/test_all.rb
CHANGED
@@ -9,6 +9,7 @@ require "#{File.dirname(__FILE__)}/test_helper"
|
|
9
9
|
class TestRedrecord < Test::Unit::TestCase
|
10
10
|
def setup
|
11
11
|
$redis.flushdb
|
12
|
+
Redrecord.redis = $redis
|
12
13
|
Redrecord.enabled = true
|
13
14
|
@user = TestUser.new(1, 'John', 'Smith')
|
14
15
|
$saved = {}
|
@@ -88,6 +89,7 @@ class TestRedrecord < Test::Unit::TestCase
|
|
88
89
|
assert_equal({
|
89
90
|
:nil => nil,
|
90
91
|
:group_names => [],
|
92
|
+
:valid? => true,
|
91
93
|
:full_name => 'John Smith'},
|
92
94
|
@user.cached_fields)
|
93
95
|
end
|
@@ -99,6 +101,7 @@ class TestRedrecord < Test::Unit::TestCase
|
|
99
101
|
:id => 1,
|
100
102
|
:nil => nil,
|
101
103
|
:group_names => [],
|
104
|
+
:valid? => true,
|
102
105
|
:full_name => 'John Smith'},
|
103
106
|
@user.attribs_with_cached_fields)
|
104
107
|
end
|
@@ -120,5 +123,17 @@ class TestRedrecord < Test::Unit::TestCase
|
|
120
123
|
assert_nil $redis.hget('TestUser:1', 'full_name')
|
121
124
|
end
|
122
125
|
|
126
|
+
def test_question_marked_method
|
127
|
+
@user.save
|
128
|
+
u2 = TestUser.new(1, 'Bob', 'Smith')
|
129
|
+
assert_equal true, u2.valid?
|
130
|
+
assert !u2.recalculated
|
131
|
+
end
|
123
132
|
|
133
|
+
def test_disable_due_to_exception
|
134
|
+
Redrecord.redis = nil
|
135
|
+
@user.save
|
136
|
+
assert_equal false, Redrecord.enabled
|
137
|
+
end
|
138
|
+
|
124
139
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
# WARNING: The database specified here will be CLEARED of ALL DATA
|
3
3
|
$redis = Redis.new(:host => 'localhost', :port => 6379, :db => 15)
|
4
|
-
Redrecord.redis = $redis
|
5
|
-
Redrecord.enabled = true
|
6
4
|
|
7
5
|
class TestModel
|
8
6
|
extend ActiveModel::Callbacks
|
@@ -67,5 +65,8 @@ class TestUser < TestModel
|
|
67
65
|
def group_names
|
68
66
|
$saved.values.select {|v| TestGroup===v && v.user.id == self.id }.map(&:name).sort
|
69
67
|
end
|
68
|
+
def valid?
|
69
|
+
true
|
70
|
+
end
|
70
71
|
end
|
71
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redrecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &71491920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *71491920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: active_model
|
27
|
-
requirement: &
|
27
|
+
requirement: &71490960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *71490960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_support
|
38
|
-
requirement: &
|
38
|
+
requirement: &71490120 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *71490120
|
47
47
|
description: Redis cacheing for ActiveRecord
|
48
48
|
email: andrew@modulus.org
|
49
49
|
executables: []
|