cache 0.3.2 → 0.3.3

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,13 @@
1
+ 0.3.3 / 2012-04-17
2
+
3
+ * Enhancements
4
+
5
+ * Test on MRI 1.8, MRI 1.9, and JRuby 1.6.7+
6
+
7
+ * Bug fixes
8
+
9
+ * Fix Redis support. Tests were silently failing, made them loud and then fixed 'em.
10
+
1
11
  0.3.2 / 2012-04-11
2
12
 
3
13
  * Enhancements
data/Gemfile CHANGED
@@ -7,7 +7,9 @@ gem 'test-unit'
7
7
  gem 'redis'
8
8
  gem 'redis-namespace'
9
9
  gem 'dalli'
10
- gem 'memcached'
10
+ unless RUBY_PLATFORM == 'java'
11
+ gem 'memcached'
12
+ end
11
13
  gem 'memcache-client'
12
14
  gem 'rake'
13
15
  gem 'rack' # for ActiveSupport::Cache::FileStore of all things
@@ -29,7 +29,7 @@ class Cache
29
29
 
30
30
  def initialize(metal = nil) #:nodoc:
31
31
  @pid = ::Process.pid
32
- @config = Config.new self
32
+ @config = Config.new
33
33
  @metal = if metal.is_a?(Cache)
34
34
  metal.metal
35
35
  elsif metal
@@ -4,13 +4,6 @@ class Cache
4
4
  # Example:
5
5
  # cache.config.default_ttl = 120 # seconds
6
6
  class Config
7
-
8
- attr_reader :parent
9
-
10
- def initialize(parent) #:nodoc:
11
- @parent = parent
12
- end
13
-
14
7
  # TTL for method caches. Defaults to 60 seconds.
15
8
  #
16
9
  # Example:
@@ -1,4 +1,8 @@
1
1
  module Cache::Redis
2
+ def after_fork
3
+ @metal.quit
4
+ end
5
+
2
6
  def _get(k)
3
7
  if cached_v = @metal.get(k) and cached_v.is_a?(::String)
4
8
  ::Marshal.load cached_v
@@ -7,7 +11,9 @@ module Cache::Redis
7
11
 
8
12
  def _get_multi(ks)
9
13
  ks.inject({}) do |memo, k|
10
- memo[k] = @metal.get(k) if @metal.exist?(k)
14
+ if v = _get(k)
15
+ memo[k] = v
16
+ end
11
17
  memo
12
18
  end
13
19
  end
@@ -25,7 +31,7 @@ module Cache::Redis
25
31
  end
26
32
 
27
33
  def _flush
28
- @metal.flush
34
+ @metal.flushdb
29
35
  end
30
36
 
31
37
  def _exist?(k)
@@ -33,6 +39,6 @@ module Cache::Redis
33
39
  end
34
40
 
35
41
  def _stats
36
- @metal.stats
42
+ @metal.info
37
43
  end
38
44
  end
@@ -1,4 +1,4 @@
1
- require 'cache/redis_namespace'
1
+ require 'cache/redis'
2
2
  module Cache::RedisNamespace
3
3
  def self.extended(base)
4
4
  base.extend Cache::Redis
@@ -1,3 +1,3 @@
1
1
  class Cache
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
@@ -1,11 +1,13 @@
1
1
  require 'helper'
2
2
 
3
- require 'memcached'
3
+ unless RUBY_PLATFORM == 'java'
4
+ require 'memcached'
4
5
 
5
- class TestMemcachedBinaryStorage < Test::Unit::TestCase
6
- def raw_client
7
- Memcached.new 'localhost:11211', :support_cas => true, :binary => true
6
+ class TestMemcachedBinaryStorage < Test::Unit::TestCase
7
+ def raw_client
8
+ Memcached.new 'localhost:11211', :support_cas => true, :binary => true
9
+ end
10
+
11
+ include SharedTests
8
12
  end
9
-
10
- include SharedTests
11
13
  end
@@ -1,55 +1,57 @@
1
1
  require 'helper'
2
2
 
3
- require 'memcached'
3
+ unless RUBY_PLATFORM == 'java'
4
+ require 'memcached'
4
5
 
