Module: PagedScopes::Page::ClassMethods
- Extended by:
- ActiveSupport::Memoizable
- Includes:
- Enumerable
- Defined in:
- lib/paged_scopes/pages.rb
Instance Attribute Summary collapse
-
#proxy ⇒ Object
Returns the value of attribute proxy.
Instance Method Summary collapse
- #all ⇒ Object
- #closest_to(number) ⇒ Object
- #count ⇒ Object
- #each(&block) ⇒ Object
- #find(id) ⇒ Object
- #find_by_object(object) ⇒ Object
- #find_by_object!(object) ⇒ Object
- #first ⇒ Object
- #from_params!(params) ⇒ Object
- #last ⇒ Object
- #name ⇒ Object
- #per_page ⇒ Object
- #reload! ⇒ Object
Instance Attribute Details
#proxy ⇒ Object
Returns the value of attribute proxy.
21 22 23 |
# File 'lib/paged_scopes/pages.rb', line 21 def proxy @proxy end |
Instance Method Details
#all ⇒ Object
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 |
#count ⇒ Object
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) = { :distinct => true, :limit => 1 } .merge!(:offset => 0) if proxy_scoped?(:offset) proxy_count = proxy.count("#{proxy.table_name}.#{proxy.primary_key}", ) proxy_count -= [:offset] if proxy_scoped?(:offset) [ proxy_count, [: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 |
#first ⇒ Object
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 |
#last ⇒ Object
74 75 76 |
# File 'lib/paged_scopes/pages.rb', line 74 def last find(count) end |
#name ⇒ Object
27 28 29 |
# File 'lib/paged_scopes/pages.rb', line 27 def name proxy.page_name end |
#per_page ⇒ Object
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 |