sunspot 2.0.0.pre.120417 → 2.0.0.pre.120720

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -1,5 +1,7 @@
1
1
  sunspot-solr.pid
2
2
  *.swp
3
+ *.swo
4
+ *~
3
5
  coverage
4
6
  pkg
5
7
  /doc
@@ -12,6 +12,8 @@
12
12
  * Adds `Retry5xxSessionProxy` to retry requests when an internal server error
13
13
  occurs (Nick Zadrozny)
14
14
  * Adds support for range queries (Jan Ulrich)
15
+ * Allows custom field names specified with :as to be symbols (David Oliver)
16
+ * Add field exclusion when faceting (Cuong Hoang)
15
17
 
16
18
  == 1.3.0 2011-11-26
17
19
  * Requests to Solr use HTTP POST verb by default to avoid issues when the query string grows too large for GET (Johan Van Ryseghem)
@@ -79,7 +79,11 @@ module Sunspot
79
79
  # wraps the given instance
80
80
  #
81
81
  def adapt(instance) #:nodoc:
82
- self.for(instance.class).new(instance)
82
+ @known_adapters ||= {}
83
+ clazz = instance.class
84
+ adapter = @known_adapters[clazz.name.to_sym] || self.for(clazz)
85
+ @known_adapters[clazz.name.to_sym] ||= adapter
86
+ adapter.new(instance)
83
87
  end
84
88
 
85
89
  # Register an instance adapter for a set of classes. When searching for
@@ -249,15 +249,9 @@ module Sunspot
249
249
  "wrong number of arguments (#{field_names.length} for 1)"
250
250
  )
251
251
  end
252
- if options.has_key?(:exclude)
253
- raise(
254
- ArgumentError,
255
- "can't use :exclude with query facets"
256
- )
257
- end
258
252
  search_facet = @search.add_query_facet(field_names.first, options)
259
253
  Sunspot::Util.instance_eval_or_call(
260
- QueryFacet.new(@query, @setup, search_facet),
254
+ QueryFacet.new(@query, @setup, search_facet, options),
261
255
  &block
262
256
  )
263
257
  elsif options[:only]
@@ -5,8 +5,8 @@ module Sunspot
5
5
  # method.
6
6
  #
7
7
  class QueryFacet
8
- def initialize(query, setup, facet) #:nodoc:
9
- @query, @setup, @facet = query, setup, facet
8
+ def initialize(query, setup, facet, options) #:nodoc:
9
+ @query, @setup, @facet, @options = query, setup, facet, options
10
10
  end
11
11
 
12
12
  #
@@ -24,7 +24,7 @@ module Sunspot
24
24
  # An object used to identify this facet row in the results.
25
25
  #
26
26
  def row(label, &block)
27
- query_facet = Sunspot::Query::QueryFacet.new
27
+ query_facet = Sunspot::Query::QueryFacet.new(@options)
28
28
  Sunspot::Util.instance_eval_or_call(
29
29
  Scope.new(@query.add_query_facet(query_facet), @setup),
30
30
  &block
@@ -104,7 +104,7 @@ module Sunspot
104
104
  def set_indexed_name(options)
105
105
  @indexed_name =
106
106
  if options[:as]
107
- options.delete(:as)
107
+ options.delete(:as).to_s
108
108
  else
109
109
  "#{@type.indexed_name(@name).to_s}#{'m' if @multiple }#{'s' if @stored}#{'v' if more_like_this?}"
110
110
  end
@@ -1,6 +1,17 @@
1
1
  module Sunspot
2
2
  module Query
3
3
  class QueryFacet < Connective::Conjunction
4
+
5
+ def initialize(options = {}, negated = false)
6
+ if exclude_filters = options[:exclude]
7
+ @exclude_tag = Util.Array(exclude_filters).map do |filter|
8
+ filter.tag
9
+ end.join(',')
10
+ end
11
+ super(negated)
12
+ end
13
+
14
+
4
15
  def to_params
5
16
  if @components.empty?
6
17
  {}
@@ -11,6 +22,32 @@ module Sunspot
11
22
  }
