outoftime-sunspot 0.0.1

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.
Files changed (100) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +104 -0
  3. data/PostInstall.txt +7 -0
  4. data/README.rdoc +115 -0
  5. data/Rakefile +27 -0
  6. data/config/hoe.rb +74 -0
  7. data/config/requirements.rb +15 -0
  8. data/lib/light_config.rb +40 -0
  9. data/lib/sunspot/adapters.rb +54 -0
  10. data/lib/sunspot/conditions.rb +50 -0
  11. data/lib/sunspot/conditions_builder.rb +37 -0
  12. data/lib/sunspot/configuration.rb +17 -0
  13. data/lib/sunspot/field.rb +108 -0
  14. data/lib/sunspot/field_builder.rb +37 -0
  15. data/lib/sunspot/indexer.rb +65 -0
  16. data/lib/sunspot/query.rb +115 -0
  17. data/lib/sunspot/query_builder.rb +30 -0
  18. data/lib/sunspot/restriction.rb +72 -0
  19. data/lib/sunspot/scope_builder.rb +33 -0
  20. data/lib/sunspot/search.rb +83 -0
  21. data/lib/sunspot/session.rb +43 -0
  22. data/lib/sunspot/type.rb +62 -0
  23. data/lib/sunspot/util.rb +13 -0
  24. data/lib/sunspot/version.rb +10 -0
  25. data/lib/sunspot.rb +50 -0
  26. data/setup.rb +1585 -0
  27. data/solr/README.txt +36 -0
  28. data/solr/etc/jetty.xml +206 -0
  29. data/solr/etc/webdefault.xml +379 -0
  30. data/solr/exampledocs/books.csv +11 -0
  31. data/solr/exampledocs/hd.xml +46 -0
  32. data/solr/exampledocs/ipod_other.xml +50 -0
  33. data/solr/exampledocs/ipod_video.xml +35 -0
  34. data/solr/exampledocs/mem.xml +58 -0
  35. data/solr/exampledocs/monitor.xml +31 -0
  36. data/solr/exampledocs/monitor2.xml +30 -0
  37. data/solr/exampledocs/mp500.xml +39 -0
  38. data/solr/exampledocs/post.jar +0 -0
  39. data/solr/exampledocs/post.sh +28 -0
  40. data/solr/exampledocs/sd500.xml +33 -0
  41. data/solr/exampledocs/solr.xml +38 -0
  42. data/solr/exampledocs/spellchecker.xml +58 -0
  43. data/solr/exampledocs/utf8-example.xml +42 -0
  44. data/solr/exampledocs/vidcard.xml +52 -0
  45. data/solr/lib/jetty-6.1.3.jar +0 -0
  46. data/solr/lib/jetty-util-6.1.3.jar +0 -0
  47. data/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
  48. data/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
  49. data/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
  50. data/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
  51. data/solr/lib/servlet-api-2.5-6.1.3.jar +0 -0
  52. data/solr/solr/README.txt +52 -0
  53. data/solr/solr/bin/abc +176 -0
  54. data/solr/solr/bin/abo +176 -0
  55. data/solr/solr/bin/backup +108 -0
  56. data/solr/solr/bin/backupcleaner +142 -0
  57. data/solr/solr/bin/commit +128 -0
  58. data/solr/solr/bin/optimize +129 -0
  59. data/solr/solr/bin/readercycle +129 -0
  60. data/solr/solr/bin/rsyncd-disable +77 -0
  61. data/solr/solr/bin/rsyncd-enable +76 -0
  62. data/solr/solr/bin/rsyncd-start +145 -0
  63. data/solr/solr/bin/rsyncd-stop +105 -0
  64. data/solr/solr/bin/scripts-util +83 -0
  65. data/solr/solr/bin/snapcleaner +148 -0
  66. data/solr/solr/bin/snapinstaller +168 -0
  67. data/solr/solr/bin/snappuller +248 -0
  68. data/solr/solr/bin/snappuller-disable +77 -0
  69. data/solr/solr/bin/snappuller-enable +77 -0
  70. data/solr/solr/bin/snapshooter +109 -0
  71. data/solr/solr/conf/admin-extra.html +31 -0
  72. data/solr/solr/conf/protwords.txt +21 -0
  73. data/solr/solr/conf/schema.xml +231 -0
  74. data/solr/solr/conf/scripts.conf +24 -0
  75. data/solr/solr/conf/solrconfig.xml +394 -0
  76. data/solr/solr/conf/stopwords.txt +57 -0
  77. data/solr/solr/conf/synonyms.txt +31 -0
  78. data/solr/start.jar +0 -0
  79. data/solr/webapps/solr.war +0 -0
  80. data/tasks/deployment.rake +34 -0
  81. data/tasks/environment.rake +7 -0
  82. data/tasks/rcov.rake +6 -0
  83. data/tasks/solr.rake +12 -0
  84. data/tasks/website.rake +17 -0
  85. data/test/api/test_build_search.rb +216 -0
  86. data/test/api/test_helper.rb +4 -0
  87. data/test/api/test_indexer.rb +110 -0
  88. data/test/api/test_retrieve_search.rb +114 -0
  89. data/test/api/test_session.rb +46 -0
  90. data/test/custom_expectation.rb +53 -0
  91. data/test/integration/test_field_types.rb +62 -0
  92. data/test/integration/test_helper.rb +1 -0
  93. data/test/integration/test_keyword_search.rb +32 -0
  94. data/test/integration/test_pagination.rb +32 -0
  95. data/test/mocks/base_class.rb +2 -0
  96. data/test/mocks/comment.rb +28 -0
  97. data/test/mocks/mock_adapter.rb +25 -0
  98. data/test/mocks/post.rb +41 -0
  99. data/test/test_helper.rb +31 -0
  100. metadata +191 -0
