Class: Sunspot::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/sunspot/field.rb

Overview

:nodoc:

Direct Known Subclasses

AttributeField, FulltextField, JoinField

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type, options = {}) ⇒ Field

Returns a new instance of Field.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
# File 'lib/sunspot/field.rb', line 11

def initialize(name, type, options = {}) #:nodoc
  @name, @type = name.to_sym, type
  @stored = !!options.delete(:stored)
  @more_like_this = !!options.delete(:more_like_this)
  @multiple ||= false
  set_indexed_name(options)
  raise ArgumentError, "Field of type #{type} cannot be used for more_like_this" unless type.accepts_more_like_this? or !@more_like_this
end

Instance Attribute Details

#boostObject (readonly)

Returns the value of attribute boost.



6
7
8
# File 'lib/sunspot/field.rb', line 6

def boost
  @boost
end

#indexed_nameObject (readonly)

Name with which this field is indexed internally. Based on public name and type or the :as option.



7
8
9
# File 'lib/sunspot/field.rb', line 7

def indexed_name
  @indexed_name
end

#nameObject

The public-facing name of the field



3
4
5
# File 'lib/sunspot/field.rb', line 3

def name
  @name
end

#referenceObject

Model class that the value of this field refers to



5
6
7
# File 'lib/sunspot/field.rb', line 5

def reference
  @reference
end

#typeObject

The Type of the field



4
5
6
# File 'lib/sunspot/field.rb', line 4

def type
  @type
end

Instance Method Details

#cast(value) ⇒ Object

Cast the value into the appropriate Ruby class for the field’s type

Parameters

value<String>

Solr’s representation of the value

Returns

Object

The cast value



58
59
60
# File 'lib/sunspot/field.rb', line 58

def cast(value)
  @type.cast(value)
end

#eql?(field) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


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

def eql?(field)
  field.is_a?(self.class) && indexed_name == field.indexed_name
end

#hashObject



107
108
109
# File 'lib/sunspot/field.rb', line 107

def hash
  indexed_name.hash
end

#joined?Boolean

Whether the field was joined from another model.

Returns

Boolean

True if this field was joined from another model

Returns:

  • (Boolean)


92
93
94
# File 'lib/sunspot/field.rb', line 92

def joined?
  !!@joined
end

#more_like_this?Boolean

Whether this field can be used for more_like_this queries. If true, the field is configured to store termVectors.

Returns

Boolean

True if this field can be used for more_like_this queries.

Returns:

  • (Boolean)


81
82
83
# File 'lib/sunspot/field.rb', line 81

def more_like_this?
  !!@more_like_this
end

#multiple?Boolean

Whether this field accepts multiple values.

Returns

Boolean

True if this field accepts multiple values.

Returns:

  • (Boolean)


69
70
71
# File 'lib/sunspot/field.rb', line 69

def multiple?
  !!@multiple
end

#stored?Boolean

Whether the field is stored or not.

Returns

Boolean

True if this field is a stored field

Returns:

  • (Boolean)


103
104
105
# File 'lib/sunspot/field.rb', line 103

def stored?
  !!@stored
end

#to_indexed(value) ⇒ Object

Convert a value to its representation for Solr indexing. This delegates to the #to_indexed method on the field’s type.

Parameters

value<Object>

Value to convert to Solr representation

Returns

String

Solr representation of the object

Raises

ArgumentError

the value is an array, but this field does not allow multiple values



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/sunspot/field.rb', line 36

def to_indexed(value)
  if value.is_a? Array
    if multiple?
      value.map { |val| to_indexed(val) }
    else
      raise ArgumentError, "#{name} is not a multiple-value field, so it cannot index values #{value.inspect}"
    end
  else
    @type.to_indexed(value)
  end
end