12
23
  end
13
24
  end
25
+
26
+ def to_boolean_phrase
27
+ "#{to_local_params}#{super}"
28
+ end
29
+
30
+ private
31
+
32
+ def local_params
33
+ @local_params ||=
34
+ begin
35
+ local_params = {}
36
+ local_params[:ex] = @exclude_tag if @exclude_tag
37
+ local_params
38
+ end
39
+ end
40
+
41
+ def to_local_params
42
+ if local_params.empty?
43
+ ''
44
+ else
45
+ pairs = local_params.map do |key, value|
46
+ "#{key}=#{value}"
47
+ end
48
+ "{!#{pairs.join(' ')}}"
49
+ end
50
+ end
14
51
  end
15
52
  end
16
53
  end
@@ -184,6 +184,23 @@ module Sunspot
184
184
  solr_value
185
185
  end
186
186
 
187
+ def to_solr_conditional
188
+ "{* TO #{solr_value}}"
189
+ end
190
+ end
191
+
192
+ #
193
+ # Results must have field with value less or equal to than given value
194
+ #
195
+ class LessThanOrEqualTo < Base
196
+ private
197
+
198
+ def solr_value(value = @value)
199
+ solr_value = super
200
+ solr_value = "\"#{solr_value}\"" if solr_value.index(' ')
201
+ solr_value
202
+ end
203
+
187
204
  def to_solr_conditional
188
205
  "[* TO #{solr_value}]"
189
206
  end
@@ -201,6 +218,23 @@ module Sunspot
201
218
  solr_value
202
219
  end
203
220
 
221
+ def to_solr_conditional
222
+ "{#{solr_value} TO *}"
223
+ end
224
+ end
225
+
226
+ #
227
+ # Results must have field with value greater than or equal to given value
228
+ #
229
+ class GreaterThanOrEqualTo < Base
230
+ private
231
+
232
+ def solr_value(value = @value)
233
+ solr_value = super
234
+ solr_value = "\"#{solr_value}\"" if solr_value.index(' ')
235
+ solr_value
236
+ end
237
+
204
238
  def to_solr_conditional
205
239
  "[#{solr_value} TO *]"
206
240
  end
@@ -1,3 +1,5 @@
1
+ require 'sunspot/search/paginated_collection'
2
+
1
3
  module Sunspot
2
4
  module Search
3
5
  class FieldGroup
@@ -9,9 +11,11 @@ module Sunspot
9
11
  @groups ||=
10
12
  begin
11
13
  if solr_response
12
- solr_response['groups'].map do |group|
13
- Group.new(group['groupValue'], group['doclist'], @search)
14
- end
14
+ paginate_collection(
15
+ solr_response['groups'].map do |group|
16
+ Group.new(group['groupValue'], group['doclist'], @search)
17
+ end
18
+ )
15
19
  end
16
20
  end
17
21
  end
@@ -33,6 +37,10 @@ module Sunspot
33
37
  def solr_response
34
38
  @search.group_response[@field.indexed_name.to_s]
35
39
  end
40
+
41
+ def paginate_collection(collection)
42
+ PaginatedCollection.new(collection, @search.query.page, @search.query.per_page, total)
43
+ end
36
44
  end
37
45
  end
38
46
  end
@@ -1,3 +1,3 @@
1
1
  module Sunspot
2
- VERSION = '2.0.0.pre.120417'
2
+ VERSION = '2.0.0.pre.120720'
3
3
  end
@@ -23,7 +23,7 @@ shared_examples_for "query with connective scope" do
23
23
  end
24
24
  connection.should have_last_search_including(
25
25
  :fq,
26
- '(blog_id_i:2 OR (category_ids_im:1 AND average_rating_ft:[3\.0 TO *]))'
26
+ '(blog_id_i:2 OR (category_ids_im:1 AND average_rating_ft:{3\.0 TO *}))'
27
27
  )
28
28
  end
29
29
 
@@ -38,7 +38,7 @@ shared_examples_for "query with connective scope" do
38
38
  end