5
- class TestMemcachedRailsStorage < Test::Unit::TestCase
6
- def raw_client
7
- Memcached::Rails.new 'localhost:11211', :support_cas => true
8
- end
9
-
10
- include SharedTests
11
-
12
- def get_bare_id
13
- @cache.thread_metal.object_id
14
- end
15
-
16
- def test_treats_as_not_thread_safe
17
- # make sure bare client is initialized
18
- @cache.get 'hi'
19
-
20
- # get the main thread's bare client
21
- main_thread_bare_id = get_bare_id
22
-
23
- # sanity check that it's not changing every time
24
- @cache.get 'hi'
25
- assert_equal main_thread_bare_id, get_bare_id
26
-
27
- # create a new thread and get its bare client
28
- new_thread_bare_id = Thread.new { @cache.get 'hi'; get_bare_id }.value
29
-
30
- # make sure the bare client was reinitialized
31
- assert(main_thread_bare_id != new_thread_bare_id)
32
- end
33
-
34
- def test_treats_as_not_fork_safe
35
- # make sure bare client is initialized
36
- @cache.get 'hi'
37
-
38
- # get the main process's bare client
39
- parent_process_bare_id = get_bare_id
6
+ class TestMemcachedRailsStorage < Test::Unit::TestCase
7
+ def raw_client
8
+ Memcached::Rails.new 'localhost:11211', :support_cas => true
9
+ end
10
+
11
+ include SharedTests
40
12
 
41
- # sanity check that it's not changing every time
42
- @cache.get 'hi'
43
- assert_equal parent_process_bare_id, get_bare_id
13
+ def get_bare_id
14
+ @cache.thread_metal.object_id
15
+ end
44
16
 
45
- # fork a new process
46
- pid = Kernel.fork do
17
+ def test_treats_as_not_thread_safe
18
+ # make sure bare client is initialized
19
+ @cache.get 'hi'
20
+
21
+ # get the main thread's bare client
22
+ main_thread_bare_id = get_bare_id
23
+
24
+ # sanity check that it's not changing every time
47
25
  @cache.get 'hi'
48
- raise "Didn't split!" if parent_process_bare_id == get_bare_id
26
+ assert_equal main_thread_bare_id, get_bare_id
27
+
28
+ # create a new thread and get its bare client
29
+ new_thread_bare_id = Thread.new { @cache.get 'hi'; get_bare_id }.value
30
+
31
+ # make sure the bare client was reinitialized
32
+ assert(main_thread_bare_id != new_thread_bare_id)
49
33
  end
50
- Process.wait pid
51
34
 
52
- # make sure it didn't raise
53
- assert $?.success?
35
+ def test_treats_as_not_fork_safe
36
+ # make sure bare client is initialized
37
+ @cache.get 'hi'
38
+
39
+ # get the main process's bare client
40
+ parent_process_bare_id = get_bare_id
41
+
42
+ # sanity check that it's not changing every time
43
+ @cache.get 'hi'
44
+ assert_equal parent_process_bare_id, get_bare_id
45
+
46
+ # fork a new process
47
+ pid = Kernel.fork do
48
+ @cache.get 'hi'
49
+ raise "Didn't split!" if parent_process_bare_id == get_bare_id
50
+ end
51
+ Process.wait pid
52
+
53
+ # make sure it didn't raise
54
+ assert $?.success?
55
+ end
54
56
  end
55
57
  end
@@ -1,58 +1,60 @@
1
1
  require 'helper'
2
2
 
3
- require 'memcached'
3
+ unless RUBY_PLATFORM == 'java'
4
+ require 'memcached'
4
5
 
5
- class TestMemcachedStorage < Test::Unit::TestCase
6
- def raw_client
7
- Memcached.new 'localhost:11211', :support_cas => true
8
- end
9
-
10
- include SharedTests
11
-
12
- def get_bare_id
13
- @cache.thread_metal.object_id
14
- end
15
-
16
- def test_treats_as_not_thread_safe
17
- # make sure bare client is initialized
18
- @cache.get 'hi'
19
-
20
- # get the main thread's bare client
21
- main_thread_bare_id = get_bare_id
22
-
23
- # sanity check that it's not changing every time
24
- @cache.get 'hi'
25
- assert_equal main_thread_bare_id, get_bare_id
6
+ class TestMemcachedStorage < Test::Unit::TestCase
7
+ def raw_client
8
+ Memcached.new 'localhost:11211', :support_cas => true
9
+ end
10
+
11
+ include SharedTests
26
12
 
27
- # create a new thread and get its bare client
28
- new_thread_bare_id = Thread.new { @cache.get 'hi'; get_bare_id }.value
13
+ def get_bare_id
14
+ @cache.thread_metal.object_id
15
+ end
29
16
 
