Class: Quo::CollectionBackedQuery
- Inherits:
-
Query
- Object
- Literal::Struct
- Query
- Quo::CollectionBackedQuery
- Defined in:
- lib/quo/collection_backed_query.rb,
sig/generated/quo/collection_backed_query.rbs
Overview
Query object backed by in-memory collections
Constant Summary
Constants inherited from Query
Class Method Summary collapse
Instance Method Summary collapse
- #collection ⇒ Object & Enumerable[untyped]
- #collection? ⇒ void
-
#configured_query ⇒ Object & Enumerable[untyped]
The configured query is the underlying query with paging.
-
#query ⇒ Object & Enumerable[untyped]
The default implementation of
queryjust callscollection, however you can also override this method to return an ActiveRecord::Relation or any other query-like object as usual in a Query object. - #relation? ⇒ void
-
#results ⇒ Quo::Results
: Quo::Results.
- #to_collection ⇒ void
- #underlying_query ⇒ Object & Enumerable[untyped]
- #validated_query ⇒ Object
Methods inherited from Query
compose, #copy, define_props_on_class, #inspect, inspect, #is_collection?, #merge, #next_page_query, #offset, #paged?, #previous_page_query, #quo_unwrap_unpaginated_query, #sanitised_page_size, #test_relation, #to_s, to_s, #transform, #transform?, #transformer, #unwrap, #unwrap_unpaginated
Class Method Details
.from(enumerable) ⇒ Quo::WrappedCollectionBackedQuery
35 36 37 |
# File 'lib/quo/collection_backed_query.rb', line 35 def self.from(enumerable) Quo::WrappedCollectionBackedQuery.new(wrapped: enumerable) end |
.wrap(data = nil, props: {}, &block) ⇒ void
This method returns an undefined value.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/quo/collection_backed_query.rb', line 14 def self.wrap(data = nil, props: {}, &block) raise ArgumentError, "either a query or a block must be provided" unless data || block if data && !(data.is_a?(::Enumerable) || data.is_a?(Quo::CollectionBackedQuery)) raise ArgumentError, "Quo::CollectionBackedQuery.wrap requires an Enumerable or a Quo::CollectionBackedQuery instance; got #{data.class}. " \ "Use Quo::RelationBackedQuery.wrap or Quo::RelationBackedQuery.from for ActiveRecord relations." end klass = Class.new(self) define_props_on_class(klass, props) if block klass.define_method(:collection, &block) else klass.define_method(:collection) { data } end klass end |
Instance Method Details
#collection ⇒ Object & Enumerable[untyped]
40 41 42 |
# File 'lib/quo/collection_backed_query.rb', line 40 def collection raise NotImplementedError, "Collection backed query objects must define a 'collection' method" end |
#collection? ⇒ void
This method returns an undefined value.
61 62 63 |
# File 'lib/quo/collection_backed_query.rb', line 61 def collection? true end |
#configured_query ⇒ Object & Enumerable[untyped]
The configured query is the underlying query with paging
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/quo/collection_backed_query.rb', line 82 def configured_query #: Object & Enumerable[untyped] q = return q unless paged? if q.respond_to?(:[]) q[offset, sanitised_page_size] else q end end |
#query ⇒ Object & Enumerable[untyped]
The default implementation of query just calls collection, however you can also
override this method to return an ActiveRecord::Relation or any other query-like object as usual in a Query object.
47 48 49 |
# File 'lib/quo/collection_backed_query.rb', line 47 def query collection end |
#relation? ⇒ void
This method returns an undefined value.
56 57 58 |
# File 'lib/quo/collection_backed_query.rb', line 56 def relation? false end |
#results ⇒ Quo::Results
: Quo::Results
51 52 53 |
# File 'lib/quo/collection_backed_query.rb', line 51 def results #: Quo::Results Quo::CollectionResults.new(self, transformer: transformer, total_count: @total_count) end |
#to_collection ⇒ void
This method returns an undefined value.
66 67 68 |
# File 'lib/quo/collection_backed_query.rb', line 66 def to_collection self end |
#underlying_query ⇒ Object & Enumerable[untyped]
77 78 79 |
# File 'lib/quo/collection_backed_query.rb', line 77 def validated_query end |
#validated_query ⇒ Object
72 73 74 |
# File 'lib/quo/collection_backed_query.rb', line 72 def validated_query query end |