39
39
  end
40
40
  connection.should have_last_search_including(
41
- :fq, '(category_ids_im:1 OR (-average_rating_ft:[3\.0 TO *] AND blog_id_i:1))'
41
+ :fq, '(category_ids_im:1 OR (-average_rating_ft:{3\.0 TO *} AND blog_id_i:1))'
42
42
  )
43
43
  end
44
44
 
@@ -62,7 +62,7 @@ shared_examples_for "query with connective scope" do
62
62
  end
63
63
  end
64
64
  connection.should have_last_search_including(
65
- :fq, '-(-category_ids_im:1 AND average_rating_ft:[3\.0 TO *])'
65
+ :fq, '-(-category_ids_im:1 AND average_rating_ft:{3\.0 TO *})'
66
66
  )
67
67
  end
68
68
 
@@ -149,7 +149,7 @@ shared_examples_for "query with connective scope" do
149
149
  end
150
150
  end
151
151
  connection.should have_last_search_including(
152
- :fq, '-(average_rating_ft:[* TO *] AND -average_rating_ft:[3\.0 TO *])'
152
+ :fq, '-(average_rating_ft:[* TO *] AND -average_rating_ft:{3\.0 TO *})'
153
153
  )
154
154
  end
155
155
 
@@ -162,7 +162,7 @@ shared_examples_for "query with connective scope" do
162
162
  end
163
163
  end
164
164
  connection.should have_last_search_including(
165
- :fq, "(id:(Post\\ #{post.id}) OR average_rating_ft:[3\\.0 TO *])"
165
+ :fq, "(id:(Post\\ #{post.id}) OR average_rating_ft:{3\\.0 TO *})"
166
166
  )
167
167
  end
168
168
 
@@ -14,7 +14,7 @@ shared_examples_for "query with dynamic field support" do
14
14
  with(:test).less_than(1)
15
15
  end
16
16
  end
17
- connection.should have_last_search_including(:fq, 'custom_integer\:test_i:[* TO 1]')
17
+ connection.should have_last_search_including(:fq, 'custom_integer\:test_i:{* TO 1}')
18
18
  end
19
19
 
20
20
  it 'restricts by dynamic float field with between restriction' do
@@ -179,17 +179,6 @@ shared_examples_for "facetable query" do
179
179
  connection.should have_last_search_with(:"f.blog.facet.sort" => 'true')
180
180
  end
181
181
 
182
- it 'raises an ArgumentError if exclusion attempted on a query facet' do
183
- lambda do
184
- search do
185
- blog_filter = with(:blog_id, 1)
186
- facet(:bad, :exclude => blog_filter) do
187
- row(:bogus) { with(:blog_id, 1) }
188
- end
189
- end
190
- end.should raise_error(ArgumentError)
191
- end
192
-
193
182
  it 'raises an ArgumentError if exclusion attempted on a restricted field facet' do
194
183
  lambda do
195
184
  search do
@@ -426,6 +415,58 @@ shared_examples_for "facetable query" do
426
415
  connection.searches.last[:"facet.query"].should be_a(String)
427
416
  end
428
417
 
