dalli 2.0.5 → 2.1.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.
Potentially problematic release.
This version of dalli might be problematic. Click here for more details.
- data/History.md +5 -0
 - data/README.md +3 -6
 - data/lib/active_support/cache/dalli_store.rb +4 -2
 - data/lib/dalli.rb +1 -0
 - data/lib/dalli/client.rb +19 -9
 - data/lib/dalli/railtie.rb +7 -0
 - data/lib/dalli/version.rb +1 -1
 - data/test/test_dalli.rb +19 -5
 - metadata +9 -8
 
    
        data/History.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -81,14 +81,11 @@ Here's a more comprehensive example that sets a reasonable default for maximum c 
     | 
|
| 
       81 
81 
     | 
    
         
             
                config.cache_store = :dalli_store, 'cache-1.example.com', 'cache-2.example.com',
         
     | 
| 
       82 
82 
     | 
    
         
             
                    { :namespace => NAME_OF_RAILS_APP, :expires_in => 1.day, :compress => true }
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
            To use Dalli for Rails session storage, in `config/initializers/session_store.rb`:
         
     | 
| 
      
 84 
     | 
    
         
            +
            To use Dalli for Rails session storage that times out after 20 minutes, in `config/initializers/session_store.rb`:
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                 
     | 
| 
       87 
     | 
    
         
            -
                Rails.application.config.session_store :dalli_store, :memcache_server => ['host1', 'host2'], :namespace => 'sessions', :key => '_foundation_session', :expire_after => 30.minutes
         
     | 
| 
      
 86 
     | 
    
         
            +
                Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes
         
     | 
| 
       88 
87 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
            Dalli does not support Rails 2.x any longer.
         
     | 
| 
      
 88 
     | 
    
         
            +
            Dalli does not support Rails 2.x.
         
     | 
| 
       92 
89 
     | 
    
         | 
| 
       93 
90 
     | 
    
         | 
| 
       94 
91 
     | 
    
         
             
            Configuration
         
     | 
| 
         @@ -1,6 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: ascii
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'dalli'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'digest/md5'
         
     | 
| 
       4 
3 
     | 
    
         | 
| 
       5 
4 
     | 
    
         
             
            module ActiveSupport
         
     | 
| 
       6 
5 
     | 
    
         
             
              module Cache
         
     | 
| 
         @@ -164,6 +163,10 @@ module ActiveSupport 
     | 
|
| 
       164 
163 
     | 
    
         
             
                  # be used with care when using a shared cache.
         
     | 
| 
       165 
164 
     | 
    
         
             
                  def clear(options=nil)
         
     | 
| 
       166 
165 
     | 
    
         
             
                    @data.flush_all
         
     | 
| 
      
 166 
     | 
    
         
            +
                  rescue Dalli::DalliError => e
         
     | 
| 
      
 167 
     | 
    
         
            +
                    logger.error("DalliError: #{e.message}") if logger
         
     | 
| 
      
 168 
     | 
    
         
            +
                    raise if @raise_errors
         
     | 
| 
      
 169 
     | 
    
         
            +
                    nil
         
     | 
| 
       167 
170 
     | 
    
         
             
                  end
         
     | 
| 
       168 
171 
     | 
    
         | 
| 
       169 
172 
     | 
    
         
             
                  # Get the statistics from the memcached servers.
         
     | 
| 
         @@ -233,7 +236,6 @@ module ActiveSupport 
     | 
|
| 
       233 
236 
     | 
    
         
             
                    key = key.to_s.dup
         
     | 
| 
       234 
237 
     | 
    
         
             
                    key = key.force_encoding("BINARY") if key.encoding_aware?
         
     | 
| 
       235 
238 
     | 
    
         
             
                    key = key.gsub(ESCAPE_KEY_CHARS){ |match| "%#{match.getbyte(0).to_s(16).upcase}" }
         
     | 
| 
       236 
     | 
    
         
            -
                    key = "#{key[0, 213]}:md5:#{Digest::MD5.hexdigest(key)}" if key.size > 250
         
     | 
| 
       237 
239 
     | 
    
         
             
                    key
         
     | 
| 
       238 
240 
     | 
    
         
             
                  end
         
     | 
