module Kasket::ConfigurationMixin

Public Instance Methods

has_kasket() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 70
def has_kasket
  has_kasket_on :id
end
has_kasket_index_on?(sorted_attributes) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 66
def has_kasket_index_on?(sorted_attributes)
  kasket_indices.include?(sorted_attributes)
end
has_kasket_on(*args) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 74
def has_kasket_on(*args)
  attributes = args.sort_by!(&:to_s)

  # enforce id index
  if attributes != [:id] && !has_kasket_index_on?([:id])
    has_kasket_on(:id)
  end

  @kasket_indices ||= []
  @kasket_indices << attributes unless @kasket_indices.include?(attributes)

  include WriteMixin unless include?(WriteMixin)
  extend DirtyMixin unless respond_to?(:kasket_dirty_methods)
  extend ReadMixin unless methods.map(&:to_sym).include?(:find_by_sql_with_kasket)
end
kasket_activerecord_version() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 30
def kasket_activerecord_version
  "R#{ActiveRecord::VERSION::MAJOR}#{ActiveRecord::VERSION::MINOR}"
end
kasket_expires_in(time) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 90
def kasket_expires_in(time)
  @kasket_ttl = time
end
kasket_indices() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 56
def kasket_indices
  result = if defined?(@kasket_indices) && @kasket_indices
    @kasket_indices
  else
    []
  end
  result += superclass.kasket_indices unless self == ActiveRecord::Base
  result.uniq
end
kasket_key_for(attribute_value_pairs) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 34
def kasket_key_for(attribute_value_pairs)
  if attribute_value_pairs.size == 1 && attribute_value_pairs[0][0] == :id && attribute_value_pairs[0][1].is_a?(Array)
    attribute_value_pairs[0][1].map {|id| kasket_key_for_id(id)}
  else
    key = attribute_value_pairs.map do |attribute, value|
      column = columns_hash[attribute.to_s]
      value = nil if value.blank? && value != false
      "#{attribute}=#{kasket_quoted_value_for_column(value, column)}"
    end.join('/')

    if key.size > (250 - kasket_key_prefix.size) || key =~ /\s/
      key = Digest::MD5.hexdigest(key)
    end

    kasket_key_prefix + key
  end
end
kasket_key_for_id(id) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 52
def kasket_key_for_id(id)
  kasket_key_for([['id', id]])
end
kasket_key_prefix() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 23
def kasket_key_prefix
  @kasket_key_prefix ||= begin
    column_hash = column_names.join.sum
    "kasket-#{Kasket::Version::PROTOCOL}/#{kasket_activerecord_version}/#{table_name}/version=#{column_hash}/"
  end
end
kasket_parser() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 19
def kasket_parser
  @kasket_parser ||= QueryParser.new(self)
end
kasket_ttl() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 94
def kasket_ttl
  @kasket_ttl ||= nil
  @kasket_ttl || Kasket::CONFIGURATION[:default_expires_in]
end
use_kasket?() click to toggle source
# File lib/kasket/configuration_mixin.rb, line 15
def use_kasket?
  !Thread.current[:kasket_disabled]
end
without_kasket() { || ... } click to toggle source
# File lib/kasket/configuration_mixin.rb, line 7
def without_kasket
  old_value = Thread.current[:kasket_disabled] || false
  Thread.current[:kasket_disabled] = true
  yield
ensure
  Thread.current[:kasket_disabled] = old_value
end

Private Instance Methods

kasket_quoted_value_for_column(value, column) click to toggle source
# File lib/kasket/configuration_mixin.rb, line 101
def kasket_quoted_value_for_column(value, column)
  if column
    conn = connection
    type = conn.lookup_cast_type_from_column(column)
    casted_value = conn.type_cast(type.serialize(value))
    conn.quote(casted_value).downcase
  else
    value.to_s
  end
end