Class: Ddr::Index::QueryBuilder

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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

#queryObject (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.

Parameters:

  • fields (Array<Field, Symbol, String>)

Returns:



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.

Parameters:

  • fields (Array<Field, Symbol, String>)

Returns:



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.

Parameters:

Returns:



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

Parameters:

Returns:



120
121
122
123
# File 'lib/ddr/index/query_builder.rb', line 120

def filter(*filters)
  query.filters += filters
  self
end

#id(pid) ⇒ QueryBuilder

Parameters:

  • pid (String)

Returns:



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.

Parameters:

  • num (Integer)

Returns:



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.

Parameters:

  • orderings (Hash<Field, String>)

Returns:



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.

Parameters:

Returns:



165
166
167
168
# File 'lib/ddr/index/query_builder.rb', line 165

def q(query_clause)
  query.q = query_clause
  self
end