module RecordCache::MultiRead

Public Class Methods

disable(klass) click to toggle source

Disable multi_read for a particular Store, e.g.

RecordCache::MultiRead.disable(ActiveSupport::Cache::DalliStore)
# File lib/record_cache/multi_read.rb, line 20
def disable(klass)
  @disabled_klass_names << klass.name
end
test(store) click to toggle source

Test the store if it supports read_multi calls If not, delegate multi_read calls to normal read calls

# File lib/record_cache/multi_read.rb, line 26
def test(store)
  return store if @tested.include?(store)
  @tested << store
  override_read_multi(store) unless read_multi_supported?(store)
  store
end

Private Class Methods

override_read_multi(store) click to toggle source

delegate read_multi to normal read calls

# File lib/record_cache/multi_read.rb, line 46
def override_read_multi(store)
  def store.read_multi(*keys)
    keys.inject({}){ |h,key| h[key] = self.read(key); h}
  end
end
read_multi_supported?(store) click to toggle source
# File lib/record_cache/multi_read.rb, line 35
def read_multi_supported?(store)
  return false if @disabled_klass_names.include?(store.class.name)
  begin
    store.read_multi('a', 'b')
    true
  rescue Exception => ignore
    false
  end
end