cachetastic 3.5.3 → 3.6.0

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/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