Module: Plushie::DataQuery
- Defined in:
- lib/plushie/data.rb
Overview
Query pipeline for in-memory record collections. Pure functions supporting filter, search, sort, group, and pagination.
All operations are applied in order: filter, search, sort, then paginate. Grouping is applied to the paginated results.
Class Method Summary collapse
-
.query(records, filter: nil, search: nil, sort: nil, group: nil, page: 1, page_size: 25) ⇒ Hash
Queries a list of records with optional filtering, searching, sorting, grouping, and pagination.
Class Method Details
.query(records, filter: nil, search: nil, sort: nil, group: nil, page: 1, page_size: 25) ⇒ Hash
Queries a list of records with optional filtering, searching, sorting, grouping, and pagination.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/plushie/data.rb', line 42 def self.query(records, filter: nil, search: nil, sort: nil, group: nil, page: 1, page_size: 25) result = records result = result.select(&filter) if filter result = apply_search(result, search) if search result = apply_sort(result, sort) if sort total = result.length offset = (page - 1) * page_size entries = result[offset, page_size] || [] groups = if group entries.group_by { |r| r[group] } end {entries: entries, total: total, page: page, page_size: page_size, groups: groups} end |