Class: Ddr::Index::QueryBuilder
- Inherits:
-
Object
- Object
- Ddr::Index::QueryBuilder
- Defined in:
- lib/ddr/index/query_builder.rb
Overview
QueryBuilder - Provides a DSL for building a Query.
Note: Where a method receives a [field] parameter, the parameter value is coerced to a Field instance. See FieldAttribute#coerce for details.
*** DSL METHODS ***
absent [field]
Adds a filter selecting documents where the field is not present (no values).
asc [field], …
Adds ascending orderings by the fields specified.
See also: desc, order_by
before [field], [date_time]
Adds a filter selecting documents where the field has a date/time before
(earlier than) the value.
before_days [field], [int]
Adds a filter selecting documents where the field has a date/time the
specified number of days before today (now) or earlier.
desc [field], …
Adds descending orderings by the fields specified.
See also: asc, order_by
filter [filter1], …
Adds filters to the query.
Aliased as: filters
filters [filter], …
Alias for: filter
field [field1], …
Adds fields to result documents.
Note that all fields are returned when none is specified.
Aliased as: fields
fields [field], …
Alias for: field
id [doc_id]
For selecting a single document by ID.
join [from: field1, to: field2, where: condition]
Adds a Solr join clause (see https://wiki.apache.org/solr/Join)
limit [int]
Limits the number of documents returned by the query.
Aliased as: rows
model [model_name], …
Adds a filter selecting document where ActiveFedora model equals value
or one of the values.
negative [field], [value]
Adds a filter selecting document where field does not have the value.
order_by [=> order, …], …
Adds ordering(s) to the query.
Aliased as: sort
present [field]
Adds a filter selecting document where the field has any value.
q [query_clause]
Sets a query clause for the `q` parameter.
raw [clause1], …
Adds a filter of "raw" query clauses (i.e., pre-constructed).
regexp [field], [regexp]
Adds a filter selecting documents where the field has a value
matching the regular expression.
Slashes (/) in the regexp will be escaped as required by Solr.
rows [int]
Alias for: limit
sort [=> order, …]
Alias for: order_by
term [=> value, …]
Adds a filter of "term" query clauses for the fields and values.
where [=> value, …]
Adds a filter of "standard" query clauses.
Values will be escaped when the filter is serialized.
If a hash value is an array, that query clause will select documents
where the field matches any array entry.
Instance Attribute Summary collapse
-
#query ⇒ Object
readonly
Returns the value of attribute query.
Instance Method Summary collapse
-
#asc(*fields) ⇒ QueryBuilder
Self.
-
#desc(*fields) ⇒ QueryBuilder
Self.
-
#field(*fields) ⇒ QueryBuilder
(also: #fields)
Self.
- #filter(*filters) ⇒ QueryBuilder (also: #filters)
- #id(pid) ⇒ QueryBuilder
-
#initialize(*args, &block) ⇒ QueryBuilder
constructor
A new instance of QueryBuilder.
-
#limit(num) ⇒ QueryBuilder
(also: #rows)
Self.
-
#order_by(*orderings) ⇒ QueryBuilder
(also: #sort)
Self.
-
#q(query_clause) ⇒ QueryBuilder
Self.
Constructor Details
#initialize(*args, &block) ⇒ QueryBuilder
Returns a new instance of QueryBuilder.
104 105 106 107 108 109 |
# File 'lib/ddr/index/query_builder.rb', line 104 def initialize(*args, &block) @query = args.first.is_a?(Query) ? args.shift : Query.new if block_given? instance_exec(*args, &block) end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
176 177 178 179 180 181 182 |
# File 'lib/ddr/index/query_builder.rb', line 176 def method_missing(name, *args, &block) if respond_to?(name) filter Filter.send(name, *args) else super end end |
Instance Attribute Details
#query ⇒ Object (readonly)
Returns the value of attribute query.
102 103 104 |
# File 'lib/ddr/index/query_builder.rb', line 102 def query @query end |
Instance Method Details
#asc(*fields) ⇒ QueryBuilder
Returns self.
152 153 154 155 |
# File 'lib/ddr/index/query_builder.rb', line 152 def asc(*fields) query.sort += fields.map { |field| SortOrder.asc(field) } self end |
#desc(*fields) ⇒ QueryBuilder
Returns self.
158 159 160 161 |
# File 'lib/ddr/index/query_builder.rb', line 158 def desc(*fields) query.sort += fields.map { |field| SortOrder.desc(field) } self end |
#field(*fields) ⇒ QueryBuilder Also known as: fields
Returns self.
128 129 130 131 |
# File 'lib/ddr/index/query_builder.rb', line 128 def field(*fields) query.fields += fields.flatten.map { |f| FieldAttribute.coerce(f) } self end |
#filter(*filters) ⇒ QueryBuilder Also known as: filters
120 121 122 123 |
# File 'lib/ddr/index/query_builder.rb', line 120 def filter(*filters) query.filters += filters self end |
#id(pid) ⇒ QueryBuilder
113 114 115 116 |
# File 'lib/ddr/index/query_builder.rb', line 113 def id(pid) q QueryClause.id(pid) limit 1 end |
#limit(num) ⇒ QueryBuilder Also known as: rows
Returns self.
136 137 138 139 |
# File 'lib/ddr/index/query_builder.rb', line 136 def limit(num) query.rows = num.to_i self end |
#order_by(*orderings) ⇒ QueryBuilder Also known as: sort
Returns self.
144 145 146 147 |
# File 'lib/ddr/index/query_builder.rb', line 144 def order_by(*orderings) query.sort += orderings.first.map { |field, order| SortOrder.new(field: field, order: order) } self end |
#q(query_clause) ⇒ QueryBuilder
Returns self.
165 166 167 168 |
# File 'lib/ddr/index/query_builder.rb', line 165 def q(query_clause) query.q = query_clause self end |