redrecord 0.4 → 0.5
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/README +1 -1
- data/lib/redrecord.rb +15 -2
- data/redrecord.gemspec +2 -2
- data/test/test_all.rb +13 -0
- metadata +8 -8
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -59,7 +59,7 @@ Other instance methods of interest:
|
|
59
59
|
obj.add_to_cache! # Recalculate fields and store in redis.
|
60
60
|
obj.cached_fields # hash of the cached fields and their values
|
61
61
|
obj.attribs_with_cached_fields # cached_fields merged with AR attributes
|
62
|
-
|
62
|
+
obj.verify_cache! # raise an error if cache doesn't match calculated
|
63
63
|
|
64
64
|
|
65
65
|
If redis is down?
|
data/lib/redrecord.rb
CHANGED
@@ -120,6 +120,15 @@ class Redrecord
|
|
120
120
|
}.flatten)
|
121
121
|
)
|
122
122
|
end
|
123
|
+
|
124
|
+
def verify_cache!
|
125
|
+
redrecord_redis_cache && redrecord_redis_cache.keys.each do |key|
|
126
|
+
calculated = redrecord_uncached_value(key)
|
127
|
+
if(redrecord_cached_attrib_hash[key] != calculated)
|
128
|
+
raise "#{redrecord_key}.#{key}: expected <#{calculated}> but got <#{redrecord_cached_attrib_hash[key]}> from redis cache"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
123
132
|
|
124
133
|
def cached_method(method_name)
|
125
134
|
redrecord_cached_attrib_hash[method_name.to_sym]
|
@@ -134,11 +143,15 @@ class Redrecord
|
|
134
143
|
h[k.to_sym] = if(cached = (redrecord_redis_cache && redrecord_redis_cache[k.to_s] unless new_record?))
|
135
144
|
Redrecord.is_marshalled?(cached) ? Marshal.load(cached) : cached
|
136
145
|
else
|
137
|
-
|
138
|
-
send("#{aliased_target}_without_cache#{punctuation}")
|
146
|
+
redrecord_uncached_value(k)
|
139
147
|
end
|
140
148
|
end
|
141
149
|
end
|
150
|
+
|
151
|
+
def redrecord_uncached_value(fieldname)
|
152
|
+
aliased_target, punctuation = fieldname.to_s.sub(/([?!=])$/, ''), $1
|
153
|
+
send("#{aliased_target}_without_cache#{punctuation}")
|
154
|
+
end
|
142
155
|
|
143
156
|
def attribs_with_cached_fields
|
144
157
|
attributes.merge(cached_fields)
|
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.5"
|
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-02-
|
9
|
+
s.date = "2012-02-08"
|
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
@@ -136,4 +136,17 @@ class TestRedrecord < Test::Unit::TestCase
|
|
136
136
|
assert_equal false, Redrecord.enabled
|
137
137
|
end
|
138
138
|
|
139
|
+
def test_verify_ok
|
140
|
+
@user.save
|
141
|
+
assert_equal ["full_name", "nil", "group_names", "valid?"].sort, @user.verify_cache!.sort
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_verify_fail
|
145
|
+
@user.save
|
146
|
+
assert_raises RuntimeError do
|
147
|
+
@user.first_name = 'Derp'
|
148
|
+
@user.verify_cache!
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
139
152
|
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.5'
|
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-02-
|
12
|
+
date: 2012-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &72362980 !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: *72362980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: active_model
|
27
|
-
requirement: &
|
27
|
+
requirement: &72361840 !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: *72361840
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_support
|
38
|
-
requirement: &
|
38
|
+
requirement: &72474170 !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: *72474170
|
47
47
|
description: Redis cacheing for ActiveRecord
|
48
48
|
email: andrew@modulus.org
|
49
49
|
executables: []
|