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)
[View source]

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.

[View source]

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)
[View source]

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.

[View source]

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

[View source]

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

[View source]

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

[View source]

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