418
+ it 'tags and excludes a scope filter in a query facet' do
419
+ search do
420
+ blog_filter = with(:blog_id, 1)
421
+ facet:foo, :exclude => blog_filter do
422
+ row(:bar) do
423
+ with(:category_ids, 1)
424
+ end
425
+ end
426
+ end
427
+ filter_tag = get_filter_tag('blog_id_i:1')
428
+ connection.should have_last_search_with(
429
+ :"facet.query" => "{!ex=#{filter_tag}}category_ids_im:1"
430
+ )
431
+ end
432
+
433
+ it 'tags and excludes a disjunction filter in a query facet' do
434
+ search do
435
+ blog_filter = any_of do
436
+ with(:blog_id, 1)
437
+ with(:blog_id, 2)
438
+ end
439
+ facet:foo, :exclude => blog_filter do
440
+ row(:bar) do
441
+ with(:category_ids, 1)
442
+ end
443
+ end
444
+ end
445
+ filter_tag = get_filter_tag('(blog_id_i:1 OR blog_id_i:2)')
446
+ connection.should have_last_search_with(
447
+ :"facet.query" => "{!ex=#{filter_tag}}category_ids_im:1"
448
+ )
449
+ end
450
+
451
+ it 'tags and excludes multiple filters in a query facet' do
452
+ search do
453
+ blog_filter = with(:blog_id, 1)
454
+ category_filter = with(:category_ids, 2)
455
+ facet:foo, :exclude => [blog_filter, category_filter] do
456
+ row(:bar) do
457
+ with(:category_ids, 1)
458
+ end
459
+ end
460
+ end
461
+ filter_tags = %w(blog_id_i:1 category_ids_im:2).map do |phrase|
462
+ get_filter_tag(phrase)
463
+ end.join(',')
464
+ connection.should have_last_search_with(
465
+ :"facet.query" => "{!ex=#{filter_tags}}category_ids_im:1"
466
+ )
467
+ end
468
+
469
+
429
470
  it 'ignores facet query with only empty rows' do
430
471
  search do
431
472
  facet :foo do
@@ -224,7 +224,7 @@ shared_examples_for 'fulltext query' do
224
224
  end
225
225
  end
226
226
  end
227
- connection.should have_last_search_with(:bq => ['average_rating_ft:[2\.0 TO *]^2.0'])
227
+ connection.should have_last_search_with(:bq => ['average_rating_ft:{2\.0 TO *}^2.0'])
228
228
  end
229
229
 
230
230
  it 'creates multiple boost queries' do
@@ -240,7 +240,7 @@ shared_examples_for 'fulltext query' do
240
240
  end
241
241
  connection.should have_last_search_with(
242
242
  :bq => [
243
- 'average_rating_ft:[2\.0 TO *]^2.0',
243
+ 'average_rating_ft:{2\.0 TO *}^2.0',
244
244
  'featured_bs:true^1.5'
245
245
  ]
246
246
  )
@@ -46,21 +46,21 @@ shared_examples_for "scoped query" do
46
46
  search do
47
47
  with(:average_rating).less_than 3.0
48
48
  end
49
- connection.should have_last_search_including(:fq, 'average_rating_ft:[* TO 3\.0]')
49
+ connection.should have_last_search_including(:fq, 'average_rating_ft:{* TO 3\.0}')
50
50
  end
51
51
 
52
52
  it 'should quote string with space in a less than match' do
53
53
  search do
54
54
  with(:title).less_than('test value')
55
55
  end
56
- connection.should have_last_search_including(:fq, 'title_ss:[* TO "test\ value"]')
56
+ connection.should have_last_search_including(:fq, 'title_ss:{* TO "test\ value"}')
57
57
  end
58
58
 
59
59
  it 'scopes by greater than match with float' do
60
60
  search do
61
61
  with(:average_rating).greater_than 3.0
62
62
  end
63
- connection.should have_last_search_including(:fq, 'average_rating_ft:[3\.0 TO *]')
63
+ connection.should have_last_search_including(:fq, 'average_rating_ft:{3\.0 TO *}')
64
64
  end
65
65
 
66
66
  it 'scopes by short-form between match with integers' do
@@ -116,14 +116,14 @@ shared_examples_for "scoped query" do
116
116
  search do
117
117
  without(:average_rating).less_than 3.0
118
118
  end
119
- connection.should have_last_search_including(:fq, '-average_rating_ft:[* TO 3\.0]')
119
+ connection.should have_last_search_including(:fq, '-average_rating_ft:{* TO 3\.0}')
120
120
  end
121
121
 
122
122
  it 'scopes by not greater than match with float' do
123
123
  search do
124
124
  without(:average_rating).greater_than 3.0
125
125
  end
126
- connection.should have_last_search_including(:fq, '-average_rating_ft:[3\.0 TO *]')
126
+ connection.should have_last_search_including(:fq, '-average_rating_ft:{3\.0 TO *}')
127
127
  end
128
128
 
