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

id [doc_id]

For selecting a single document by ID.

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

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).

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query = nil, &block) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



108
109
110
111
112
113
# File 'lib/ddr/index/query_builder.rb', line 108

def initialize(query = nil, &block)
  @query = query || Query.new
  if block_given?
    instance_eval &block
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (private)



185
186
187
188
189
190
191
# File 'lib/ddr/index/query_builder.rb', line 185

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.



106
107
108
# File 'lib/ddr/index/query_builder.rb', line 106

def query
  @query
end

Class Method Details

.build {|builder| ... } ⇒ Query

Builds a Query object

Yields:

  • (builder)

    a new QueryBuilder instance.

Returns:



97
98
99
100
101
102
103
104
# File 'lib/ddr/index/query_builder.rb', line 97

def self.build
  Deprecation.warn(self,
                   "`Ddr::Index::QueryBuilder.build` is deprecated and will be removed in ddr-models 3.0." \
                   " Use `Ddr::Index::QueryBuilder.new` instead.")
  builder = new
  yield builder
  builder.query
end

Instance Method Details

#asc(*fields) ⇒ QueryBuilder

Returns self.

Parameters:

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

Returns:



161
162
163
164
# File 'lib/ddr/index/query_builder.rb', line 161

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:



167
168
169
170
# File 'lib/ddr/index/query_builder.rb', line 167

def desc(*fields)
  query.sort += fields.map { |field| SortOrder.desc(field) }
  self
end

#field(*fields) ⇒ QueryBuilder Also known as: fields

Returns self.

Parameters:

Returns:



132
133
134
135
# File 'lib/ddr/index/query_builder.rb', line 132

def field(*fields)
  query.fields += fields.flatten.map { |f| FieldAttribute.coerce(f) }
  self
end

#filter(*filters) ⇒ QueryBuilder Also known as: filters

Parameters:

Returns:



124
125
126
127
# File 'lib/ddr/index/query_builder.rb', line 124

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

#id(pid) ⇒ QueryBuilder

Parameters:

  • pid (String)

Returns:



117
118
119
120
# File 'lib/ddr/index/query_builder.rb', line 117

def id(pid)
  q QueryClause.id(pid)
  limit 1
end

#limit(num) ⇒ QueryBuilder Also known as: rows

Returns self.

Parameters:

  • num (Integer)

Returns:



140
141
142
143
# File 'lib/ddr/index/query_builder.rb', line 140

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:



148
149
150
151
152
153
154
155
156
# File 'lib/ddr/index/query_builder.rb', line 148

def order_by(*orderings)
  unless orderings.first.is_a? Hash
    Deprecation.warn(QueryBuilder, "`order_by` will require a hash of orderings in ddr-models 3.0.")
    field, order = orderings
    return order_by(field => order)
  end
  query.sort += orderings.first.map { |field, order| SortOrder.new(field: field, order: order) }
  self
end

#q(query_clause) ⇒ QueryBuilder

Returns self.

Parameters:

Returns:



174
175
176
177
# File 'lib/ddr/index/query_builder.rb', line 174

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