outoftime-sunspot 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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