supernova 0.7.3 → 0.7.4
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/VERSION +1 -1
- data/lib/supernova/collection.rb +10 -0
- data/lib/supernova/condition.rb +15 -1
- data/lib/supernova/solr_criteria.rb +34 -10
- data/lib/supernova/symbol_extensions.rb +1 -1
- data/spec/integration/solr_spec.rb +83 -7
- data/spec/supernova/collection_spec.rb +31 -3
- data/spec/supernova/condition_spec.rb +61 -1
- data/spec/supernova/solr_criteria_spec.rb +88 -13
- data/supernova.gemspec +2 -2
- metadata +43 -43
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.4
|
data/lib/supernova/collection.rb
CHANGED
@@ -21,4 +21,14 @@ class Supernova::Collection < WillPaginate::Collection
|
|
21
21
|
def original_facet_queries
|
22
22
|
original_criteria.search_options[:facet_queries] || {}
|
23
23
|
end
|
24
|
+
|
25
|
+
def ids
|
26
|
+
@ids ||= extract_ids_from_solr_hash(original_response)
|
27
|
+
end
|
28
|
+
|
29
|
+
def extract_ids_from_solr_hash(solr_hash)
|
30
|
+
col = self.dup
|
31
|
+
col.replace(solr_hash["response"]["docs"].map { |hash| hash["id"][/(\d+)$/, 1].to_i })
|
32
|
+
col
|
33
|
+
end
|
24
34
|
end
|
data/lib/supernova/condition.rb
CHANGED
@@ -6,6 +6,18 @@ class Supernova::Condition
|
|
6
6
|
self.type = type
|
7
7
|
end
|
8
8
|
|
9
|
+
def ==(other)
|
10
|
+
self.hash == other.hash
|
11
|
+
end
|
12
|
+
|
13
|
+
def eql?(other)
|
14
|
+
self == other
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash
|
18
|
+
[type, key].hash
|
19
|
+
end
|
20
|
+
|
9
21
|
def solr_filter_for(value)
|
10
22
|
case type
|
11
23
|
when :not, :ne
|
@@ -24,7 +36,7 @@ class Supernova::Condition
|
|
24
36
|
"#{key}:[* TO #{value}]"
|
25
37
|
when :nin
|
26
38
|
value.is_a?(Range) ? "#{key}:{* TO #{value.first}} OR #{key}:{#{value.last} TO *}" : "!(#{or_key_and_value(value)})"
|
27
|
-
when :in
|
39
|
+
when :in, :inside
|
28
40
|
or_key_and_value(value)
|
29
41
|
end
|
30
42
|
end
|
@@ -36,6 +48,8 @@ class Supernova::Condition
|
|
36
48
|
def or_key_and_value(values)
|
37
49
|
if values.is_a?(Range)
|
38
50
|
"#{key}:[#{values.first} TO #{values.last}]"
|
51
|
+
elsif values.respond_to?(:ne) && values.respond_to?(:sw)
|
52
|
+
"#{key}:#{type == :inside ? "{" : "["}#{values.sw.lat},#{values.sw.lng} TO #{values.ne.lat},#{values.ne.lng}#{type == :inside ? "}" : "]"}"
|
39
53
|
else
|
40
54
|
values.map { |v| v.nil? ? "!#{nil_filter}" : "#{key}:#{v}"}.join(" OR ")
|
41
55
|
end
|
@@ -185,27 +185,51 @@ class Supernova::SolrCriteria < Supernova::Criteria
|
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
|
-
def
|
189
|
-
|
188
|
+
def typhoeus_response
|
189
|
+
request = typhoeus_request
|
190
|
+
hydra.queue(request)
|
191
|
+
hydra.run
|
192
|
+
request.response
|
193
|
+
end
|
194
|
+
|
195
|
+
def hydra
|
196
|
+
Typhoeus::Hydra.hydra
|
197
|
+
end
|
198
|
+
|
199
|
+
def typhoeus_request
|
200
|
+
Typhoeus::Request.new(Supernova::Solr.select_url, :params => to_params.merge(:wt => "json"), :method => :post)
|
190
201
|
end
|
191
202
|
|
192
203
|
def execute
|
193
|
-
|
194
|
-
|
204
|
+
collection_from_body(typhoeus_response.body)
|
205
|
+
end
|
206
|
+
|
207
|
+
def collection_from_body(body)
|
208
|
+
collection_from_json(JSON.parse(body))
|
209
|
+
end
|
210
|
+
|
211
|
+
def collection_from_json(json)
|
212
|
+
collection = Supernova::Collection.new(current_page, per_page == 0 ? 1 : per_page, json["response"]["numFound"])
|
195
213
|
collection.original_criteria = self.clone
|
196
|
-
collection.original_response =
|
197
|
-
collection.facets = hashify_facets_from_response(
|
198
|
-
collection.replace(build_docs(
|
214
|
+
collection.original_response = json
|
215
|
+
collection.facets = hashify_facets_from_response(json)
|
216
|
+
collection.replace(build_docs(json["response"]["docs"]))
|
199
217
|
collection
|
200
218
|
end
|
201
219
|
|
220
|
+
def execute_async(&block)
|
221
|
+
request = typhoeus_request
|
222
|
+
request.on_complete do |response|
|
223
|
+
block.call(collection_from_body(response.body))
|
224
|
+
end
|
225
|
+
hydra.queue(request)
|
226
|
+
end
|
227
|
+
|
202
228
|
def only_ids
|
203
229
|
self_or_clone.except(:select).select("id")
|
204
230
|
end
|
205
231
|
|
206
232
|
def ids
|
207
|
-
only_ids.execute.
|
208
|
-
col.replace(col.map { |h| h["id"].split("/").last.to_i })
|
209
|
-
end
|
233
|
+
only_ids.execute.ids
|
210
234
|
end
|
211
235
|
end
|
@@ -173,6 +173,66 @@ describe "Solr" do
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
+
describe "bounding box search" do
|
177
|
+
class Coordinate
|
178
|
+
attr_accessor :lat, :lng
|
179
|
+
|
180
|
+
def initialize(attributes = {})
|
181
|
+
attributes.each do |key, value|
|
182
|
+
self.send(:"#{key}=", value)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def to_s
|
187
|
+
"#{lat},#{lng}"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
class BoundingBox
|
192
|
+
attr_accessor :ne, :sw
|
193
|
+
|
194
|
+
def initialize(attributes = {})
|
195
|
+
attributes.each do |key, value|
|
196
|
+
self.send(:"#{key}=", value)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
let(:inside) { GeoKit::LatLng.new(9.990317, 53.556698) }
|
202
|
+
let(:outside) { GeoKit::LatLng.new(9.987238, 53.555950) }
|
203
|
+
|
204
|
+
let(:sw_lat) { 9.988139 }
|
205
|
+
let(:sw_lng) { 53.556068 }
|
206
|
+
let(:sw) { c = GeoKit::LatLng.new(sw_lat, sw_lng) }
|
207
|
+
|
208
|
+
let(:ne_lat) { 9.992849 }
|
209
|
+
let(:ne_lng) { 53.557522 }
|
210
|
+
let(:ne) { GeoKit::LatLng.new(ne_lat, ne_lng) }
|
211
|
+
|
212
|
+
let(:bounding_box) { GeoKit::Bounds.new(sw, ne) }
|
213
|
+
|
214
|
+
|
215
|
+
before(:each) do
|
216
|
+
Supernova::Solr.truncate!
|
217
|
+
Supernova::Solr.add(:id => "1", :location_p => inside.to_s, :type => "Test")
|
218
|
+
Supernova::Solr.add(:id => "2", :location_p => outside.to_s, :type => "Test")
|
219
|
+
Supernova::Solr.commit!
|
220
|
+
end
|
221
|
+
|
222
|
+
it "the correct entries" do
|
223
|
+
scope = Supernova::SolrCriteria.new.with(:location_p.in => bounding_box)
|
224
|
+
scope.ids.should == [1]
|
225
|
+
end
|
226
|
+
|
227
|
+
it "includes the egdes" do
|
228
|
+
Supernova::SolrCriteria.new.with(:location_p.in => GeoKit::Bounds.new(outside, inside)).ids.should == [1, 2]
|
229
|
+
end
|
230
|
+
|
231
|
+
it "includes the egdes", :wip => true do
|
232
|
+
Supernova::SolrCriteria.new.with(:location_p.inside => GeoKit::Bounds.new(outside, inside)).ids.should == []
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
176
236
|
describe "range search" do
|
177
237
|
{ Range.new(2, 3) => [2], Range.new(3, 10) => [], Range.new(1, 2) => [1, 2] }.each do |range, ids|
|
178
238
|
it "returns #{ids.inspect} for range #{range.inspect}" do
|
@@ -269,11 +329,25 @@ describe "Solr" do
|
|
269
329
|
end
|
270
330
|
end
|
271
331
|
|
332
|
+
describe "#execute_async" do
|
333
|
+
it "is working" do
|
334
|
+
Supernova::Solr.add(:id => "offers/1", :type => "Offer", :popularity_i => 1)
|
335
|
+
Supernova::Solr.add(:id => "offers/2", :type => "Offer", :popularity_i => 10)
|
336
|
+
Supernova::Solr.add(:id => "offers/3", :type => "Offer", :popularity_i => 100)
|
337
|
+
Supernova::Solr.commit!
|
338
|
+
|
339
|
+
new_criteria.select("id").execute_async do |collection|
|
340
|
+
@collection = collection
|
341
|
+
end
|
342
|
+
new_criteria.hydra.run
|
343
|
+
@collection.should be_kind_of(Supernova::Collection)
|
344
|
+
@collection.count.should == 3
|
345
|
+
@collection.should == [{ "id" => "offers/1" }, { "id" => "offers/2" }, { "id" => "offers/3" }]
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
272
349
|
describe "#facet_queries" do
|
273
350
|
it "returns the correct result" do
|
274
|
-
defaults = {
|
275
|
-
|
276
|
-
}
|
277
351
|
Supernova::Solr.add(:id => "offers/1", :type => "Offer", :popularity_i => 1)
|
278
352
|
Supernova::Solr.add(:id => "offers/2", :type => "Offer", :popularity_i => 10)
|
279
353
|
Supernova::Solr.add(:id => "offers/3", :type => "Offer", :popularity_i => 100)
|
@@ -283,17 +357,19 @@ describe "Solr" do
|
|
283
357
|
end
|
284
358
|
end
|
285
359
|
|
286
|
-
describe "#
|
360
|
+
describe "#typhoeus_response" do
|
361
|
+
let(:response) { JSON.parse(new_criteria.typhoeus_response.body) }
|
362
|
+
|
287
363
|
it "returns a hash" do
|
288
|
-
|
364
|
+
response.should be_kind_of(Hash)
|
289
365
|
end
|
290
366
|
|
291
367
|
it "should not be empty" do
|
292
|
-
|
368
|
+
response.keys.should_not be_empty
|
293
369
|
end
|
294
370
|
|
295
371
|
it "includes th ecorrect headers" do
|
296
|
-
|
372
|
+
response.keys.sort.should == %w(responseHeader response).sort
|
297
373
|
end
|
298
374
|
end
|
299
375
|
|
@@ -9,12 +9,9 @@ describe "Supernova::Collection" do
|
|
9
9
|
|
10
10
|
let(:original_response_without_facets) do
|
11
11
|
{"responseHeader"=>{"status"=>0, "QTime"=>0, "params"=>{"wt"=>"json", "fq"=>"type:Offer", "q"=>"*:*"}}, "response"=>{"numFound"=>3, "start"=>0, "docs"=>[{"id"=>"offers/1", "type"=>"Offer", "popularity_i"=>1}, {"id"=>"offers/2", "type"=>"Offer", "popularity_i"=>10}, {"id"=>"offers/3", "type"=>"Offer", "popularity_i"=>100}]}}
|
12
|
-
{:one=>1, :ten=>2, :hundred=>3}
|
13
12
|
end
|
14
13
|
|
15
14
|
describe "#raw_facet_queries" do
|
16
|
-
|
17
|
-
|
18
15
|
it "returns the correct facet queries when found" do
|
19
16
|
col.original_response = original_response_with_facets
|
20
17
|
col.raw_facet_queries.should == { "popularity_i:[* TO 1]"=>1, "popularity_i:[* TO 10]"=>2, "popularity_i:[* TO 100]"=>3 }
|
@@ -47,4 +44,35 @@ describe "Supernova::Collection" do
|
|
47
44
|
col.original_facet_queries.should == {}
|
48
45
|
end
|
49
46
|
end
|
47
|
+
|
48
|
+
describe "#ids" do
|
49
|
+
let(:col) { Supernova::Collection.new(1, 1, 100) }
|
50
|
+
|
51
|
+
before(:each) do
|
52
|
+
col.original_response = original_response_without_facets
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns an array" do
|
56
|
+
col.ids.should be_kind_of(Supernova::Collection)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "uses extract_ids_from_solr_hash with response" do
|
60
|
+
col.original_response = "some response"
|
61
|
+
col.should_receive(:extract_ids_from_solr_hash).with("some response").and_return("result")
|
62
|
+
col.ids
|
63
|
+
col.ids.should == "result"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#extract_ids_from_solr_hash" do
|
68
|
+
let(:result) { col.extract_ids_from_solr_hash(original_response_without_facets) }
|
69
|
+
|
70
|
+
it "returns an array" do
|
71
|
+
result.should be_kind_of(Array)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "returns the correct ids" do
|
75
|
+
result.should == [1, 2, 3]
|
76
|
+
end
|
77
|
+
end
|
50
78
|
end
|
@@ -7,7 +7,67 @@ describe "Supernova::Condition" do
|
|
7
7
|
cond.type.should == :not
|
8
8
|
end
|
9
9
|
|
10
|
-
describe "
|
10
|
+
describe "equality" do
|
11
|
+
it "returns true when the same" do
|
12
|
+
:user_id.not.should == :user_id.not
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns false when other key" do
|
16
|
+
:user_id.not.should_not == :other_user_id.not
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns false when other method" do
|
20
|
+
:user_id.in.should_not == :user_id.not
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns true when the same" do
|
24
|
+
:user_id.not.should be_eql(:user_id.not)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns false when other key" do
|
28
|
+
:user_id.not.should_not be_eql(:other_user_id.not)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns false when other method" do
|
32
|
+
:user_id.in.should_not be_eql(:user_id.not)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "works for hashes" do
|
36
|
+
a = { :user_id.in => 1 }
|
37
|
+
a[:user_id.in] = 2
|
38
|
+
a.keys.length.should == 1
|
39
|
+
a[:user_id.in].should == 2
|
40
|
+
a[:user_id.not] = 2
|
41
|
+
a.keys.length.should == 2
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#or_key_and_value", :wip => true do
|
46
|
+
it "returns the correct filter" do
|
47
|
+
ne = double("ne", :lat => 48.0, :lng => 12.0)
|
48
|
+
sw = double("sw", :lat => 47.0, :lng => 11.0)
|
49
|
+
bounding_box = double("bbox", :ne => ne, :sw => sw)
|
50
|
+
:pt.in.or_key_and_value(bounding_box).should == "pt:[47.0,11.0 TO 48.0,12.0]"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns the correct filter" do
|
54
|
+
ne = double("ne", :lat => 48.0, :lng => 12.0)
|
55
|
+
sw = double("sw", :lat => 47.0, :lng => 11.0)
|
56
|
+
bounding_box = double("bbox", :ne => ne, :sw => sw)
|
57
|
+
:pt.inside.or_key_and_value(bounding_box).should == "pt:{47.0,11.0 TO 48.0,12.0}"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "solr_filter_for", :wip => true do
|
63
|
+
it "returns the correct filter" do
|
64
|
+
sw = Geokit::LatLng.new(47.1, 11.1)
|
65
|
+
ne = Geokit::LatLng.new(48.2, 12.2)
|
66
|
+
bounds = Geokit::Bounds.new(sw, ne)
|
67
|
+
:location_p.inside.solr_filter_for(bounds).should == "location_p:{47.1,11.1 TO 48.2,12.2}"
|
68
|
+
end
|
69
|
+
|
70
|
+
|
11
71
|
it "returns the correct filter for numbers" do
|
12
72
|
:user_id.not.solr_filter_for(7).should == "!user_id:7"
|
13
73
|
end
|
@@ -164,7 +164,7 @@ describe "Supernova::SolrCriteria" do
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
describe "with facet queries"
|
167
|
+
describe "with facet queries" do
|
168
168
|
let(:params) { criteria.facet_queries(:a => "a", :b => "b").to_params }
|
169
169
|
|
170
170
|
it "sets :facet to true" do
|
@@ -194,6 +194,15 @@ describe "Supernova::SolrCriteria" do
|
|
194
194
|
criteria.attribute_mapping(:user_id => { :type => :integer }).without(:user_id => 1).to_params[:fq].should == ["!user_id_i:1"]
|
195
195
|
end
|
196
196
|
|
197
|
+
describe "bounding box search" do
|
198
|
+
it "includes the correct filter" do
|
199
|
+
ne = double("ne", :lat => 48.0, :lng => 12.0)
|
200
|
+
sw = double("sw", :lat => 47.0, :lng => 11.0)
|
201
|
+
bounding_box = double("bbox", :ne => ne, :sw => sw)
|
202
|
+
criteria.where(:pt.in => bounding_box).to_params[:fq].should include("pt:[47.0,11.0 TO 48.0,12.0]")
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
197
206
|
describe "with a nearby search" do
|
198
207
|
let(:nearby_criteria) { Supernova::SolrCriteria.new.near(47, 11).within(10.kms) }
|
199
208
|
|
@@ -284,21 +293,27 @@ describe "Supernova::SolrCriteria" do
|
|
284
293
|
end
|
285
294
|
|
286
295
|
describe "#ids" do
|
296
|
+
let(:response) { Supernova::Collection.new(1, 1, 100) }
|
297
|
+
|
298
|
+
before(:each) do
|
299
|
+
response.original_response = facet_response
|
300
|
+
end
|
301
|
+
|
287
302
|
it "sets the select fields to id only" do
|
288
303
|
scope = double("scope")
|
289
304
|
criteria.should_receive(:only_ids).and_return(scope)
|
290
|
-
scope.should_receive(:execute).and_return(
|
291
|
-
criteria.ids.should == []
|
305
|
+
scope.should_receive(:execute).and_return(response)
|
306
|
+
criteria.ids.should == [1, 2]
|
292
307
|
end
|
293
308
|
|
294
309
|
it "calls execute" do
|
295
|
-
criteria.should_receive(:execute).and_return(
|
310
|
+
criteria.should_receive(:execute).and_return(response)
|
296
311
|
criteria.ids
|
297
312
|
end
|
298
313
|
|
299
314
|
it "maps the id hashes to ids" do
|
300
|
-
criteria.stub(:execute).and_return(
|
301
|
-
criteria.ids.should == [1,
|
315
|
+
criteria.stub(:execute).and_return(response)
|
316
|
+
criteria.ids.should == [1, 2]
|
302
317
|
end
|
303
318
|
end
|
304
319
|
|
@@ -325,17 +340,14 @@ describe "Supernova::SolrCriteria" do
|
|
325
340
|
a = criteria.select("name_s").only_ids
|
326
341
|
a.to_params[:fl].should == "id"
|
327
342
|
end
|
328
|
-
|
329
|
-
# it "does something" do
|
330
|
-
#
|
331
|
-
# end
|
332
343
|
end
|
333
344
|
|
334
345
|
describe "#execute" do
|
335
346
|
let(:params) { {} }
|
347
|
+
let(:response) { double("response", :body => solr_response.to_json) }
|
336
348
|
|
337
349
|
before(:each) do
|
338
|
-
criteria.stub(:
|
350
|
+
criteria.stub(:typhoeus_response).and_return(response)
|
339
351
|
criteria.stub(:to_params).and_return params
|
340
352
|
end
|
341
353
|
|
@@ -344,7 +356,7 @@ describe "Supernova::SolrCriteria" do
|
|
344
356
|
end
|
345
357
|
|
346
358
|
it "calls to_params" do
|
347
|
-
criteria.should_receive(:
|
359
|
+
criteria.should_receive(:typhoeus_response).and_return response
|
348
360
|
criteria.execute
|
349
361
|
end
|
350
362
|
|
@@ -391,12 +403,75 @@ describe "Supernova::SolrCriteria" do
|
|
391
403
|
end
|
392
404
|
|
393
405
|
it "sets the correct facets" do
|
394
|
-
|
406
|
+
response.stub!(:body).and_return(facet_response.to_json)
|
395
407
|
criteria.should_receive(:hashify_facets_from_response).with(facet_response).and_return({ :a => 1 })
|
396
408
|
criteria.execute.facets.should == {:a => 1}
|
397
409
|
end
|
398
410
|
end
|
399
411
|
|
412
|
+
describe "#typhoeus_response" do
|
413
|
+
it "returns the response" do
|
414
|
+
response = double("response")
|
415
|
+
request = double("request", :response => response)
|
416
|
+
Typhoeus::Hydra.hydra.should_receive(:queue).with(request)
|
417
|
+
Typhoeus::Hydra.hydra.should_receive(:run)
|
418
|
+
criteria.stub!(:typhoeus_request).and_return(request)
|
419
|
+
criteria.typhoeus_response.should == response
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
describe "#execute_async" do
|
424
|
+
let(:request) { double("request") }
|
425
|
+
let(:response) { double("response", :body => solr_response.to_json) }
|
426
|
+
let(:hydra) { double("hydra", :queue => nil) }
|
427
|
+
|
428
|
+
before(:each) do
|
429
|
+
request.should_receive(:on_complete).and_yield(response)
|
430
|
+
criteria.stub!(:typhoeus_request).and_return(request)
|
431
|
+
criteria.stub!(:hydra).and_return(hydra)
|
432
|
+
end
|
433
|
+
|
434
|
+
it "yields the parsed collection" do
|
435
|
+
criteria.execute_async do |collection|
|
436
|
+
@collection = collection
|
437
|
+
end
|
438
|
+
@collection.should be_kind_of(Supernova::Collection)
|
439
|
+
end
|
440
|
+
|
441
|
+
it "adds the request to hydra" do
|
442
|
+
hydra.should_receive(:queue).with(request)
|
443
|
+
criteria.execute_async do |collection|
|
444
|
+
collection
|
445
|
+
end
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
it "returns the parsed response body" do
|
450
|
+
response = double("response", :body => facet_response.to_json)
|
451
|
+
criteria.stub!(:typhoeus_response).and_return(response)
|
452
|
+
criteria.execute.original_response.should == facet_response
|
453
|
+
end
|
454
|
+
|
455
|
+
describe "#typhoeus_request" do
|
456
|
+
it "returns a Typhoeus::Request" do
|
457
|
+
criteria.typhoeus_request.should be_kind_of(Typhoeus::Request)
|
458
|
+
end
|
459
|
+
|
460
|
+
it "sets the correct url" do
|
461
|
+
Supernova::Solr.stub(:select_url).and_return("my_select_url")
|
462
|
+
criteria.typhoeus_request.url.should == "my_select_url"
|
463
|
+
end
|
464
|
+
|
465
|
+
it "returns the correct params" do
|
466
|
+
criteria.stub(:to_params).and_return(:a => 1)
|
467
|
+
criteria.typhoeus_request.params.should == { :a => 1, :wt => "json"}
|
468
|
+
end
|
469
|
+
|
470
|
+
it "returns the correct request methods" do
|
471
|
+
criteria.typhoeus_request.method.should == :post
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
400
475
|
let(:facet_response) {
|
401
476
|
{
|
402
477
|
"response"=>{"start"=>0, "docs"=>[{"popularity_i"=>10, "enabled_b"=>false, "id"=>"offers/1", "user_id_i"=>1, "text_t"=>"Hans Meyer", "type"=>"Offer", "location_p"=>"47,11"}, {"popularity_i"=>1, "enabled_b"=>true, "id"=>"offers/2", "user_id_i"=>2, "text_t"=>"Marek Mintal", "type"=>"Offer", "location_p"=>"46.9981112912042,11.6587158814378"}], "numFound"=>2}, "facet_counts"=>{"facet_fields"=>{"text_t"=>["han", 1, "marek", 1, "meyer", 1, "mintal", 1]}, "facet_ranges"=>{}, "facet_dates"=>{}, "facet_queries"=>{}}, "responseHeader"=>{"QTime"=>4, "params"=>{"fq"=>"type:Offer", "facet.field"=>"text_t", "facet"=>"true", "q"=>"*:*", "wt"=>"ruby"}, "status"=>0}
|
data/supernova.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "supernova"
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tobias Schwab"]
|
12
|
-
s.date = "2012-02-
|
12
|
+
s.date = "2012-02-21"
|
13
13
|
s.description = "Unified search scopes"
|
14
14
|
s.email = "tobias.schwab@dynport.de"
|
15
15
|
s.executables = ["start_solr"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: supernova
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-21 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: will_paginate
|
16
|
-
requirement: &
|
16
|
+
requirement: &70265084366020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70265084366020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70265084365280 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70265084365280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &70265084364800 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70265084364800
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: typhoeus
|
49
|
-
requirement: &
|
49
|
+
requirement: &70265084364320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.3.3
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70265084364320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: i18n
|
60
|
-
requirement: &
|
60
|
+
requirement: &70265084363760 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70265084363760
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activerecord
|
71
|
-
requirement: &
|
71
|
+
requirement: &70265084363280 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 3.0.7
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70265084363280
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: ruby-debug19
|
82
|
-
requirement: &
|
82
|
+
requirement: &70265084362580 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70265084362580
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mysql2
|
93
|
-
requirement: &
|
93
|
+
requirement: &70265084362080 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.2.18
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70265084362080
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ZenTest
|
104
|
-
requirement: &
|
104
|
+
requirement: &70265084361600 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - =
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 4.5.0
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70265084361600
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: geokit
|
115
|
-
requirement: &
|
115
|
+
requirement: &70265084361120 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70265084361120
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: guard
|
126
|
-
requirement: &
|
126
|
+
requirement: &70265084360640 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70265084360640
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rb-fsevent
|
137
|
-
requirement: &
|
137
|
+
requirement: &70265084360140 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70265084360140
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: growl
|
148
|
-
requirement: &
|
148
|
+
requirement: &70265084359620 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *70265084359620
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: growl_notify
|
159
|
-
requirement: &
|
159
|
+
requirement: &70265084359100 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *70265084359100
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: autotest
|
170
|
-
requirement: &
|
170
|
+
requirement: &70265084358580 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,10 +175,10 @@ dependencies:
|
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *70265084358580
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: autotest-growl
|
181
|
-
requirement: &
|
181
|
+
requirement: &70265084357980 !ruby/object:Gem::Requirement
|
182
182
|
none: false
|
183
183
|
requirements:
|
184
184
|
- - ! '>='
|
@@ -186,10 +186,10 @@ dependencies:
|
|
186
186
|
version: '0'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
|
-
version_requirements: *
|
189
|
+
version_requirements: *70265084357980
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: rspec
|
192
|
-
requirement: &
|
192
|
+
requirement: &70265084316160 !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
195
|
- - ~>
|
@@ -197,10 +197,10 @@ dependencies:
|
|
197
197
|
version: 2.8.0
|
198
198
|
type: :development
|
199
199
|
prerelease: false
|
200
|
-
version_requirements: *
|
200
|
+
version_requirements: *70265084316160
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: bundler
|
203
|
-
requirement: &
|
203
|
+
requirement: &70265084315580 !ruby/object:Gem::Requirement
|
204
204
|
none: false
|
205
205
|
requirements:
|
206
206
|
- - ~>
|
@@ -208,10 +208,10 @@ dependencies:
|
|
208
208
|
version: 1.0.0
|
209
209
|
type: :development
|
210
210
|
prerelease: false
|
211
|
-
version_requirements: *
|
211
|
+
version_requirements: *70265084315580
|
212
212
|
- !ruby/object:Gem::Dependency
|
213
213
|
name: jeweler
|
214
|
-
requirement: &
|
214
|
+
requirement: &70265084315000 !ruby/object:Gem::Requirement
|
215
215
|
none: false
|
216
216
|
requirements:
|
217
217
|
- - ~>
|
@@ -219,10 +219,10 @@ dependencies:
|
|
219
219
|
version: 1.6.0
|
220
220
|
type: :development
|
221
221
|
prerelease: false
|
222
|
-
version_requirements: *
|
222
|
+
version_requirements: *70265084315000
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: rcov
|
225
|
-
requirement: &
|
225
|
+
requirement: &70265084314420 !ruby/object:Gem::Requirement
|
226
226
|
none: false
|
227
227
|
requirements:
|
228
228
|
- - ! '>='
|
@@ -230,7 +230,7 @@ dependencies:
|
|
230
230
|
version: '0'
|
231
231
|
type: :development
|
232
232
|
prerelease: false
|
233
|
-
version_requirements: *
|
233
|
+
version_requirements: *70265084314420
|
234
234
|
description: Unified search scopes
|
235
235
|
email: tobias.schwab@dynport.de
|
236
236
|
executables:
|
@@ -328,7 +328,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
328
328
|
version: '0'
|
329
329
|
segments:
|
330
330
|
- 0
|
331
|
-
hash: -
|
331
|
+
hash: -1087199573520631399
|
332
332
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
333
333
|
none: false
|
334
334
|
requirements:
|