Module: PagedScopes::Page
- Extended by:
- ActiveSupport::Memoizable
- Defined in:
- lib/paged_scopes/pages.rb
Defined Under Namespace
Modules: ClassMethods
Instance Attribute Summary collapse
-
#number ⇒ Object
readonly
Returns the value of attribute number.
-
#paginator ⇒ Object
readonly
Returns the value of attribute paginator.
Class Method Summary collapse
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #==(other) ⇒ Object
- #first? ⇒ Boolean
- #full? ⇒ Boolean
- #id ⇒ Object
- #initialize(number) ⇒ Object
- #inspect ⇒ Object
- #last? ⇒ Boolean
- #next ⇒ Object
- #offset(n) ⇒ Object
- #page_count ⇒ Object
- #page_scope ⇒ Object
- #previous ⇒ Object
- #reload! ⇒ Object
- #to_param ⇒ Object
Instance Attribute Details
#number ⇒ Object (readonly)
Returns the value of attribute number.
106 107 108 |
# File 'lib/paged_scopes/pages.rb', line 106 def number @number end |
#paginator ⇒ Object (readonly)
Returns the value of attribute paginator.
106 107 108 |
# File 'lib/paged_scopes/pages.rb', line 106 def paginator @paginator end |
Class Method Details
.included(base) ⇒ Object
13 14 15 |
# File 'lib/paged_scopes/pages.rb', line 13 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#<=>(other) ⇒ Object
136 137 138 |
# File 'lib/paged_scopes/pages.rb', line 136 def <=>(other) number <=> other.number end |
#==(other) ⇒ Object
140 141 142 |
# File 'lib/paged_scopes/pages.rb', line 140 def ==(other) other.is_a?(self.class) && number == other.number end |
#first? ⇒ Boolean
128 129 130 |
# File 'lib/paged_scopes/pages.rb', line 128 def first? number == 1 end |
#full? ⇒ Boolean
144 145 146 |
# File 'lib/paged_scopes/pages.rb', line 144 def full? !last? || page_scope.all.length == per_page # TODO: could improve this to calculate mathematically end |
#id ⇒ Object
152 153 154 |
# File 'lib/paged_scopes/pages.rb', line 152 def id number end |
#initialize(number) ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/paged_scopes/pages.rb', line 110 def initialize(number) unless number > 0 && number <= page_count raise PageNotFound.new("couldn't find page number #{number}", self.class.closest_to(number)) end @number = number @paginator = PagedScopes::Paginator.new(self) end |
#inspect ⇒ Object
170 171 172 |
# File 'lib/paged_scopes/pages.rb', line 170 def inspect "#<#{self.class.name}, for: #{proxy.name}, number: #{number}>" end |
#last? ⇒ Boolean
132 133 134 |
# File 'lib/paged_scopes/pages.rb', line 132 def last? number == page_count end |
#next ⇒ Object
160 161 162 |
# File 'lib/paged_scopes/pages.rb', line 160 def next self.class.find(number + 1) unless last? end |
#offset(n) ⇒ Object
164 165 166 167 168 |
# File 'lib/paged_scopes/pages.rb', line 164 def offset(n) self.class.find(number + n) rescue PageNotFound nil end |
#page_count ⇒ Object
124 125 126 |
# File 'lib/paged_scopes/pages.rb', line 124 def page_count self.class.count end |
#page_scope ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/paged_scopes/pages.rb', line 174 def page_scope if proxy_scoped?(:limit) subquery_sql = proxy.name.constantize.send(:construct_finder_sql, .merge(:select => "#{proxy.table_name}.#{proxy.primary_key}")) paged_conditions = "#{proxy.table_name}.#{proxy.primary_key} IN (#{subquery_sql})" = { :conditions => paged_conditions, :limit => per_page, :offset => (number - 1) * per_page } proxy.name.constantize.scoped(.except(:limit, :offset)).scoped() # can't exclude :conditions since it won't work for has_many :through associations (multiple identical records returned) else proxy.scoped(:limit => per_page, :offset => (number - 1) * per_page) end end |
#previous ⇒ Object
156 157 158 |
# File 'lib/paged_scopes/pages.rb', line 156 def previous self.class.find(number - 1) unless first? end |
#reload! ⇒ Object
118 119 120 121 122 |
# File 'lib/paged_scopes/pages.rb', line 118 def reload! self.class.reload! self.class.find(number) unmemoize_all end |
#to_param ⇒ Object
148 149 150 |
# File 'lib/paged_scopes/pages.rb', line 148 def to_param number.to_s end |