module Lucky::Paginator::BackendHelpers
Defined in:
lucky/paginator/backend_helpers.crlucky_avram/ext/lucky/paginator/backend_helpers.cr
Instance Method Summary
-
#paginate(query : Avram::Queryable(T), per_page : Int32 = paginator_per_page) : Tuple(Paginator, Avram::Queryable(T)) forall T
Call this in your actions to paginate an query.
-
#paginate_array(items : Array(T), per_page : Int32 = paginator_per_page) : Tuple(Paginator, Array(T)) forall T
Call this in your actions to paginate an array.
-
#paginator_page : Int32
Returns the page that was request, or
1 -
#paginator_per_page : Int32
The number of records to display per page.
Instance Method Detail
Call this in your actions to paginate an query.
This method will return a Lucky::Paginator object and the requested page
of records.
Examples
class Users::Index < BrowserAction
get "/users" do
# The 'UserQuery' will return just the records for the requested page
# because 'paginate' will add a 'limit' and 'offset' to the query.
pages, users = paginate(UserQuery.new)
render IndexPage, pages: pages, users: users
end
end
class Users::IndexPage < MainLayout
needs pages : Lucky::Paginator
needs users : UserQuery
def content
# Render 'users' like normal
mount Lucky::Paginator::SimpleNav, @pages
end
end
Call this in your actions to paginate an array.
This method will return a Lucky::Paginator object and the requested page
of items.
Examples
class ListItems::Index < BrowserAction
get "/items" do
# The 'Array' will just show items for the requested page
pages, items = paginate_array([1, 2, 3])
render IndexPage, pages: pages, items: items
end
end
class Users::IndexPage < MainLayout
needs pages : Lucky::Paginator
needs items : Array(Int32)
def content
# Render pagination links for the 'items' Array
mount Lucky::Paginator::SimpleNav, @pages
end
end
Returns the page that was request, or 1
By default this method looks for a page param. It can be given as a
query param, or in the body. If no page param is given the page will be 1.
You can override this method in your action in any way you'd like.
Example
abstract class ApiAction < Lucky::Action
include Lucky::Paginator::BackendHelpers
def paginator_page : Int32
# Will use the "Page" header or fallback to default if missing.
request.headers["Page"]? || super
end
end
The number of records to display per page. Defaults to 25
You can override this in your actions
Example
abstract class BrowserAction < Lucky::Action
include Lucky::Paginator::BackendHelpers
# Set to a new static value
def paginator_per_page : Int32
50 # defaults to 25
end
# Or you could allow setting the number from a param
def paginator_per_page : Int32
params.get?(:per_page).try(&.to_i) || 25
end
end