redrecord 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,4 +1,6 @@
1
1
 
2
+ v0.5. Support cache verify method
3
+
2
4
  v0.4. Avoid method name clash with ActiveRecord
3
5
 
4
6
  v0.3. Support bang and question mark method rewrites
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
- aliased_target, punctuation = k.to_s.sub(/([?!=])$/, ''), $1
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.4"
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-04"
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'
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-04 00:00:00.000000000 Z
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: &77258150 !ruby/object:Gem::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: *77258150
24
+ version_requirements: *72362980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: active_model
27
- requirement: &77257880 !ruby/object:Gem::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: *77257880
35
+ version_requirements: *72361840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: active_support
38
- requirement: &77257590 !ruby/object:Gem::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: *77257590
46
+ version_requirements: *72474170
47
47
  description: Redis cacheing for ActiveRecord
48
48
  email: andrew@modulus.org
49
49
  executables: []