129
129
  it 'scopes by not between match with shorthand' do
@@ -166,24 +166,70 @@ describe 'search faceting' do
166
166
  )
167
167
  end
168
168
 
169
- it 'should exclude filter from faceting' do
170
- search = Sunspot.search(Post) do
171
- with(:blog_id, 1)
172
- category_filter = with(:category_ids, 1)
173
- facet(:category_ids, :exclude => category_filter)
169
+ context 'field faceting' do
170
+ it 'should exclude filter from faceting' do
171
+ search = Sunspot.search(Post) do
172
+ with(:blog_id, 1)
173
+ category_filter = with(:category_ids, 1)
174
+ facet(:category_ids, :exclude => category_filter)
175
+ end
176
+ search.facet(:category_ids).rows.map { |row| row.value }.to_set.should == Set[1, 2]
177
+ end
178
+
179
+ it 'should use facet keys to facet more than once with different exclusions' do
180
+ search = Sunspot.search(Post) do
181
+ with(:blog_id, 1)
182
+ category_filter = with(:category_ids, 1)
183
+ facet(:category_ids)
184
+ facet(:category_ids, :exclude => category_filter, :name => :all_category_ids)
185
+ end
186
+ search.facet(:category_ids).rows.map { |row| row.value }.should == [1]
187
+ search.facet(:all_category_ids).rows.map { |row| row.value }.to_set.should == Set[1, 2]
174
188
  end
175
- search.facet(:category_ids).rows.map { |row| row.value }.to_set.should == Set[1, 2]
176
189
  end
177
190
 
178
- it 'should use facet keys to facet more than once with different exclusions' do
179
- search = Sunspot.search(Post) do
180
- with(:blog_id, 1)
181
- category_filter = with(:category_ids, 1)
182
- facet(:category_ids)
183
- facet(:category_ids, :exclude => category_filter, :name => :all_category_ids)
191
+ context 'query faceting' do
192
+ it 'should exclude filter from faceting' do
193
+ search = Sunspot.search(Post) do
194
+ with(:blog_id, 1)
195
+ category_filter = with(:category_ids, 1)
196
+ facet :category_ids, :exclude => category_filter do
197
+ row(:category_1) do
198
+ with(:category_ids, 1)
199
+ end
200
+ row(:category_2) do
201
+ with(:category_ids, 2)
202
+ end
203
+ end
204
+ end
205
+ search.facet(:category_ids).rows.map { |row| [row.value, row.count] }.to_set.should == Set[[:category_1, 1], [:category_2, 1]]
206
+ end
207
+
208
+ it 'should use facet keys to facet more than once with different exclusions' do
209
+ search = Sunspot.search(Post) do
210
+ with(:blog_id, 1)
211
+ category_filter = with(:category_ids, 1)
212
+ facet :category_ids do
213
+ row(:category_1) do
214
+ with(:category_ids, 1)
215
+ end
216
+ row(:category_2) do
217
+ with(:category_ids, 2)
218
+ end
219
+ end
220
+
221
+ facet :all_category_ids, :exclude => category_filter do
222
+ row(:category_1) do
223
+ with(:category_ids, 1)
224
+ end
225
+ row(:category_2) do
226
+ with(:category_ids, 2)
227
+ end
228
+ end
229
+ end
230
+ search.facet(:category_ids).rows.map { |row| [row.value, row.count] }.to_set.should == Set[[:category_1, 1]]
231
+ search.facet(:all_category_ids).rows.map { |row| [row.value, row.count] }.to_set.should == Set[[:category_1, 1], [:category_2, 1]]
184
232
  end
185
- search.facet(:category_ids).rows.map { |row| row.value }.should == [1]
186
- search.facet(:all_category_ids).rows.map { |row| row.value }.to_set.should == Set[1, 2]
187
233
  end
188
234
  end
189
235
 
@@ -71,4 +71,30 @@ describe "field grouping" do
71
71
  title1_group = search.group(:title).groups.detect { |g| g.value == "Title1" }
72
72
  title1_group.hits.first.primary_key.to_i.should == highest_ranked_post.id
