redrecord 0.5 → 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/CHANGELOG +1 -0
- data/lib/redrecord.rb +20 -4
- data/redrecord.gemspec +1 -1
- data/test/test_all.rb +12 -2
- data/test/test_helper.rb +3 -0
- metadata +7 -7
data/CHANGELOG
CHANGED
data/lib/redrecord.rb
CHANGED
@@ -11,6 +11,22 @@ class Redrecord
|
|
11
11
|
def is_marshalled?(str)
|
12
12
|
Marshal.dump(nil)[0,2] == str[0,2]
|
13
13
|
end
|
14
|
+
def unmarshal(str)
|
15
|
+
if(is_marshalled?(str))
|
16
|
+
Marshal.load(str)
|
17
|
+
elsif(str =~ /^\d+$/)
|
18
|
+
str.to_i
|
19
|
+
else
|
20
|
+
str
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def marshal(obj)
|
24
|
+
if Integer===obj || String===obj && obj !~ /^\d+$/ && !is_marshalled?(obj)
|
25
|
+
obj.to_s
|
26
|
+
else
|
27
|
+
Marshal.dump(obj)
|
28
|
+
end
|
29
|
+
end
|
14
30
|
def redis_op(op, *args)
|
15
31
|
if @enabled
|
16
32
|
begin
|
@@ -18,7 +34,7 @@ class Redrecord
|
|
18
34
|
redis.send(op, *args)
|
19
35
|
end
|
20
36
|
rescue Exception => e
|
21
|
-
|
37
|
+
$stderr.puts "Redrecord: Disabling redis due to exception (#{e})"
|
22
38
|
@enabled = false
|
23
39
|
end
|
24
40
|
end
|
@@ -116,13 +132,13 @@ class Redrecord
|
|
116
132
|
*(self.class.redrecord_cached_fields.map {|f|
|
117
133
|
aliased_target, punctuation = f.to_s.sub(/([?!=])$/, ''), $1
|
118
134
|
val = send("#{aliased_target}_without_cache#{punctuation}")
|
119
|
-
[f.to_s,
|
135
|
+
[f.to_s, Redrecord.marshal(val)]
|
120
136
|
}.flatten)
|
121
137
|
)
|
122
138
|
end
|
123
139
|
|
124
140
|
def verify_cache!
|
125
|
-
|
141
|
+
(redis_cached_keys = Redrecord.redis_op(:hkeys, redrecord_key)) && redis_cached_keys.each do |key|
|
126
142
|
calculated = redrecord_uncached_value(key)
|
127
143
|
if(redrecord_cached_attrib_hash[key] != calculated)
|
128
144
|
raise "#{redrecord_key}.#{key}: expected <#{calculated}> but got <#{redrecord_cached_attrib_hash[key]}> from redis cache"
|
@@ -141,7 +157,7 @@ class Redrecord
|
|
141
157
|
def redrecord_cached_attrib_hash
|
142
158
|
@redrecord_cached_attrib_hash ||= Hash.new do |h,k|
|
143
159
|
h[k.to_sym] = if(cached = (redrecord_redis_cache && redrecord_redis_cache[k.to_s] unless new_record?))
|
144
|
-
Redrecord.
|
160
|
+
Redrecord.unmarshal(cached)
|
145
161
|
else
|
146
162
|
redrecord_uncached_value(k)
|
147
163
|
end
|
data/redrecord.gemspec
CHANGED
data/test/test_all.rb
CHANGED
@@ -37,6 +37,12 @@ class TestRedrecord < Test::Unit::TestCase
|
|
37
37
|
u2 = TestUser.new(1, 'John', 'Smith')
|
38
38
|
assert_nil u2.nil
|
39
39
|
end
|
40
|
+
|
41
|
+
def test_number
|
42
|
+
@user.save
|
43
|
+
assert_equal '12345', $redis.hget('TestUser:1', 'number')
|
44
|
+
assert_equal 12345, @user.number_with_cache
|
45
|
+
end
|
40
46
|
|
41
47
|
def test_invalidation_on_save
|
42
48
|
@user.save
|
@@ -90,6 +96,7 @@ class TestRedrecord < Test::Unit::TestCase
|
|
90
96
|
:nil => nil,
|
91
97
|
:group_names => [],
|
92
98
|
:valid? => true,
|
99
|
+
:number => 12345,
|
93
100
|
:full_name => 'John Smith'},
|
94
101
|
@user.cached_fields)
|
95
102
|
end
|
@@ -102,6 +109,7 @@ class TestRedrecord < Test::Unit::TestCase
|
|
102
109
|
:nil => nil,
|
103
110
|
:group_names => [],
|
104
111
|
:valid? => true,
|
112
|
+
:number => 12345,
|
105
113
|
:full_name => 'John Smith'},
|
106
114
|
@user.attribs_with_cached_fields)
|
107
115
|
end
|
@@ -132,15 +140,17 @@ class TestRedrecord < Test::Unit::TestCase
|
|
132
140
|
|
133
141
|
def test_disable_due_to_exception
|
134
142
|
Redrecord.redis = nil
|
143
|
+
old = $stderr ; $stderr = StringIO.new
|
135
144
|
@user.save
|
145
|
+
$stderr = old
|
136
146
|
assert_equal false, Redrecord.enabled
|
137
147
|
end
|
138
148
|
|
139
149
|
def test_verify_ok
|
140
150
|
@user.save
|
141
|
-
assert_equal ["full_name", "nil", "group_names", "valid?"].sort, @user.verify_cache!.sort
|
151
|
+
assert_equal ["full_name", "nil", "group_names", "valid?", "number"].sort, @user.verify_cache!.sort
|
142
152
|
end
|
143
|
-
|
153
|
+
|
144
154
|
def test_verify_fail
|
145
155
|
@user.save
|
146
156
|
assert_raises RuntimeError do
|
data/test/test_helper.rb
CHANGED
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.6'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ 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: &73055740 !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: *73055740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: active_model
|
27
|
-
requirement: &
|
27
|
+
requirement: &73054380 !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: *73054380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_support
|
38
|
-
requirement: &
|
38
|
+
requirement: &73053190 !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: *73053190
|
47
47
|
description: Redis cacheing for ActiveRecord
|
48
48
|
email: andrew@modulus.org
|
49
49
|
executables: []
|