Module: Kasket::ConfigurationMixin

Defined in:
lib/kasket/configuration_mixin.rb

Instance Method Summary collapse

Instance Method Details

#has_kasket(options = {}) ⇒ Object



69
70
71
# File 'lib/kasket/configuration_mixin.rb', line 69

def has_kasket(options = {})
  has_kasket_on :id
end

#has_kasket_index_on?(sorted_attributes) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/kasket/configuration_mixin.rb', line 65

def has_kasket_index_on?(sorted_attributes)
  kasket_indices.include?(sorted_attributes)
end

#has_kasket_on(*args) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/kasket/configuration_mixin.rb', line 73

def has_kasket_on(*args)
  attributes = args.sort! { |x, y| x.to_s <=> y.to_s }
  if attributes != [:id] && !kasket_indices.include?([: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_versionObject



28
29
30
# File 'lib/kasket/configuration_mixin.rb', line 28

def kasket_activerecord_version
  "R#{ActiveRecord::VERSION::MAJOR}#{ActiveRecord::VERSION::MINOR}"
end

#kasket_indicesObject



59
60
61
62
63
# File 'lib/kasket/configuration_mixin.rb', line 59

def kasket_indices
  result = @kasket_indices || []
  result += superclass.kasket_indices unless self == ActiveRecord::Base
  result.uniq
end

#kasket_key_for(attribute_value_pairs) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/kasket/configuration_mixin.rb', line 32

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?
      quoted_value = if column
        connection.quote(column.type_cast(value), column).downcase
      else
        value.to_s
      end
      attribute.to_s << '=' << quoted_value
    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) ⇒ Object



55
56
57
# File 'lib/kasket/configuration_mixin.rb', line 55

def kasket_key_for_id(id)
  kasket_key_for([['id', id]])
end

#kasket_key_prefixObject



24
25
26
# File 'lib/kasket/configuration_mixin.rb', line 24

def kasket_key_prefix
  @kasket_key_prefix ||= "kasket-#{Kasket::Version::PROTOCOL}/#{kasket_activerecord_version}/#{table_name}/version=#{column_names.join.sum}/"
end

#kasket_parserObject



20
21
22
# File 'lib/kasket/configuration_mixin.rb', line 20

def kasket_parser
  @kasket_parser ||= QueryParser.new(self)
end

#use_kasket?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/kasket/configuration_mixin.rb', line 16

def use_kasket?
  !Thread.current['kasket_disabled']
end

#without_kasket(&block) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/kasket/configuration_mixin.rb', line 8

def without_kasket(&block)
  old_value = Thread.current['kasket_disabled'] || false
  Thread.current['kasket_disabled'] = true
  yield
ensure
  Thread.current['kasket_disabled'] = old_value
end