Class: Sunspot::Session

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

Overview

A Sunspot session encapsulates a connection to Solr and a set of configuration choices. Though users of Sunspot may manually instantiate Session objects, in the general case it’s easier to use the singleton stored in the Sunspot module. Since the Sunspot module provides all of the instance methods of Session as class methods, they are not documented again here.

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = Configuration.build, connection = nil) {|@config| ... } ⇒ Session

Sessions are initialized with a Sunspot configuration and a Solr connection. Usually you will want to stick with the default arguments when instantiating your own sessions.

Yields:



32
33
34
35
36
37
# File 'lib/sunspot/session.rb', line 32

def initialize(config = Configuration.build, connection = nil)
  @config = config
  yield(@config) if block_given?
  @connection = connection
  @updates = 0
end

Class Attribute Details

.connection_classObject

For testing purposes



17
18
19
# File 'lib/sunspot/session.rb', line 17

def connection_class #:nodoc:
  @connection_class ||= RSolr
end

Instance Attribute Details

#configObject (readonly)

Sunspot::Configuration object for this session



25
26
27
# File 'lib/sunspot/session.rb', line 25

def config
  @config
end

Instance Method Details

#batchObject

See Sunspot.batch



170
171
172
173
174
# File 'lib/sunspot/session.rb', line 170

def batch
  indexer.start_batch
  yield
  indexer.flush_batch
end

#commitObject

See Sunspot.commit



84
85
86
87
# File 'lib/sunspot/session.rb', line 84

def commit
  @updates = 0
  connection.commit
end

#commit_if_dirtyObject

See Sunspot.commit_if_dirty



163
164
165
# File 'lib/sunspot/session.rb', line 163

def commit_if_dirty
  commit if dirty?
end

#dirty?Boolean

See Sunspot.dirty?

Returns:

  • (Boolean)


156
157
158
# File 'lib/sunspot/session.rb', line 156

def dirty?
  @updates > 0
end

#index(*objects) ⇒ Object

See Sunspot.index



67
68
69
70
71
# File 'lib/sunspot/session.rb', line 67

def index(*objects)
  objects.flatten!
  @updates += objects.length
  indexer.add(objects)
end

#index!(*objects) ⇒ Object

See Sunspot.index!



76
77
78
79
# File 'lib/sunspot/session.rb', line 76

def index!(*objects)
  index(*objects)
  commit
end

#new_search(*types) ⇒ Object

See Sunspot.new_search



42
43
44
45
46
47
48
49
50
51
# File 'lib/sunspot/session.rb', line 42

def new_search(*types)
  types.flatten!
  setup =
    if types.length == 1
      Setup.for(types.first)
    else
      CompositeSetup.for(types)
      end
  Search.new(connection, setup, Query::Query.new(types, setup, @config))
end

#remove(*objects) ⇒ Object

See Sunspot.remove



92
93
94
95
96
97
98
# File 'lib/sunspot/session.rb', line 92

def remove(*objects)
  objects.flatten!
  @updates += objects.length
  for object in objects
    indexer.remove(object)
  end
end

#remove!(*objects) ⇒ Object

See Sunspot.remove!



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

def remove!(*objects)
  remove(*objects)
  commit
end

#remove_all(*classes) ⇒ Object

See Sunspot.remove_all



132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/sunspot/session.rb', line 132

def remove_all(*classes)
  classes.flatten!
  if classes.empty?
    @updates += 1
    Indexer.remove_all(connection)
  else
    @updates += classes.length
    for clazz in classes
      indexer.remove_all(clazz)
    end
  end
end

#remove_all!(*classes) ⇒ Object

See Sunspot.remove_all!



148
149
150
151
# File 'lib/sunspot/session.rb', line 148

def remove_all!(*classes)
  remove_all(*classes)
  commit
end

#remove_by_id(clazz, id) ⇒ Object

See Sunspot.remove_by_id



111
112
113
114
115
116
117
118
119
# File 'lib/sunspot/session.rb', line 111

def remove_by_id(clazz, id)
  class_name =
    if clazz.is_a?(Class)
      clazz.name
    else
      clazz.to_s
    end
  indexer.remove_by_id(class_name, id)
end

#remove_by_id!(clazz, id) ⇒ Object

See Sunspot.remove_by_id!



124
125
126
127
# File 'lib/sunspot/session.rb', line 124

def remove_by_id!(clazz, id)
  remove_by_id(clazz, id)
  commit
end

#search(*types, &block) ⇒ Object

See Sunspot.search



56
57
58
59
60
61
62
# File 'lib/sunspot/session.rb', line 56

def search(*types, &block)
  options = types.last.is_a?(Hash) ? types.pop : {}
  search = new_search(*types)
  search.build(&block) if block
  search.query.options = options
  search.execute!
end