30
- # make sure the bare client was reinitialized
31
- assert(main_thread_bare_id != new_thread_bare_id)
17
+ def test_treats_as_not_thread_safe
18
+ # make sure bare client is initialized
19
+ @cache.get 'hi'
20
+
21
+ # get the main thread's bare client
22
+ main_thread_bare_id = get_bare_id
23
+
24
+ # sanity check that it's not changing every time
25
+ @cache.get 'hi'
26
+ assert_equal main_thread_bare_id, get_bare_id
27
+
28
+ # create a new thread and get its bare client
29
+ new_thread_bare_id = Thread.new { @cache.get 'hi'; get_bare_id }.value
30
+
31
+ # make sure the bare client was reinitialized
32
+ assert(main_thread_bare_id != new_thread_bare_id)
32
33
 
33
- # make sure the main thread's client wasn't messed with
34
- assert_equal main_thread_bare_id, get_bare_id
35
- end
36
-
37
- def test_treats_as_not_fork_safe
38
- # make sure bare client is initialized
39
- @cache.get 'hi'
40
-
41
- # get the main process's bare client
42
- parent_process_bare_id = get_bare_id
43
-
44
- # sanity check that it's not changing every time
45
- @cache.get 'hi'
46
- assert_equal parent_process_bare_id, get_bare_id
34
+ # make sure the main thread's client wasn't messed with
35
+ assert_equal main_thread_bare_id, get_bare_id
36
+ end
47
37
 
48
- # fork a new process
49
- pid = Kernel.fork do
38
+ def test_treats_as_not_fork_safe
39
+ # make sure bare client is initialized
40
+ @cache.get 'hi'
41
+
42
+ # get the main process's bare client
43
+ parent_process_bare_id = get_bare_id
44
+
45
+ # sanity check that it's not changing every time
50
46
  @cache.get 'hi'
51
- raise "Didn't split!" if parent_process_bare_id == get_bare_id
47
+ assert_equal parent_process_bare_id, get_bare_id
48
+
49
+ # fork a new process
50
+ pid = Kernel.fork do
51
+ @cache.get 'hi'
52
+ raise "Didn't split!" if parent_process_bare_id == get_bare_id
53
+ end
54
+ Process.wait pid
55
+
56
+ # make sure it didn't raise
57
+ assert $?.success?
52
58
  end
53
- Process.wait pid
54
-
55
- # make sure it didn't raise
56
- assert $?.success?
57
59
  end
58
60
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- require 'memcached'
3
+ require 'dalli'
4
4
  require 'active_support/cache'
5
5
  require 'active_support/cache/memory_store'
6
6
 