73
73
  end
74
+
75
+ it "allows pagination within groups" do
76
+ search = Sunspot.search(Post) do
77
+ group :title
78
+ paginate :per_page => 1, :page => 2
79
+ end
80
+
81
+ search.group(:title).groups.length.should eql(1)
82
+ search.group(:title).groups.first.results.should == [ @posts.last ]
83
+ end
84
+
85
+ context "returns a paginated collection" do
86
+ subject do
87
+ search = Sunspot.search(Post) do
88
+ group :title
89
+ paginate :per_page => 1, :page => 2
90
+ end
91
+ search.group(:title).groups
92
+ end
93
+
94
+ it { subject.per_page.should eql(1) }
95
+ it { subject.total_pages.should eql(2) }
96
+ it { subject.current_page.should eql(2) }
97
+ it { subject.first_page?.should be_false }
98
+ it { subject.last_page?.should be_true }
99
+ end
74
100
  end
@@ -33,24 +33,48 @@ describe 'scoped_search' do
33
33
 
34
34
  it 'should filter by less than' do
35
35
  results = Sunspot.search(clazz) { with(field).less_than values[2] }.results
36
- (0..2).each { |i| results.should include(@objects[i]) }
37
- (3..4).each { |i| results.should_not include(@objects[i]) }
36
+ (0..1).each { |i| results.should include(@objects[i]) }
37
+ (2..4).each { |i| results.should_not include(@objects[i]) }
38
38
  end
39
39
 
40
40
  it 'should reject by less than' do
41
41
  results = Sunspot.search(clazz) { without(field).less_than values[2] }.results
42
+ (0..1).each { |i| results.should_not include(@objects[i]) }
43
+ (2..4).each { |i| results.should include(@objects[i]) }
44
+ end
45
+
46
+ it 'should filter by less than or equal to' do
47
+ results = Sunspot.search(clazz) { with(field).less_than_or_equal_to values[2] }.results
48
+ (0..2).each { |i| results.should include(@objects[i]) }
49
+ (3..4).each { |i| results.should_not include(@objects[i]) }
50
+ end
51
+
52
+ it 'should reject by less than or equal to' do
53
+ results = Sunspot.search(clazz) { without(field).less_than_or_equal_to values[2] }.results
42
54
  (0..2).each { |i| results.should_not include(@objects[i]) }
43
55
  (3..4).each { |i| results.should include(@objects[i]) }
44
56
  end
45
57
 
46
58
  it 'should filter by greater than' do
47
59
  results = Sunspot.search(clazz) { with(field).greater_than values[2] }.results
60
+ (3..4).each { |i| results.should include(@objects[i]) }
61
+ (0..2).each { |i| results.should_not include(@objects[i]) }
62
+ end
63
+
64
+ it 'should reject by greater than' do
65
+ results = Sunspot.search(clazz) { without(field).greater_than values[2] }.results
66
+ (3..4).each { |i| results.should_not include(@objects[i]) }
67
+ (0..2).each { |i| results.should include(@objects[i]) }
68
+ end
69
+
70
+ it 'should filter by greater than or equal to' do
71
+ results = Sunspot.search(clazz) { with(field).greater_than_or_equal_to values[2] }.results
48
72
  (2..4).each { |i| results.should include(@objects[i]) }
49
73
  (0..1).each { |i| results.should_not include(@objects[i]) }
50
74
  end
51
75
 
52
76
  it 'should reject by greater than' do
53
- results = Sunspot.search(clazz) { without(field).greater_than values[2] }.results
77
+ results = Sunspot.search(clazz) { without(field).greater_than_or_equal_to values[2] }.results
54
78
  (2..4).each { |i| results.should_not include(@objects[i]) }
55
79
  (0..1).each { |i| results.should include(@objects[i]) }
56
80
  end
@@ -119,6 +143,14 @@ describe 'scoped_search' do
119
143
  end
120
144
  end
121
145
 
