Module: KaminariCache::ClassMethods

Defined in:
lib/kaminari-cache.rb

Instance Method Summary collapse

Instance Method Details

#apply_sort(scope, order) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/kaminari-cache.rb', line 62

def apply_sort(scope, order)
  case order.class
    when Symbol
      scope.order! order
    when String
      scope.order! order
    when Hash
      order.each do |k, v|
        scope.order! "#{k.to_s} #{v.to_s}"
      end
  end
  scope
end

#cache_key(options) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/kaminari-cache.rb', line 54

def cache_key(options)
  key = [:kaminari, self.name.downcase]
  key << options[:page]
  key << options[:per]
  key << ["order", options[:order]] if options[:order]
  key
end

#fetch_page(options = {}) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/kaminari-cache.rb', line 34

def fetch_page(options = {})
  # Default options
  options.reverse_merge!(
    :page => 1,
    :per => Kaminari.config.max_per_page || Kaminari.config.default_per_page
  )
  entries = Rails.cache.fetch(cache_key(options)) do
    scope = self.page(options[:page]).per(options[:per])
    scope = apply_sort(scope, options[:order])

    struct = OpenStruct.new(
      :entries => scope.entries,
      :all => scope.entries,
      :current_page => scope.current_page,
      :total_pages => scope.total_pages,
      :per_page => scope.limit_value
    )
  end
end