@@ -9,7 +9,7 @@ class TestRailsCacheStorage < Test::Unit::TestCase
9
9
  eval %{
10
10
  module ::Rails
11
11
  def self.cache
12
- @cache || Memcached::Rails.new('localhost:11211', :support_cas => true)
12
+ @cache || ActiveSupport::Cache::DalliStore.new(['localhost:11211'])
13
13
  end
14
14
  def self.cache=(foo)
15
15
  @cache = foo
@@ -23,7 +23,7 @@ class TestRailsCacheStorage < Test::Unit::TestCase
23
23
  end
24
24
 
25
25
  def test_defaults_to_rails_cache
26
- assert_equal Memcached::Rails, Cache.new.metal.class
26
+ assert_equal ActiveSupport::Cache::DalliStore, Cache.new.metal.class
27
27
  end
28
28
 
29
29
  def test_helpful_default
@@ -40,28 +40,28 @@ class TestRailsCacheStorage < Test::Unit::TestCase
40
40
 
41
41
  def test_explicitly_set
42
42
  c = Cache.new(Rails.cache)
43
- assert_equal Memcached::Rails, c.metal.class
43
+ assert_equal ActiveSupport::Cache::DalliStore, c.metal.class
44
44
  end
45
45
 
46
- # these behave strangely because they resolve the value of Rails.cache (e.g., Memcached::Rails) before returning
46
+ # these behave strangely because they resolve the value of Rails.cache (e.g., ActiveSupport::Cache::DalliStore) before returning
47
47
  def test_silly_self_reference
48
48
  Rails.cache = Cache.new(Rails.cache)
49
- assert_equal Memcached::Rails, Rails.cache.metal.class
49
+ assert_equal ActiveSupport::Cache::DalliStore, Rails.cache.metal.class
50
50
  end
51
51
 
52
52
  def test_self_reference_twice
53
53
  Rails.cache = Cache.new(Cache.new)
54
- assert_equal Memcached::Rails, Rails.cache.metal.class
54
+ assert_equal ActiveSupport::Cache::DalliStore, Rails.cache.metal.class
55
55
  end
56
56
 
57
57
  def test_self_reference_with_wrap
58
58
  Rails.cache = Cache.wrap(Cache.new)
59
- assert_equal Memcached::Rails, Rails.cache.metal.class
59
+ assert_equal ActiveSupport::Cache::DalliStore, Rails.cache.metal.class
60
60
  end
61
61
 
62
62
  def test_self_reference_with_absurd_wrapping
63
63
  Rails.cache = Cache.new(Cache.wrap(Cache.new))
64
- assert_equal Memcached::Rails, Rails.cache.metal.class
64
+ assert_equal ActiveSupport::Cache::DalliStore, Rails.cache.metal.class
65
65
  end
66
66
  #--
67
67
  end
@@ -0,0 +1,61 @@
1
+ require 'helper'
2
+
3
+ require 'redis'
4
+ require 'redis-namespace'
5
+
6
+ class TestRedisNamespaceStorage < Test::Unit::TestCase
7
+ def raw_client
8
+ r = Redis.new
9
+ Redis::Namespace.new(:test_cache, :redis => r)
10
+ end
11
+
12
+ include SharedTests
13
+
14
+ # client DOT client
15
+ def get_redis_client_connection_socket_id
16
+ connection = @cache.metal.client.instance_variable_get :@connection
17
+ sock = connection.instance_variable_get(:@sock)
18
+ # $stderr.puts sock.inspect
19
+ sock.object_id
20
+ end
21
+
22
+ def test_treats_as_thread_safe
23
+ # make sure ring is initialized
24
+ @cache.get 'hi'
25
+
26
+ # get the main thread's ring
27
+ main_thread_redis_client_connection_socket_id = get_redis_client_connection_socket_id
28
+
29
+ # sanity check that it's not changing every time
30
+ @cache.get 'hi'
31
+ assert_equal main_thread_redis_client_connection_socket_id, get_redis_client_connection_socket_id
32
+
33
+ # create a new thread and get its ring
34
+ new_thread_redis_client_connection_socket_id = Thread.new { @cache.get 'hi'; get_redis_client_connection_socket_id }.value
35
+
36
+ # make sure the ring was reinitialized
37
+ assert_equal main_thread_redis_client_connection_socket_id, new_thread_redis_client_connection_socket_id
38
+ end
39
+
40
+ def test_treats_as_not_fork_safe
41
+ # make sure ring is initialized
42
+ @cache.get 'hi'
43
+
44
+ # get the main thread's ring
45
+ parent_process_redis_client_connection_socket_id = get_redis_client_connection_socket_id
46
+
47
+ # sanity check that it's not changing every time
48
+ @cache.get 'hi'
49
+ assert_equal parent_process_redis_client_connection_socket_id, get_redis_client_connection_socket_id
50
+
51
+ # fork a new process
52
+ pid = Kernel.fork do
53
+ @cache.get 'hi'
54
+ raise "Didn't split!" if parent_process_redis_client_connection_socket_id == get_redis_client_connection_socket_id
55
+ end
56
+ Process.wait pid
57
+
58
+ # make sure it didn't raise
59
+ assert $?.success?
60
+ end
61
+ end
@@ -1,63 +1,60 @@
1
1
  require 'helper'
2
2
 
3
- if ENV['REDIS_URL']
4
- require 'redis'
5
- require 'uri'
6
-
7
- class TestRedisStorage < Test::Unit::TestCase
8
- def raw_client
9
- uri = URI.parse(ENV["REDIS_URL"])
10
- Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
11
- end
12
-
13
- include SharedTests
14
-
15
- # client DOT client
16
- def get_redis_client_connection_socket_id
17
- connection = @cache.metal.client.instance_variable_get :@connection
18
- sock = connection.instance_variable_get(:@sock)
19
- # $stderr.puts sock.inspect
20
- sock.object_id
21
- end
22
-
23
- def test_treats_as_thread_safe
24
- # make sure ring is initialized
25
- @cache.get 'hi'
3
+ require 'redis'
4
+ require 'uri'
26
5
 
27
- # get the main thread's ring
28
- main_thread_redis_client_connection_socket_id = get_redis_client_connection_socket_id
6
+ class TestRedisStorage < Test::Unit::TestCase
7
+ def raw_client
8
+ Redis.new#(:host => uri.host, :port => uri.port, :password => uri.password)
9
+ end
10
+
11
+ include SharedTests
12
+
13
+ # client DOT client
14
+ def get_redis_client_connection_socket_id
15
+ connection = @cache.metal.client.instance_variable_get :@connection
16
+ sock = connection.instance_variable_get(:@sock)
17
+ # $stderr.puts sock.inspect
18
+ sock.object_id
19
+ end
20
+
21
+ def test_treats_as_thread_safe
22
+ # make sure ring is initialized
23
+ @cache.get 'hi'
29
24
 
30
- # sanity check that it's not changing every time
31
- @cache.get 'hi'
32
- assert_equal main_thread_redis_client_connection_socket_id, get_redis_client_connection_socket_id
25
+ # get the main thread's ring
26
+ main_thread_redis_client_connection_socket_id = get_redis_client_connection_socket_id
33
27
 
34
- # create a new thread and get its ring
35
- new_thread_redis_client_connection_socket_id = Thread.new { @cache.get 'hi'; get_redis_client_connection_socket_id }.value
28
+ # sanity check that it's not changing every time
29
+ @cache.get 'hi'
30
+ assert_equal main_thread_redis_client_connection_socket_id, get_redis_client_connection_socket_id
36
31
 
37
- # make sure the ring was reinitialized
38
- assert_equal main_thread_redis_client_connection_socket_id, new_thread_redis_client_connection_socket_id
39
- end
32
+ # create a new thread and get its ring
33
+ new_thread_redis_client_connection_socket_id = Thread.new { @cache.get 'hi'; get_redis_client_connection_socket_id }.value
40
34
 
41
- def test_treats_as_not_fork_safe
42
- # make sure ring is initialized
43
- @cache.get 'hi'
35
+ # make sure the ring was reinitialized
36
+ assert_equal main_thread_redis_client_connection_socket_id, new_thread_redis_client_connection_socket_id
37
+ end
44
38
 
45
- # get the main thread's ring
46
- parent_process_redis_client_connection_socket_id = get_redis_client_connection_socket_id
39
+ def test_treats_as_not_fork_safe
40
+ # make sure ring is initialized
41
+ @cache.get 'hi'
47
42
 
48
- # sanity check that it's not changing every time
49
- @cache.get 'hi'
50
- assert_equal parent_process_redis_client_connection_socket_id, get_redis_client_connection_socket_id
43
+ # get the main thread's ring
44
+ parent_process_redis_client_connection_socket_id = get_redis_client_connection_socket_id
51
45
 
52
- # fork a new process
53
- pid = Kernel.fork do
54
- @cache.get 'hi'
55
- raise "Didn't split!" if parent_process_redis_client_connection_socket_id == get_redis_client_connection_socket_id
56
- end
57
- Process.wait pid
46
+ # sanity check that it's not changing every time
47
+ @cache.get 'hi'
48
+ assert_equal parent_process_redis_client_connection_socket_id, get_redis_client_connection_socket_id
58
49
 
59
- # make sure it didn't raise
60
- assert $?.success?
50
+ # fork a new process
51
+ pid = Kernel.fork do
52
+ @cache.get 'hi'
53
+ raise "Didn't split!" if parent_process_redis_client_connection_socket_id == get_redis_client_connection_socket_id
61
54
  end
55
+ Process.wait pid
56
+
57
+ # make sure it didn't raise
58
+ assert $?.success?
62
59
  end
63
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-11 00:00:00.000000000 Z
13
+ date: 2012-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -91,6 +91,7 @@ files:
91
91
  - test/test_memcached_rails_storage.rb
92
92
  - test/test_memcached_storage.rb
93
93
  - test/test_rails_cache_storage.rb
94
+ - test/test_redis_namespace_storage.rb
94
95
  - test/test_redis_storage.rb
95
96
  homepage: https://github.com/seamusabshere/cache
96
97
  licenses: []
@@ -130,5 +131,6 @@ test_files:
130
131
  - test/test_memcached_rails_storage.rb
131
132
  - test/test_memcached_storage.rb
132
133
  - test/test_rails_cache_storage.rb
134
+ - test/test_redis_namespace_storage.rb
133
135
  - test/test_redis_storage.rb
134
136
  has_rdoc: