cachy 0.1.5 → 0.1.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cachy}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2010-10-29}
12
+ s.date = %q{2010-11-18}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.files = [
15
15
  "Rakefile",
@@ -22,10 +22,12 @@ Gem::Specification.new do |s|
22
22
  "lib/cachy/moneta_wrapper.rb",
23
23
  "lib/cachy/redis_wrapper.rb",
24
24
  "lib/cachy/wrapper.rb",
25
+ "spec/cachy/memcache_timeout_protection_spec.rb",
25
26
  "spec/cachy/memcached_wrapper_spec.rb",
26
27
  "spec/cachy/moneta_wrapper_spec.rb",
27
28
  "spec/cachy/redis_wrapper_spec.rb",
28
29
  "spec/cachy_spec.rb",
30
+ "spec/mem_cache.rb",
29
31
  "spec/spec_helper.rb",
30
32
  "spec/test_cache.rb"
31
33
  ]
@@ -37,7 +39,9 @@ Gem::Specification.new do |s|
37
39
  s.test_files = [
38
40
  "spec/cachy/memcached_wrapper_spec.rb",
39
41
  "spec/cachy/moneta_wrapper_spec.rb",
42
+ "spec/cachy/memcache_timeout_protection_spec.rb",
40
43
  "spec/cachy/redis_wrapper_spec.rb",
44
+ "spec/mem_cache.rb",
41
45
  "spec/cachy_spec.rb",
42
46
  "spec/test_cache.rb",
43
47
  "spec/spec_helper.rb"
@@ -1,6 +1,6 @@
1
1
  # do not let MemCache timeouts kill your app,
2
2
  # mark as error and return read_error_callback (e.g. nil -> cache miss)
3
- require 'memcache'
3
+ MemCache # class should exist at this point
4
4
 
5
5
  class MemCache
6
6
  # Add your callback to stop timeouts from raising
@@ -11,7 +11,10 @@ class MemCache
11
11
  # nil
12
12
  # }
13
13
 
14
- cattr_accessor :read_error_callback, :read_error_occurred
14
+ class << self
15
+ attr_accessor :read_error_callback
16
+ end
17
+ attr_accessor :read_error_occurred
15
18
 
16
19
  def cache_get_with_timeout_protection(*args)
17
20
  begin
@@ -26,5 +29,7 @@ class MemCache
26
29
  end
27
30
  end
28
31
  end
29
- alias_method_chain :cache_get, :timeout_protection
32
+
33
+ alias_method :cache_get_without_timeout_protection, :cache_get
34
+ alias_method :cache_get, :cache_get_with_timeout_protection
30
35
  end
@@ -0,0 +1,50 @@
1
+ require 'spec/spec_helper'
2
+ require 'spec/mem_cache'
3
+ require 'cachy/memcache_timeout_protection'
4
+
5
+ describe "MemCache timeout protection" do
6
+ before do
7
+ MemCache.read_error_callback = nil
8
+ end
9
+
10
+ let(:cache){ MemCache.new }
11
+
12
+ def simulate_timeout
13
+ cache.stub!(:stubable_cache_get).and_raise('IO timeout')
14
+ end
15
+
16
+ it "has no errors by default" do
17
+ cache.read_error_occurred.should == nil
18
+ end
19
+
20
+ it "catches timeout errors" do
21
+ MemCache.read_error_callback = lambda{}
22
+ simulate_timeout
23
+ cache.get('x').should == nil
24
+ cache.read_error_occurred.should == true
25
+ end
26
+
27
+ it "resets error_occurred to false after successful get" do
28
+ MemCache.read_error_callback = lambda{}
29
+ simulate_timeout
30
+ cache.get('x').should == nil
31
+ cache.stub!(:stubable_cache_get).and_return 1
32
+ cache.get('x').should == 1
33
+ cache.read_error_occurred.should == false
34
+ end
35
+
36
+ it "raises if no callback is given" do
37
+ simulate_timeout
38
+ lambda{
39
+ cache.get('x').should == nil
40
+ }.should raise_error
41
+ cache.read_error_occurred.should == true
42
+ end
43
+
44
+ it "calls the callback" do
45
+ MemCache.read_error_callback = lambda{ 1 }
46
+ simulate_timeout
47
+ cache.get('x').should == 1
48
+ cache.read_error_occurred.should == true
49
+ end
50
+ end
@@ -1,35 +1,9 @@
1
1
  require 'spec/spec_helper'
2
-
3
- class TestMemcached
4
- def initialize
5
- @wrapped = {}
6
- end
7
-
8
- def set(key, object, ttl = nil)
9
- raise 'nope!' if ttl.is_a? Hash or (ttl and not ttl.is_a? Numeric)
10
- @wrapped[key] = object
11
- end
12
-
13
- def get(key)
14
- @wrapped[key]
15
- end
16
-
17
- def [](x)
18
- @wrapped[x]
19
- end
20
-
21
- def clear
22
- @wrapped.clear
23
- end
24
-
25
- def delete(key)
26
- @wrapped.delete(key)
27
- end
28
- end
2
+ require 'spec/mem_cache'
29
3
 
30
4
  describe "Cachy::MemcachedWrapper" do
31
5
  before :all do
32
- @cache = TestMemcached.new
6
+ @cache = MemCache.new
33
7
  Cachy.cache_store = @cache
34
8
  end
35
9
 
@@ -0,0 +1,35 @@
1
+ # stub to test memcache integration
2
+ class MemCache
3
+ def initialize
4
+ @wrapped = {}
5
+ end
6
+
7
+ def set(key, object, ttl = nil)
8
+ raise 'nope!' if ttl.is_a? Hash or (ttl and not ttl.is_a? Numeric)
9
+ @wrapped[key] = object
10
+ end
11
+
12
+ def get(key)
13
+ cache_get(key)
14
+ end
15
+
16
+ def cache_get(key)
17
+ stubable_cache_get(key)
18
+ end
19
+
20
+ def stubable_cache_get(key)
21
+ @wrapped[key]
22
+ end
23
+
24
+ def [](x)
25
+ @wrapped[x]
26
+ end
27
+
28
+ def clear
29
+ @wrapped.clear
30
+ end
31
+
32
+ def delete(key)
33
+ @wrapped.delete(key)
34
+ end
35
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 5
9
- version: 0.1.5
8
+ - 6
9
+ version: 0.1.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Michael Grosser
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-29 00:00:00 +02:00
17
+ date: 2010-11-18 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -37,10 +37,12 @@ files:
37
37
  - lib/cachy/moneta_wrapper.rb
38
38
  - lib/cachy/redis_wrapper.rb
39
39
  - lib/cachy/wrapper.rb
40
+ - spec/cachy/memcache_timeout_protection_spec.rb
40
41
  - spec/cachy/memcached_wrapper_spec.rb
41
42
  - spec/cachy/moneta_wrapper_spec.rb
42
43
  - spec/cachy/redis_wrapper_spec.rb
43
44
  - spec/cachy_spec.rb
45
+ - spec/mem_cache.rb
44
46
  - spec/spec_helper.rb
45
47
  - spec/test_cache.rb
46
48
  has_rdoc: true
@@ -76,7 +78,9 @@ summary: Caching library for projects that have many processes or many caches
76
78
  test_files:
77
79
  - spec/cachy/memcached_wrapper_spec.rb
78
80
  - spec/cachy/moneta_wrapper_spec.rb
81
+ - spec/cachy/memcache_timeout_protection_spec.rb
79
82
  - spec/cachy/redis_wrapper_spec.rb
83
+ - spec/mem_cache.rb
80
84
  - spec/cachy_spec.rb
81
85
  - spec/test_cache.rb
82
86
  - spec/spec_helper.rb