cachetastic 3.5.3 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -6,4 +6,5 @@ gemspec
6
6
  gem 'memcache-client'
7
7
  gem 'rspec'
8
8
  gem 'timecop'
9
- gem 'redis'
9
+ gem 'redis'
10
+ gem 'dalli'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cachetastic (3.5.2)
4
+ cachetastic (3.6.0)
5
5
  activesupport
6
6
  configatron
7
7
 
@@ -13,6 +13,7 @@ GEM
13
13
  multi_json (~> 1.0)
14
14
  configatron (2.9.1)
15
15
  yamler (>= 0.1.0)
16
+ dalli (2.6.0)
16
17
  diff-lcs (1.1.3)
17
18
  i18n (0.6.1)
18
19
  memcache-client (1.8.5)
@@ -35,6 +36,7 @@ PLATFORMS
35
36
 
36
37
  DEPENDENCIES
37
38
  cachetastic!
39
+ dalli
38
40
  memcache-client
39
41
  rake
40
42
  redis
data/lib/cachetastic.rb CHANGED
@@ -9,6 +9,11 @@ begin
9
9
  rescue Exception => e
10
10
  puts "Memcached support is unavailable. To use Memcached do `gem install memcache-client`"
11
11
  end
12
+ begin
13
+ require 'dalli'
14
+ rescue Exception => e
15
+ puts "Memcached (via Dalli) support is unavailable. To use Memcached (via Dalli) do `gem install dalli`"
16
+ end
12
17
  begin
13
18
  require 'redis'
14
19
  rescue Exception => e
@@ -0,0 +1,84 @@
1
+ module Cachetastic # :nodoc:
2
+ module Adapters
3
+ class Dalli < Cachetastic::Adapters::Base
4
+
5
+ def initialize(klass) # :nodoc:
6
+ define_accessor(:dalli_servers)
7
+ define_accessor(:dalli_options)
8
+ define_accessor(:dalli_username)
9
+ define_accessor(:dalli_password)
10
+ self.dalli_servers = ['127.0.0.1:11211']
11
+ self.dalli_options = {}
12
+ super
13
+ connection
14
+ end
15
+
16
+ def get(key) # :nodoc:
17
+ connection.get(transform_key(key), false)
18
+ end # get
19
+
20
+ def set(key, value, expiry_time = configatron.cachetastic.defaults.default_expiry) # :nodoc:
21
+ connection.set(transform_key(key), marshal(value), expiry_time, false)
22
+ end # set
23
+
24
+ def delete(key) # :nodoc:
25
+ connection.delete(transform_key(key))
26
+ end # delete
27
+
28
+ def expire_all # :nodoc:
29
+ increment_version
30
+ @_mc_connection = nil
31
+ return nil
32
+ end # expire_all
33
+
34
+ def transform_key(key) # :nodoc:
35
+ key.to_s.hexdigest
36
+ end
37
+
38
+ # Return <tt>false</tt> if the connection to Memcached is
39
+ # either <tt>nil</tt> or not active.
40
+ def valid?
41
+ return false if @_mc_connection.nil?
42
+ return false unless @_mc_connection.stats
43
+ return true
44
+ end
45
+
46
+ private
47
+ def connection
48
+ unless @_mc_connection && valid? && @_ns_version == get_version
49
+ @_mc_connection = ::Dalli::Client.new(self.dalli_servers, self.dalli_options.merge(namespace: namespace))
50
+ end
51
+ @_mc_connection
52
+ end
53
+
54
+ def ns_connection
55
+ if !@_ns_connection || !@_ns_connection.stats
56
+ @_ns_connection = ::Dalli::Client.new(self.dalli_servers, self.dalli_options.merge(namespace: :namespace_versions))
57
+ end
58
+ @_ns_connection
59
+ end
60
+
61
+ def increment_version
62
+ name = self.klass.name
63
+ v = get_version
64
+ ns_connection.set(name, v + Time.now.to_i)
65
+ end
66
+
67
+ def get_version
68
+ name = self.klass.name
69
+ v = ns_connection.get(name)
70
+ if v.nil?
71
+ v = Time.now.to_i
72
+ ns_connection.set(name, v)
73
+ end
74
+ v.to_i
75
+ end
76
+
77
+ def namespace
78
+ @_ns_version = get_version
79
+ "#{self.klass.name}.#{@_ns_version}"
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -31,7 +31,7 @@ module Cachetastic # :nodoc:
31
31
  end # get
32
32
 
33
33
  def set(key, value, expiry_time = configatron.cachetastic.defaults.default_expiry) # :nodoc:
34
- so = Cachetastic::Cache::StoreObject.new(key, value, expiry_time.from_now)
34
+ so = Cachetastic::Cache::StoreObject.new(key, unmarshal(value), expiry_time.from_now)
35
35
  path = file_path(key)
36
36
  ::File.open(path, 'w') {|f| f.write marshal(so)}
37
37
  value
@@ -5,7 +5,7 @@ module Cachetastic # :nodoc:
5
5
  # This adapter supports the following configuration settings,
6
6
  # in addition to the default settings:
7
7
  #
8
- # configatron.cachetastic.defaults.servers = ['127.0.0.1:11211']
8
+ # configatron.cachetastic.defaults.mc_servers = ['127.0.0.1:11211']
9
9
  # configatron.cachetastic.defaults.mc_options = {c_threshold: 10_000,