| 
       239 
241 
     | 
    
         | 
    
        data/lib/dalli.rb
    CHANGED
    
    
    
        data/lib/dalli/client.rb
    CHANGED
    
    | 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'digest/md5'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            # encoding: ascii
         
     | 
| 
       2 
4 
     | 
    
         
             
            module Dalli
         
     | 
| 
       3 
5 
     | 
    
         
             
              class Client
         
     | 
| 
         @@ -83,7 +85,7 @@ module Dalli 
     | 
|
| 
       83 
85 
     | 
    
         
             
                end
         
     | 
| 
       84 
86 
     | 
    
         | 
| 
       85 
87 
     | 
    
         
             
                def fetch(key, ttl=nil, options=nil)
         
     | 
| 
       86 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 88 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       87 
89 
     | 
    
         
             
                  val = get(key, options)
         
     | 
| 
       88 
90 
     | 
    
         
             
                  if val.nil? && block_given?
         
     | 
| 
       89 
91 
     | 
    
         
             
                    val = yield
         
     | 
| 
         @@ -104,7 +106,7 @@ module Dalli 
     | 
|
| 
       104 
106 
     | 
    
         
             
                # - false if the value was changed by someone else.
         
     | 
| 
       105 
107 
     | 
    
         
             
                # - true if the value was successfully updated.
         
     | 
| 
       106 
108 
     | 
    
         
             
                def cas(key, ttl=nil, options=nil, &block)
         
     | 
| 
       107 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 109 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       108 
110 
     | 
    
         
             
                  (value, cas) = perform(:cas, key)
         
     | 
| 
       109 
111 
     | 
    
         
             
                  value = (!value || value == 'Not found') ? nil : value
         
     | 
| 
       110 
112 
     | 
    
         
             
                  if value
         
     | 
| 
         @@ -114,7 +116,7 @@ module Dalli 
     | 
|
| 
       114 
116 
     | 
    
         
             
                end
         
     | 
| 
       115 
117 
     | 
    
         | 
| 
       116 
118 
     | 
    
         
             
                def set(key, value, ttl=nil, options=nil)
         
     | 
| 
       117 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 119 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       118 
120 
     | 
    
         
             
                  perform(:set, key, value, ttl, 0, options)
         
     | 
| 
       119 
121 
     | 
    
         
             
                end
         
     | 
| 
       120 
122 
     | 
    
         | 
| 
         @@ -122,7 +124,7 @@ module Dalli 
     | 
|
| 
       122 
124 
     | 
    
         
             
                # Conditionally add a key/value pair, if the key does not already exist
         
     | 
| 
       123 
125 
     | 
    
         
             
                # on the server.  Returns true if the operation succeeded.
         
     | 
| 
       124 
126 
     | 
    
         
             
                def add(key, value, ttl=nil, options=nil)
         
     | 
| 
       125 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 127 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       126 
128 
     | 
    
         
             
                  perform(:add, key, value, ttl, options)
         
     | 
| 
       127 
129 
     | 
    
         
             
                end
         
     | 
| 
       128 
130 
     | 
    
         | 
| 
         @@ -130,7 +132,7 @@ module Dalli 
     | 
|
| 
       130 
132 
     | 
    
         
             
                # Conditionally add a key/value pair, only if the key already exists
         
     | 
| 
       131 
133 
     | 
    
         
             
                # on the server.  Returns true if the operation succeeded.
         
     | 
| 
       132 
134 
     | 
    
         
             
                def replace(key, value, ttl=nil, options=nil)
         
     | 
| 
       133 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 135 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       134 
136 
     | 
    
         
             
                  perform(:replace, key, value, ttl, options)
         
     | 
| 
       135 
137 
     | 
    
         
             
                end
         
     | 
| 
       136 
138 
     | 
    
         | 
| 
         @@ -172,7 +174,7 @@ module Dalli 
     | 
|
| 
       172 
174 
     | 
    
         
             
                # #cas.
         
     | 
| 
       173 
175 
     | 
    
         
             
                def incr(key, amt=1, ttl=nil, default=nil)
         
     | 
| 
       174 
176 
     | 
    
         
             
                  raise ArgumentError, "Positive values only: #{amt}" if amt < 0
         
     | 