146
+ describe 'Legacy (static) fields' do
147
+ it "allows for using symbols in defining static field names" do
148
+ Sunspot.remove_all
149
+ Sunspot.index!(legacy = Post.new(:title => "foo"))
150
+ Sunspot.search(Post) { with(:legacy, "legacy foo") }.results.should == [legacy]
151
+ end
152
+ end
153
+
122
154
  describe 'reserved words' do
123
155
  %w(AND OR NOT TO).each do |word|
124
156
  it "should successfully search for #{word.inspect}" do
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunspot
3
3
  version: !ruby/object:Gem::Version
4
- hash: 2286627327
5
- prerelease: 6
4
+ prerelease: true
6
5
  segments:
7
6
  - 2
8
7
  - 0
9
8
  - 0
10
9
  - pre
11
- - 120417
12
- version: 2.0.0.pre.120417
10
+ - 120720
11
+ version: 2.0.0.pre.120720
13
12
  platform: ruby
14
13
  authors:
15
14
  - Mat Brown
@@ -35,17 +34,16 @@ autorequire:
35
34
  bindir: bin
36
35
  cert_chain: []
37
36
 
38
- date: 2012-04-17 00:00:00 Z
37
+ date: 2012-07-20 00:00:00 -07:00
38
+ default_executable:
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rsolr
42
42
  prerelease: false
43
43
  requirement: &id001 !ruby/object:Gem::Requirement
44
- none: false
45
44
  requirements:
46
45
  - - ~>
47
46
  - !ruby/object:Gem::Version
48
- hash: 25
49
47
  segments:
50
48
  - 1
51
49
  - 0
@@ -57,11 +55,9 @@ dependencies:
57
55
  name: pr_geohash
58
56
  prerelease: false
59
57
  requirement: &id002 !ruby/object:Gem::Requirement
60
- none: false
61
58
  requirements:
62
59
  - - ~>
63
60
  - !ruby/object:Gem::Version
64
- hash: 15
65
61
  segments:
66
62
  - 1
67
63
  - 0
@@ -72,11 +68,9 @@ dependencies:
72
68
  name: rspec
73
69
  prerelease: false
74
70
  requirement: &id003 !ruby/object:Gem::Requirement
75
- none: false
76
71
  requirements:
77
72
  - - ~>
78
73
  - !ruby/object:Gem::Version
79
- hash: 23
80
74
  segments:
81
75
  - 2
82
76
  - 6
@@ -88,11 +82,9 @@ dependencies:
88
82
  name: hanna
89
83
  prerelease: false
90
84
  requirement: &id004 !ruby/object:Gem::Requirement
91
- none: false
92
85
  requirements:
93
86
  - - ">="
94
87
  - !ruby/object:Gem::Version
95
- hash: 3
96
88
  segments:
97
89
  - 0
98
90
  version: "0"
@@ -288,6 +280,7 @@ files:
288
280
  - tasks/rdoc.rake
289
281
  - tasks/schema.rake
290
282
  - tasks/todo.rake
283
+ has_rdoc: true
291
284
  homepage: http://outoftime.github.com/sunspot
292
285
  licenses: []
293
286
 
@@ -301,20 +294,16 @@ rdoc_options:
301
294
  require_paths:
302
295
  - lib
303
296
  required_ruby_version: !ruby/object:Gem::Requirement
304
- none: false
305
297
  requirements:
306
298
  - - ">="
307
299
  - !ruby/object:Gem::Version
308
- hash: 3
309
300
  segments:
310
301
  - 0
311
302
  version: "0"
312
303
  required_rubygems_version: !ruby/object:Gem::Requirement
313
- none: false
314
304
  requirements:
315
305
  - - ">"
316
306
  - !ruby/object:Gem::Version
317
- hash: 25
318
307
  segments:
319
308
  - 1
320
309
  - 3
@@ -323,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
312
  requirements: []
324
313
 
325
314
  rubyforge_project: sunspot
326
- rubygems_version: 1.8.15
315
+ rubygems_version: 1.3.6
327
316
  signing_key:
328
317
  specification_version: 3
329
318
  summary: Library for expressive, powerful interaction with the Solr search engine