@@ -0,0 +1,53 @@
1
+ module Matchy
2
+ module Expectations
3
+ class HaveKeyExpectation < Base
4
+ def matches?(receiver)
5
+ @receiver = receiver
6
+ receiver.has_key?(@expected)
7
+ end
8
+
9
+ def failure_message
10
+ "Expected #{@receiver.inspect} to have key #{@expected.inspect}"
11
+ end
12
+
13
+ def negative_failure_message
14
+ "Expected #{@receiver.inspect} not to have key #{@expected.inspect}"
15
+ end
16
+ end
17
+
18
+ class BooleanExpectation < Base
19
+ def initialize(method, args, test_case)
20
+ @method = method
21
+ @args = args
22
+ @test_case = test_case
23
+ end
24
+
25
+ def matches?(receiver)
26
+ @receiver = receiver
27
+ receiver.send("#{@method}?", *@args)
28
+ end
29
+
30
+ def failure_message
31
+ "Expected #{@receiver} to #{'be ' if @args.empty?}#{@method}#{@args.map { |arg| arg.inspect } * ', '}"
32
+ end
33
+
34
+ def negative_failure_message
35
+ "Expected #{@receiver} to not #{'be ' if @args.empty?}#{@method}#{@args.map { |arg| arg.inspect } * ', '}"
36
+ end
37
+ end
38
+
39
+ module TestCaseExtensions
40
+ def have_key(key)
41
+ Matchy::Expectations::HaveKeyExpectation.new(key, self)
42
+ end
43
+
44
+ def method_missing(method, *args, &block)
45
+ if match = /be_(.*)/.match(method.to_s)
46
+ Matchy::Expectations::BooleanExpectation.new(match[1], [], self)
47
+ else
48
+ Matchy::Expectations::BooleanExpectation.new(method.to_s, args, self)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestFieldTypes < Test::Unit::TestCase
4
+ def self.test_field_type(name, field, *values)
5
+ raise(ArgumentError, 'Please supply five values') unless values.length == 5
6
+
7
+ context "with field of type #{name}" do
8
+ before :all do
9
+ Sunspot.remove_all
10
+ @posts = values.map do |value|
11
+ post = Post.new(field => value)
12
+ Sunspot.index(post)
13
+ post
14
+ end
15
+ end
16
+
17
+ test 'should filter by exact match' do
18
+ Sunspot.search(Post) { with.send(field, values[2]) }.results.should == [@posts[2]]
19
+ end
20
+
21
+ test 'should filter by less than' do
22
+ results = Sunspot.search(Post) { with.send(field).less_than values[2] }.results
23
+ (0..2).each { |i| results.should include(@posts[i]) }
24
+ (3..4).each { |i| results.should_not include(@posts[i]) }
25
+ end
26
+
27
+ test 'should filter by greater than' do
28
+ results = Sunspot.search(Post) { with.send(field).greater_than values[2] }.results
29
+ (2..4).each { |i| results.should include(@posts[i]) }
30
+ (0..1).each { |i| results.should_not include(@posts[i]) }
31
+ end
32
+
33
+ test 'should filter by between' do
34
+ results = Sunspot.search(Post) { with.send(field).between(values[1]..values[3]) }.results
35
+ (1..3).each { |i| results.should include(@posts[i]) }
36
+ [0, 4].each { |i| results.should_not include(@posts[i]) }
37
+ end
38
+
39
+ test 'should filter by any of' do
40
+ results = Sunspot.search(Post) { with.send(field).any_of(values.values_at(1, 3)) }.results
41
+ [1, 3].each { |i| results.should include(@posts[i]) }
42
+ [0, 2, 4].each { |i| results.should_not include(@posts[i]) }
43
+ end
44
+
45
+ test 'should order by field ascending' do
46
+ results = Sunspot.search(Post) { order_by field, :asc }.results
47
+ results.should == @posts
48
+ end
49
+
50
+ test 'should order by field descending' do
51
+ results = Sunspot.search(Post) { order_by field, :desc }.results
52
+ results.should == @posts.reverse
53
+ end
54
+ end
55
+ end
56
+
57
+ test_field_type 'String', :title, 'apple', 'banana', 'cherry', 'date', 'eggplant'
58
+ test_field_type 'Integer', :blog_id, -2, 0, 3, 12, 20
59
+ test_field_type 'Float', :average_rating, -2.5, 0.0, 3.2, 3.5, 16.0
60
+ test_field_type 'Time', :published_at, *(['1970-01-01 00:00:00 UTC', '1983-07-08 04:00:00 UTC', '1983-07-08 02:00:00 -0500',
61
+ '2005-11-05 10:00:00 UTC', Time.now.to_s].map { |t| Time.parse(t) })
62
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestKeywordSearch < Test::Unit::TestCase
4
+ before :all do
5
+ Sunspot.remove_all
6
+ @posts = []
7
+ @posts << Post.new(:title => 'The toast elects the insufficient spirit',
8
+ :body => 'Does the wind write?')
9
+ @posts << Post.new(:title => 'A nail abbreviates the recovering insight outside the moron',
10
+ :body => 'The interpreted strain scans the buffer around the upper temper')
11
+ @posts << Post.new(:title => 'The toast abbreviates the recovering spirit',
12
+ :body => 'Does the wind interpret the buffer?')
13
+ Sunspot.index(*@posts)
14
+ end
15
+
16
+ test 'matches a single keyword out of a single field' do
17
+ results = Sunspot.search(Post) { keywords 'toast' }.results
18
+ [0, 2].each { |i| results.should include(@posts[i]) }
19
+ [1].each { |i| results.should_not include(@posts[i]) }
20
+ end
21
+
22
+ test 'matches multiple words out of a single field' do
23
+ results = Sunspot.search(Post) { keywords 'elects toast' }.results
24
+ results.should == [@posts[0]]
25
+ end
26
+
27
+ test 'matches multiple words in multiple fields' do
28
+ results = Sunspot.search(Post) { keywords 'toast wind' }.results
29
+ [0, 2].each { |i| results.should include(@posts[i]) }
30
+ [1].each { |i| results.should_not include(@posts[i]) }
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class TestPagination < Test::Unit::TestCase
4
+ before :all do
5
+ Sunspot.remove_all
6
+ @posts = (0..19).map do |i|
7
+ Post.new(:blog_id => i)
8
+ end
9
+ Sunspot.index(*@posts)
10
+ end
11
+
12
+ should 'return all by default' do
13
+ results = Sunspot.search(Post) { order_by :blog_id }.results
14
+ results.should == @posts
15
+ end
16
+
17
+ should 'return first page of 10' do
18
+ results = Sunspot.search(Post) do
19
+ order_by :blog_id
20
+ paginate :page => 1, :per_page => 10
21
+ end.results
22
+ results.should == @posts[0,10]
23
+ end
24
+
25
+ should 'return second page of 10' do
26
+ results = Sunspot.search(Post) do
27
+ order_by :blog_id
28
+ paginate :page => 2, :per_page => 10
29
+ end.results
30
+ results.should == @posts[10,10]
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ class BaseClass
2
+ end
@@ -0,0 +1,28 @@
1
+ class Comment < BaseClass
2
+ @@id = 0
3
+ @@comments = [nil]
4
+
5
+ attr_reader :id
6
+ attr_accessor :author_name, :published_at, :body
7
+
8
+ def initialize(attrs = {})
9
+ @id = @@id += 1
10
+ @@comments << self
11
+ attrs.each_pair { |attribute, value| self.send("#{attribute}=", value) }
12
+ end
13
+
14
+ def self.get(id)
15
+ @@posts[id]
16
+ end
17
+
18
+ def self.get_all(ids)
19
+ ids.map { |id| get(id) }.sort_by { |post| post.id } # this is so that results are not ordered by coincidence
20
+ end
21
+ end
22
+
23
+ Sunspot.setup(Comment) do
24
+ text :author_name, :body
25
+ string :author_name
26
+ time :published_at
27
+ integer :average_rating
28
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), 'post')
2
+
3
+ module MockAdapter
4
+ class InstanceAdapter
5
+ include Sunspot::Adapters::InstanceAdapter
6
+
7
+ def id
8
+ instance.id
9
+ end
10
+ end
11
+
12
+ class ClassAdapter
13
+ include Sunspot::Adapters::ClassAdapter
14
+
15
+ def load(id)
16
+ clazz.get(id.to_i)
17
+ end
18
+
19
+ def load_all(ids)
20
+ clazz.get_all(ids.map { |id| id.to_i })
21
+ end
22
+ end
23
+ end
24
+
25
+ Sunspot::Adapters.register(MockAdapter, BaseClass)
@@ -0,0 +1,41 @@
1
+ class Post < BaseClass
2
+ @@id = 0
3
+ @@posts = [nil]
4
+
5
+ attr_reader :id
6
+ attr_accessor :title, :body, :blog_id, :published_at, :average_rating, :author_name
7
+
8
+
9
+ def initialize(attrs = {})
10
+ @id = @@id += 1
11
+ @@posts << self
12
+ attrs.each_pair { |attribute, value| self.send "#{attribute}=", value }
13
+ end
14
+
15
+ def category_ids
16
+ @category_ids ||= []
17
+ end
18
+
19
+ def self.get(id)
20
+ @@posts[id]
21
+ end
22
+
23
+ def self.get_all(ids)
24
+ ids.map { |id| get(id) }.sort_by { |post| post.id } # this is so that results are not ordered by coincidence
25
+ end
26
+
27
+ private
28
+ attr_writer :category_ids
29
+ end
30
+
31
+ Sunspot.setup(Post) do
32
+ text :title, :body
33
+ string :title
34
+ integer :blog_id
35
+ integer :category_ids, :multiple => true
36
+ float :average_rating
37
+ time :published_at
38
+ string :sort_title do
39
+ title.downcase.sub(/^(a|an|the)\W+/, '') if title
40
+ end
41
+ end
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ gem 'jeremymcanally-matchy', '>= 0.0.1'
3
+ gem 'jeremymcanally-context', '>= 0.0.6'
4
+ gem 'ruby-debug', '~>0.10'
5
+ gem 'mislav-will_paginate', '~> 2.3'
6
+
7
+ require 'matchy'
8
+ require 'context'
9
+ require 'ruby-debug'
10
+ require 'will_paginate'
11
+ require 'will_paginate/collection'
12
+
13
+ require File.join(File.dirname(__FILE__), 'custom_expectation')
14
+
15
+ unless gem_name = ENV['SUNSPOT_TEST_GEM']
16
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
17
+ else
18
+ gem gem_name
19
+ end
20
+ require 'sunspot'
21
+
22
+ require File.join(File.dirname(__FILE__), 'mocks', 'base_class.rb')
23
+ Dir.glob(File.join(File.dirname(__FILE__), 'mocks', '**', '*.rb')).each { |file| require file }
24
+
25
+ class Test::Unit::TestCase
26
+ def without_class(clazz)
27
+ Object.class_eval { remove_const(clazz.name.to_sym) }
28
+ yield
29
+ Object.class_eval { const_set(clazz.name.to_sym, clazz) }
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: outoftime-sunspot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mat Brown
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-12 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: newgem
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.6
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: hoe
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 1.8.0
32
+ version:
33
+ description: ""
34
+ email:
35
+ - mat@patch.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - History.txt
42
+ - Manifest.txt
43
+ - PostInstall.txt
44
+ - README.rdoc
45
+ - solr/README.txt
46
+ - solr/solr/README.txt
47
+ - solr/solr/conf/protwords.txt
48
+ - solr/solr/conf/stopwords.txt
49
+ - solr/solr/conf/synonyms.txt
50
+ files:
51
+ - History.txt
52
+ - Manifest.txt
53
+ - PostInstall.txt
54
+ - README.rdoc
55
+ - Rakefile
56
+ - config/hoe.rb
57
+ - config/requirements.rb
58
+ - lib/light_config.rb
59
+ - lib/sunspot.rb
60
+ - lib/sunspot/adapters.rb
61
+ - lib/sunspot/conditions.rb
62
+ - lib/sunspot/conditions_builder.rb
63
+ - lib/sunspot/configuration.rb
64
+ - lib/sunspot/field.rb
65
+ - lib/sunspot/field_builder.rb
66
+ - lib/sunspot/indexer.rb
67
+ - lib/sunspot/query.rb
68
+ - lib/sunspot/query_builder.rb
69
+ - lib/sunspot/restriction.rb
70
+ - lib/sunspot/scope_builder.rb
71
+ - lib/sunspot/search.rb
72
+ - lib/sunspot/session.rb
73
+ - lib/sunspot/type.rb
74
+ - lib/sunspot/util.rb
75
+ - lib/sunspot/version.rb
76
+ - log/test_solr.log
77
+ - setup.rb
78
+ - solr/README.txt
79
+ - solr/etc/jetty.xml
80
+ - solr/etc/webdefault.xml
81
+ - solr/exampledocs/books.csv
82
+ - solr/exampledocs/hd.xml
83
+ - solr/exampledocs/ipod_other.xml
84
+ - solr/exampledocs/ipod_video.xml
85
+ - solr/exampledocs/mem.xml
86
+ - solr/exampledocs/monitor.xml
87
+ - solr/exampledocs/monitor2.xml
88
+ - solr/exampledocs/mp500.xml
89
+ - solr/exampledocs/post.jar
90
+ - solr/exampledocs/post.sh
91
+ - solr/exampledocs/sd500.xml
92
+ - solr/exampledocs/solr.xml
93
+ - solr/exampledocs/spellchecker.xml
94
+ - solr/exampledocs/utf8-example.xml
95
+ - solr/exampledocs/vidcard.xml
96
+ - solr/lib/jetty-6.1.3.jar
97
+ - solr/lib/jetty-util-6.1.3.jar
98
+ - solr/lib/jsp-2.1/ant-1.6.5.jar
99
+ - solr/lib/jsp-2.1/core-3.1.1.jar
100
+ - solr/lib/jsp-2.1/jsp-2.1.jar
101
+ - solr/lib/jsp-2.1/jsp-api-2.1.jar
102
+ - solr/lib/servlet-api-2.5-6.1.3.jar
103
+ - solr/logs
104
+ - solr/solr/README.txt
105
+ - solr/solr/bin/abc
106
+ - solr/solr/bin/abo
107
+ - solr/solr/bin/backup
108
+ - solr/solr/bin/backupcleaner
109
+ - solr/solr/bin/commit
110
+ - solr/solr/bin/optimize
111
+ - solr/solr/bin/readercycle
112
+ - solr/solr/bin/rsyncd-disable
113
+ - solr/solr/bin/rsyncd-enable
114
+ - solr/solr/bin/rsyncd-start
115
+ - solr/solr/bin/rsyncd-stop
116
+ - solr/solr/bin/scripts-util
117
+ - solr/solr/bin/snapcleaner
118
+ - solr/solr/bin/snapinstaller
119
+ - solr/solr/bin/snappuller
120
+ - solr/solr/bin/snappuller-disable
121
+ - solr/solr/bin/snappuller-enable
122
+ - solr/solr/bin/snapshooter
123
+ - solr/solr/conf/admin-extra.html
124
+ - solr/solr/conf/protwords.txt
125
+ - solr/solr/conf/schema.xml
126
+ - solr/solr/conf/scripts.conf
127
+ - solr/solr/conf/solrconfig.xml
128
+ - solr/solr/conf/stopwords.txt
129
+ - solr/solr/conf/synonyms.txt
130
+ - solr/solr/conf/xslt
131
+ - solr/solr/data/spell
132
+ - solr/start.jar
133
+ - solr/webapps/solr.war
134
+ - tasks/deployment.rake
135
+ - tasks/environment.rake
136
+ - tasks/rcov.rake
137
+ - tasks/solr.rake
138
+ - tasks/website.rake
139
+ - test/api/test_build_search.rb
140
+ - test/api/test_helper.rb
141
+ - test/api/test_indexer.rb
142
+ - test/api/test_retrieve_search.rb
143
+ - test/api/test_session.rb
144
+ - test/custom_expectation.rb
145
+ - test/integration/test_field_types.rb
146
+ - test/integration/test_helper.rb
147
+ - test/integration/test_keyword_search.rb
148
+ - test/integration/test_pagination.rb
149
+ - test/mocks/base_class.rb
150
+ - test/mocks/comment.rb
151
+ - test/mocks/mock_adapter.rb
152
+ - test/mocks/post.rb
153
+ - test/test_helper.rb
154
+ has_rdoc: true
155
+ homepage: http://github.com/outoftime/sunspot
156
+ post_install_message: PostInstall.txt
157
+ rdoc_options:
158
+ - --main
159
+ - README.rdoc
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: "0"
167
+ version:
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: "0"
173
+ version:
174
+ requirements: []
175
+
176
+ rubyforge_project: sunspot
177
+ rubygems_version: 1.2.0
178
+ signing_key:
179
+ specification_version: 2
180
+ summary: library for expressive, powerful interaction with the Solr search engine
181
+ test_files:
182
+ - test/api/test_build_search.rb
183
+ - test/api/test_helper.rb
184
+ - test/api/test_indexer.rb
185
+ - test/api/test_retrieve_search.rb
186
+ - test/api/test_session.rb
187
+ - test/integration/test_field_types.rb
188
+ - test/integration/test_helper.rb
189
+ - test/integration/test_keyword_search.rb
190
+ - test/integration/test_pagination.rb
191
+ - test/test_helper.rb