| 
       175 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 177 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       176 
178 
     | 
    
         
             
                  perform(:incr, key, amt.to_i, ttl, default)
         
     | 
| 
       177 
179 
     | 
    
         
             
                end
         
     | 
| 
       178 
180 
     | 
    
         | 
| 
         @@ -192,7 +194,7 @@ module Dalli 
     | 
|
| 
       192 
194 
     | 
    
         
             
                # #cas.
         
     | 
| 
       193 
195 
     | 
    
         
             
                def decr(key, amt=1, ttl=nil, default=nil)
         
     | 
| 
       194 
196 
     | 
    
         
             
                  raise ArgumentError, "Positive values only: #{amt}" if amt < 0
         
     | 
| 
       195 
     | 
    
         
            -
                  ttl ||= @options[:expires_in]
         
     | 
| 
      
 197 
     | 
    
         
            +
                  ttl ||= @options[:expires_in].to_i
         
     | 
| 
       196 
198 
     | 
    
         
             
                  perform(:decr, key, amt.to_i, ttl, default)
         
     | 
| 
       197 
199 
     | 
    
         
             
                end
         
     | 
| 
       198 
200 
     | 
    
         | 
| 
         @@ -257,7 +259,11 @@ module Dalli 
     | 
|
| 
       257 
259 
     | 
    
         
             
                def validate_key(key)
         
     | 
| 
       258 
260 
     | 
    
         
             
                  raise ArgumentError, "key cannot be blank" if !key || key.length == 0
         
     | 
| 
       259 
261 
     | 
    
         
             
                  key = key_with_namespace(key)
         
     | 
| 
       260 
     | 
    
         
            -
                   
     | 
| 
      
 262 
     | 
    
         
            +
                  if key.length > 250
         
     | 
| 
      
 263 
     | 
    
         
            +
                    namespace_length = @options[:namespace] ? @options[:namespace].size : 0
         
     | 
| 
      
 264 
     | 
    
         
            +
                    max_length_before_namespace = 212 - namespace_length
         
     | 
| 
      
 265 
     | 
    
         
            +
                    key = "#{key[0, max_length_before_namespace]}:md5:#{Digest::MD5.hexdigest(key)}"
         
     | 
| 
      
 266 
     | 
    
         
            +
                  end
         
     | 
| 
       261 
267 
     | 
    
         
             
                  return key
         
     | 
| 
       262 
268 
     | 
    
         
             
                end
         
     | 
| 
       263 
269 
     | 
    
         | 
| 
         @@ -274,7 +280,11 @@ module Dalli 
     | 
|
| 
       274 
280 
     | 
    
         
             
                    Dalli.logger.warn "DEPRECATED: Dalli's :compression option is now just :compress => true.  Please update your configuration."
         
     | 
| 
       275 
281 
     | 
    
         
             
                    opts[:compress] = opts.delete(:compression)
         
     | 
| 
       276 
282 
     | 
    
         
             
                  end
         
     | 
| 
       277 
     | 
    
         
            -
                   
     | 
| 
      
 283 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 284 
     | 
    
         
            +
                    opts[:expires_in] = opts[:expires_in].to_i if opts[:expires_in]
         
     | 
| 
      
 285 
     | 
    
         
            +
                  rescue NoMethodError
         
     | 
| 
      
 286 
     | 
    
         
            +
                    raise ArgumentError, "cannot convert :expires_in => #{opts[:expires_in].inspect} to an integer"
         
     | 
| 
      
 287 
     | 
    
         
            +
                  end
         
     | 
| 
       278 
288 
     | 
    
         
             
                  opts
         
     | 
| 
       279 
289 
     | 
    
         
             
                end
         
     | 
| 
       280 
290 
     | 
    
         
             
              end
         
     | 
    
        data/lib/dalli/version.rb
    CHANGED
    
    
    
        data/test/test_dalli.rb
    CHANGED
    
    | 
         @@ -14,6 +14,15 @@ describe 'Dalli' do 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  # Rails.logger.expects :warn
         
     | 
| 
       15 
15 
     | 
    
         
             
                  assert dc.instance_variable_get(:@options)[:compress]
         
     | 