10
10
  # compression: true,
11
11
  # debug: false,
@@ -13,8 +13,8 @@ module Cachetastic # :nodoc:
13
13
  # urlencode: false}
14
14
  # configatron.cachetastic.delete_delay = 0
15
15
  #
16
- # The <tt>servers</tt> setting defines an <tt>Array</tt> of Mecached
17
- # servers, represented as "<host>:<port>".
16
+ # The <tt>mc_servers</tt> setting defines an <tt>Array</tt> of Memcached
17
+ # mc_servers, represented as "<host>:<port>".
18
18
  #
19
19
  # The <tt>mc_options</tt> setting is a <tt>Hash</tt> of settings required
20
20
  # by Memcached. See the Memcached documentation for more information on
@@ -28,16 +28,12 @@ module Cachetastic # :nodoc:
28
28
  # methods.
29
29
  class Memcached < Cachetastic::Adapters::Base
30
30
 
31
- attr_accessor :servers
32
- attr_accessor :mc_options
33
- attr_accessor :delete_delay
34
-
35
31
  def initialize(klass) # :nodoc:
36
- define_accessor(:servers)
32
+ define_accessor(:mc_servers)
37
33
  define_accessor(:mc_options)
38
34
  define_accessor(:delete_delay)
39
35
  self.delete_delay = 0
40
- self.servers = ['127.0.0.1:11211']
36
+ self.mc_servers = ['127.0.0.1:11211']
41
37
  self.mc_options = {
42
38
  c_threshold: 10_000,
43
39
  compression: true,
@@ -82,14 +78,14 @@ module Cachetastic # :nodoc:
82
78
  private
83
79
  def connection
84
80
  unless @_mc_connection && valid? && @_ns_version == get_version
85
- @_mc_connection = MemCache.new(self.servers, self.mc_options.merge(namespace: namespace))
81
+ @_mc_connection = MemCache.new(self.mc_servers, self.mc_options.merge(namespace: namespace))
86
82
  end
87
83
  @_mc_connection
88
84
  end
89
85
 
90
86
  def ns_connection
91
87
  if !@_ns_connection || !@_ns_connection.active?
92
- @_ns_connection = MemCache.new(self.servers, self.mc_options.merge(namespace: :namespace_versions))
88
+ @_ns_connection = MemCache.new(self.mc_servers, self.mc_options.merge(namespace: :namespace_versions))
93
89
  end
94
90
  @_ns_connection
95
91
  end
@@ -26,7 +26,7 @@ module Cachetastic
26
26
  end # get
27
27
 
28
28
  def set(key, value, expiry_time = configatron.cachetastic.defaults.default_expiry) # :nodoc:
29
- connection.setex(transform_key(key), expiry_time, marshal(value))
29
+ connection.setex(transform_key(key), expiry_time, value)
30
30
  return value
31
31
  end # set
32
32
 
@@ -72,7 +72,7 @@ module Cachetastic # :nodoc:
72
72
  def set(key, value, expiry_time = nil)
73
73
  do_with_logging(:set, key) do
74
74
  retryable do
75
- self.adapter.set(key, value, calculate_expiry_time(expiry_time))
75
+ self.adapter.set(key, adapter.marshal(value), calculate_expiry_time(expiry_time))
76
76
  end
77
77
  end
78
78
  end # set
@@ -174,6 +174,7 @@ module Cachetastic # :nodoc:
174
174
  end_time = Time.now
175
175
  str = ''
176
176
  unless res.nil?
177
+ res = adapter.unmarshal(res)
177
178
  str = "[#{res.class.name}]"
178
179
  str << "\t[Size = #{res.size}]" if res.respond_to? :size
179
180
  str << "\t" << res.inspect
@@ -1,3 +1,3 @@
1
1
  module Cachetastic
2
- VERSION = "3.5.3"
2
+ VERSION = "3.6.0"
3
3
  end
@@ -89,7 +89,7 @@ describe Cachetastic::Adapters do
89
89
 
90
90
  end
91
91
 
92
- ['LocalMemory', 'File', 'Memcached', 'Redis'].each do |adapter|
92
+ ['LocalMemory', 'File', 'Memcached', 'Redis', 'Dalli'].each do |adapter|
93
93
 
94
94
  describe "#{adapter} (Common)" do
95
95
 
@@ -151,7 +151,7 @@ describe Cachetastic::Adapters do
151
151
  CarCache.get(:bmw).should_not be_nil
152
152
  end
153
153
 
154
- unless ["Memcached", "Redis"].include?(adapter)
154
+ unless ["Memcached", "Redis", "Dalli"].include?(adapter)
155
155
  it 'should set an object into the cache with an expiry' do
156
156
  CarCache.get(:bmw).should be_nil
157
157
  CarCache.set(:bmw, 'Beamer!', 1)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cachetastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.3
4
+ version: 3.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-18 00:00:00.000000000 Z
12
+ date: 2013-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -75,6 +75,7 @@ files:
75
75
  - cachetastic.gemspec
76
76
  - lib/cachetastic.rb
77
77
  - lib/cachetastic/adapters/base.rb
78
+ - lib/cachetastic/adapters/dalli.rb
78
79
  - lib/cachetastic/adapters/file.rb
79
80
  - lib/cachetastic/adapters/local_memory.rb
80
81
  - lib/cachetastic/adapters/memcached.rb