Class: Sunspot::Query::Restriction::Base

Inherits:
Object
  • Object
show all
Includes:
RSolr::Char, Filter
Defined in:
sunspot/lib/sunspot/query/restriction.rb

Overview

Subclasses of this class represent restrictions that can be applied to a Sunspot query. The Sunspot::DSL::Restriction class presents a builder API for instances of this class.

Implementations of this class must respond to #to_params and #to_negated_params. Instead of implementing those methods, they may choose to implement any of:

  • #to_positive_boolean_phrase, and optionally #to_negated_boolean_phrase

  • #to_solr_conditional

Direct Known Subclasses

AllOf, AnyOf, Between, EqualTo, GreaterThan, LessThan, StartingWith

Constant Summary

RESERVED_WORDS =
Set['AND', 'OR', 'NOT']

Instance Method Summary (collapse)

Methods included from Filter

#tag, #to_filter_query

Constructor Details

- (Base) initialize(negated, field, value)

A new instance of Base

Raises:

  • (ArgumentError)


45
46
47
48
# File 'sunspot/lib/sunspot/query/restriction.rb', line 45

def initialize(negated, field, value)
  raise ArgumentError.new("RFCTR") unless [true, false].include?(negated)
  @negated, @field, @value = negated, field, value
end

Instance Method Details

- (Object) negate

Return a new restriction that is the negated version of this one. It is used by disjunction denormalization.



119
120
121
# File 'sunspot/lib/sunspot/query/restriction.rb', line 119

def negate
  self.class.new(!@negated, @field, @value)
end

- (Boolean) negated?

Whether this restriction should be negated from its original meaning

Returns:

  • (Boolean)


111
112
113
# File 'sunspot/lib/sunspot/query/restriction.rb', line 111

def negated? #:nodoc:
  !!@negated
end

- (Object) to_boolean_phrase

Return the boolean phrase associated with this restriction object. Differentiates between positive and negated boolean phrases depending on whether this restriction is negated.



70
71
72
73
74
75
76
# File 'sunspot/lib/sunspot/query/restriction.rb', line 70

def to_boolean_phrase
  unless negated?
    to_positive_boolean_phrase
  else
    to_negated_boolean_phrase
  end
end

- (Object) to_negated_boolean_phrase

Boolean phrase representing this restriction in the negated. Subclasses may choose to implement this method, but it is not necessary, as the base implementation delegates to #to_positive_boolean_phrase.

Returns

String

Boolean phrase for restriction in the negated



104
105
106
# File 'sunspot/lib/sunspot/query/restriction.rb', line 104

def to_negated_boolean_phrase
  "-#{to_positive_boolean_phrase}"
end

- (Object) to_params

A hash representing this restriction in solr-ruby’s parameter format. All restriction implementations must respond to this method; however, the base implementation delegates to the #to_positive_boolean_phrase method, so subclasses may (and probably should) choose to implement that method instead.

Returns

Hash

Representation of this restriction as solr-ruby parameters



61
62
63
# File 'sunspot/lib/sunspot/query/restriction.rb', line 61

def to_params
  { :fq => [to_filter_query] }
end

- (Object) to_positive_boolean_phrase

Boolean phrase representing this restriction in the positive. Subclasses may choose to implement this method rather than #to_params; however, this method delegates to the abstract #to_solr_conditional method, which in most cases will be what subclasses will want to implement. #to_solr_conditional contains the boolean phrase representing the condition but leaves out the field name (see built-in implementations for examples)

Returns

String

Boolean phrase for restriction in the positive



91
92
93
# File 'sunspot/lib/sunspot/query/restriction.rb', line 91

def to_positive_boolean_phrase
  "#{escape(@field.indexed_name)}:#{to_solr_conditional}"
end