| 
       16 
16 
     | 
    
         
             
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                
         
     | 
| 
      
 18 
     | 
    
         
            +
                should 'raises error with invalid expires_in' do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  bad_data = [{:bad => 'expires in data'}, Hash, [1,2,3]]
         
     | 
| 
      
 20 
     | 
    
         
            +
                  bad_data.each do |bad|
         
     | 
| 
      
 21 
     | 
    
         
            +
                    assert_raises ArgumentError do
         
     | 
| 
      
 22 
     | 
    
         
            +
                      dc = Dalli::Client.new('foo', {:expires_in => bad})
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
       17 
26 
     | 
    
         
             
              end
         
     | 
| 
       18 
27 
     | 
    
         | 
| 
       19 
28 
     | 
    
         
             
              describe 'key validation' do
         
     | 
| 
         @@ -404,11 +413,16 @@ describe 'Dalli' do 
     | 
|
| 
       404 
413 
     | 
    
         
             
                    dc2.set('namespaced', 2)
         
     | 
| 
       405 
414 
     | 
    
         
             
                    assert_equal 1, dc.get('namespaced')
         
     | 
| 
       406 
415 
     | 
    
         
             
                    assert_equal 2, dc2.get('namespaced')
         
     | 
| 
       407 
     | 
    
         
            -
             
     | 
| 
       408 
     | 
    
         
            -
             
     | 
| 
       409 
     | 
    
         
            -
             
     | 
| 
       410 
     | 
    
         
            -
             
     | 
| 
       411 
     | 
    
         
            -
             
     | 
| 
      
 416 
     | 
    
         
            +
                  end
         
     | 
| 
      
 417 
     | 
    
         
            +
                end
         
     | 
| 
      
 418 
     | 
    
         
            +
                
         
     | 
| 
      
 419 
     | 
    
         
            +
                should 'truncate cache keys that are too long' do
         
     | 
| 
      
 420 
     | 
    
         
            +
                  memcached do
         
     | 
| 
      
 421 
     | 
    
         
            +
                    @dalli = Dalli::Client.new('localhost:19122', :namespace => 'some:namspace')
         
     | 
| 
      
 422 
     | 
    
         
            +
                    key = "this cache key is far too long so it must be hashed and truncated and stuff" * 10
         
     | 
| 
      
 423 
     | 
    
         
            +
                    value = "some value"
         
     | 
| 
      
 424 
     | 
    
         
            +
                    assert_equal true, @dalli.set(key, value)
         
     | 
| 
      
 425 
     | 
    
         
            +
                    assert_equal value, @dalli.get(key)
         
     | 
| 
       412 
426 
     | 
    
         
             
                  end
         
     | 
| 
       413 
427 
     | 
    
         
             
                end
         
     | 
| 
       414 
428 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: dalli
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,11 +9,11 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-06-23 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: mini_shoulda
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &70203098892260 !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: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *70203098892260
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: mocha
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &70203098891120 !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: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *70203098891120
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: rails
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &70203098890540 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
40 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
41 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -43,7 +43,7 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    version: '3'
         
     | 
| 
       44 
44 
     | 
    
         
             
              type: :development
         
     | 
| 
       45 
45 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *70203098890540
         
     | 
| 
       47 
47 
     | 
    
         
             
            description: High performance memcached client for Ruby
         
     | 
| 
       48 
48 
     | 
    
         
             
            email: mperham@gmail.com
         
     | 
| 
       49 
49 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -54,6 +54,7 @@ files: 
     | 
|
| 
       54 
54 
     | 
    
         
             
            - lib/active_support/cache/dalli_store.rb
         
     | 
| 
       55 
55 
     | 
    
         
             
            - lib/dalli/client.rb
         
     | 
| 
       56 
56 
     | 
    
         
             
            - lib/dalli/options.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/dalli/railtie.rb
         
     | 
| 
       57 
58 
     | 
    
         
             
            - lib/dalli/ring.rb
         
     | 
| 
       58 
59 
     | 
    
         
             
            - lib/dalli/server.rb
         
     | 
| 
       59 
60 
     | 
    
         
             
            - lib/dalli/socket.rb
         
     |