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 CHANGED
@@ -1,3 +1,4 @@
1
+ v0.6. Don't bother marshalling when storing integers
1
2
 
2
3
  v0.5. Support cache verify method
3
4
 
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
- STDERR.puts "Redrecord: Disabling redis due to exception (#{e})"
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, String===val && !Redrecord.is_marshalled?(val) ? val : Marshal.dump(val)]
135
+ [f.to_s, Redrecord.marshal(val)]
120
136
  }.flatten)
121
137
  )
122
138
  end
123
139
 
124
140
  def verify_cache!
125
- redrecord_redis_cache && redrecord_redis_cache.keys.each do |key|
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.is_marshalled?(cached) ? Marshal.load(cached) : cached
160
+ Redrecord.unmarshal(cached)
145
161
  else
146
162
  redrecord_uncached_value(k)
147
163
  end
data/redrecord.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "redrecord"
5
- s.version = "0.5"
5
+ s.version = "0.6"
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"]
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
@@ -68,5 +68,8 @@ class TestUser < TestModel
68
68
  def valid?
69
69
  true
70
70
  end
71
+ def number
72
+ 12345
73
+ end
71
74
  end
72
75
  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.5'
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: &72362980 !ruby/object:Gem::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: *72362980
24
+ version_requirements: *73055740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: active_model
27
- requirement: &72361840 !ruby/object:Gem::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: *72361840
35
+ version_requirements: *73054380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: active_support
38
- requirement: &72474170 !ruby/object:Gem::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: *72474170
46
+ version_requirements: *73053190
47
47
  description: Redis cacheing for ActiveRecord
48
48
  email: andrew@modulus.org
49
49
  executables: []