diff --git a/modules/node/handler/cms_node_pagination_builder.e b/modules/node/handler/cms_node_pagination_builder.e new file mode 100644 index 0000000..5fb641a --- /dev/null +++ b/modules/node/handler/cms_node_pagination_builder.e @@ -0,0 +1,44 @@ +note + description: "Paginator builder for CMS nodes." + date: "$Date$" + revision: "$Revision$" + +class + CMS_NODE_PAGINATION_BUILDER + +inherit + + CMS_PAGINATION_BUILDER [CMS_NODE] + + CMS_NODE_HANDLER + redefine + make + end +create + make + +feature {NONE} -- Initialization + + make (a_api: CMS_API; a_module_api: CMS_NODE_API) + -- Create an object. + do + Precursor (a_api, a_module_api) + limit := 5 + offset := 0 + ensure then + limit_set: limit = 5 + offset_set: offset = 0 + end + +feature -- Pager + + list: ITERABLE [CMS_NODE] + -- . + do + --NOTE: the current implementation does not use + -- order by and ordering. + create {ARRAYED_LIST [CMS_NODE]} Result.make (0) + Result := node_api.recent_nodes (offset.as_integer_32, limit.as_integer_32) + end + +end diff --git a/modules/node/handler/cms_pagination_builder.e b/modules/node/handler/cms_pagination_builder.e new file mode 100644 index 0000000..cd9d20f --- /dev/null +++ b/modules/node/handler/cms_pagination_builder.e @@ -0,0 +1,67 @@ +note + description: "Generic Pagination Builder Interface" + date: "$Date$" + revision: "$Revision$" + +deferred class + CMS_PAGINATION_BUILDER [G] + +feature -- Access + + set_limit (a_limit: NATURAL) + -- Set limit with `a_limit'. + do + limit := a_limit + ensure + limit_set: limit = a_limit + end + + set_offset (a_offset: NATURAL) + -- Set offset with `a_offset'. + do + offset := a_offset + ensure + limit_set: offset = a_offset + end + + set_ascending_order (a_field: READABLE_STRING_32) + -- Pager with a order_by `a_field' asc. + do + order_by := a_field + order_ascending := True + ensure + order_by_set: attached order_by as l_order_by implies l_order_by = a_field + asc_true: order_ascending + end + + set_descending_order (a_field: READABLE_STRING_32) + -- Pager with a order_by `a_field' desc. + do + order_by := a_field + order_ascending := False + ensure + order_by_set: attached order_by as l_order_by implies l_order_by = a_field + asc_fasle: not order_ascending + end + +feature -- Pager + + list: ITERABLE[G] + -- Iterable of G with filters. + deferred + end + +feature -- Access + + limit: NATURAL + -- Number of rows per page. + + offset: NATURAL + -- rows starting from the next row to the given OFFSET. + + order_by: detachable STRING + -- field to order by + + order_ascending: BOOLEAN + -- is ascending ordering? +end