Module: PagedScopes::Page::ClassMethods

Extended by:
ActiveSupport::Memoizable
Includes:
Enumerable
Defined in:
lib/paged_scopes/pages.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#proxyObject

Returns the value of attribute proxy.



21
22
23
# File 'lib/paged_scopes/pages.rb', line 21

def proxy
  @proxy
end

Instance Method Details

#allObject



82
83
84
# File 'lib/paged_scopes/pages.rb', line 82

def all
  collect { |page| page }
end

#closest_to(number) ⇒ Object



86
87
88
89
# File 'lib/paged_scopes/pages.rb', line 86

def closest_to(number)
  closest_number = [ [ 1, number ].max, count ].min
  closest_number > 0 ? find(closest_number) : nil ## TODO this is unneeded now!
end

#countObject



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/paged_scopes/pages.rb', line 55

def count
  collection_count = if proxy_scoped?(:limit)
    count_options = { :distinct => true, :limit => 1 }
    count_options.merge!(:offset => 0) if proxy_scoped?(:offset)
    proxy_count = proxy.count("#{proxy.table_name}.#{proxy.primary_key}", count_options)
    proxy_count -= proxy_options[:offset] if proxy_scoped?(:offset)
    [ proxy_count, proxy_options[:limit] ].min
  else
    proxy.count("#{proxy.table_name}.#{proxy.primary_key}", :distinct => true)
  end
  [ (collection_count - 1)/per_page + 1, 1].max
end

#each(&block) ⇒ Object



78
79
80
# File 'lib/paged_scopes/pages.rb', line 78

def each(&block)
  1.upto(count) { |number| yield find(number) }
end

#find(id) ⇒ Object



31
32
33
# File 'lib/paged_scopes/pages.rb', line 31

def find(id)
  new(id.to_i)
end

#find_by_object(object) ⇒ Object



44
45
46
47
48
# File 'lib/paged_scopes/pages.rb', line 44

def find_by_object(object)
  find_by_object!(object)
rescue PageNotFound
  nil
end

#find_by_object!(object) ⇒ Object



37
38
39
40
41
42
# File 'lib/paged_scopes/pages.rb', line 37

def find_by_object!(object)
  raise PageNotFound, "#{object.inspect} is not an ActiveRecord instance" unless object.is_a?(ActiveRecord::Base)
  find(1 + proxy.index_of(object) / per_page)
rescue ActiveRecord::RecordNotFound
  raise PageNotFound, "#{object.inspect} not found in scope"
end

#firstObject



70
71
72
# File 'lib/paged_scopes/pages.rb', line 70

def first
  find(1)
end

#from_params!(params) ⇒ Object



50
51
52
53
# File 'lib/paged_scopes/pages.rb', line 50

def from_params!(params)
  number = params[name.underscore.foreign_key.to_sym]
  number ? find(number) : nil
end

#lastObject



74
75
76
# File 'lib/paged_scopes/pages.rb', line 74

def last
  find(count)
end

#nameObject



27
28
29
# File 'lib/paged_scopes/pages.rb', line 27

def name
  proxy.page_name
end

#per_pageObject



23
24
25
# File 'lib/paged_scopes/pages.rb', line 23

def per_page
  proxy.per_page || raise(RuntimeError, "please specify per_page in your collection")
end

#reload!Object



91
92
93
# File 'lib/paged_scopes/pages.rb', line 91

def reload!
  unmemoize_all
end