supernova 0.6.2 → 0.6.3
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/README.rdoc +5 -0
- data/VERSION +1 -1
- data/lib/supernova/condition.rb +8 -0
- data/lib/supernova/solr_criteria.rb +9 -1
- data/lib/supernova/symbol_extensions.rb +1 -1
- data/spec/integration/solr_spec.rb +22 -0
- data/spec/spec_helper.rb +5 -2
- data/spec/supernova/condition_spec.rb +8 -0
- data/spec/supernova/solr_criteria_spec.rb +8 -0
- data/spec/supernova/solr_indexer_spec.rb +1 -1
- data/supernova.gemspec +4 -3
- metadata +71 -69
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.3
|
data/lib/supernova/condition.rb
CHANGED
@@ -22,6 +22,14 @@ class Supernova::Condition
|
|
22
22
|
"#{self.key}:{* TO #{value}}"
|
23
23
|
when :lte
|
24
24
|
"#{self.key}:[* TO #{value}]"
|
25
|
+
when :nin
|
26
|
+
"!(#{or_key_and_value(key, value)})"
|
27
|
+
when :in
|
28
|
+
or_key_and_value(key, value)
|
25
29
|
end
|
26
30
|
end
|
31
|
+
|
32
|
+
def or_key_and_value(key, values)
|
33
|
+
values.map { |v| "#{key}:#{v}"}.join(" OR ")
|
34
|
+
end
|
27
35
|
end
|
@@ -67,7 +67,7 @@ class Supernova::SolrCriteria < Supernova::Criteria
|
|
67
67
|
[]
|
68
68
|
else
|
69
69
|
with.map do |key_or_condition, values|
|
70
|
-
|
70
|
+
values_from_key_or_condition_and_values(key_or_condition, values).map do |value|
|
71
71
|
if key_or_condition.respond_to?(:solr_filter_for)
|
72
72
|
key_or_condition.key = solr_field_from_field(key_or_condition.key)
|
73
73
|
key_or_condition.solr_filter_for(value)
|
@@ -79,6 +79,14 @@ class Supernova::SolrCriteria < Supernova::Criteria
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
+
def values_from_key_or_condition_and_values(key_or_condition, values)
|
83
|
+
if key_or_condition.is_a?(Supernova::Condition) && values.is_a?(Array) && [:nin, :in].include?(key_or_condition.type)
|
84
|
+
[values]
|
85
|
+
else
|
86
|
+
[values].flatten
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
82
90
|
def fq_filter_for_key_and_value(key, value)
|
83
91
|
if value.nil?
|
84
92
|
"!#{key}:[* TO *]"
|
@@ -266,5 +266,27 @@ describe "Solr" do
|
|
266
266
|
@clazz.new.index_rows([row1, row2, row3])
|
267
267
|
@clazz.facet_fields(:location).execute.facets.should == { :location=>{ "Berlin"=>1, "Hamburg"=>2 } }
|
268
268
|
end
|
269
|
+
|
270
|
+
describe "#nin and in" do
|
271
|
+
before(:each) do
|
272
|
+
row1 = { "id" => 1, "location" => "Hamburg", "type" => "Offer" }
|
273
|
+
row2 = { "id" => 2, "location" => "Hamburg", "type" => "Offer" }
|
274
|
+
row3 = { "id" => 3, "location" => "Berlin", "type" => "Offer" }
|
275
|
+
row4 = { "id" => 4, "location" => "München", "type" => "Offer" }
|
276
|
+
Supernova::Solr.truncate!
|
277
|
+
Supernova::Solr.connection.commit
|
278
|
+
@clazz.new.index_rows([row1, row2, row3, row4])
|
279
|
+
end
|
280
|
+
|
281
|
+
it "correctly handels nin searches" do
|
282
|
+
@clazz.with(:location.in => %w(Hamburg)).execute.map(&:id).should == [1, 2]
|
283
|
+
@clazz.with(:location.in => %w(Hamburg Berlin)).execute.map(&:id).should == [1, 2, 3]
|
284
|
+
end
|
285
|
+
|
286
|
+
it "correctly handels nin queries" do
|
287
|
+
@clazz.with(:location.nin => %w(Hamburg)).execute.map(&:id).should == [3, 4]
|
288
|
+
@clazz.with(:location.nin => %w(Hamburg Berlin)).execute.map(&:id).should == [4]
|
289
|
+
end
|
290
|
+
end
|
269
291
|
end
|
270
292
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,7 +8,10 @@ require "fileutils"
|
|
8
8
|
require "ruby-debug"
|
9
9
|
require "geokit"
|
10
10
|
require "active_record"
|
11
|
-
|
11
|
+
|
12
|
+
def project_root
|
13
|
+
Pathname.new(File.expand_path("..", File.dirname(__FILE__)))
|
14
|
+
end
|
12
15
|
|
13
16
|
if defined?(Debugger) && Debugger.respond_to?(:settings)
|
14
17
|
Debugger.settings[:autolist] = 1
|
@@ -35,7 +38,7 @@ ActiveRecord::Base.establish_connection(
|
|
35
38
|
)
|
36
39
|
|
37
40
|
|
38
|
-
FileUtils.mkdir_p(
|
41
|
+
FileUtils.mkdir_p(project_root.join("log"))
|
39
42
|
|
40
43
|
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS offers")
|
41
44
|
ActiveRecord::Base.connection.execute("CREATE TABLE offers (id SERIAL, text TEXT, user_id INTEGER, enabled BOOLEAN, popularity INTEGER, lat FLOAT, lng FLOAT)")
|
@@ -16,6 +16,14 @@ describe "Supernova::Condition" do
|
|
16
16
|
:user_id.ne.solr_filter_for(7).should == "!user_id:7"
|
17
17
|
end
|
18
18
|
|
19
|
+
it "returns the correct filter for nin" do
|
20
|
+
:user_id.nin.solr_filter_for([1, 2, 3]).should == "!(user_id:1 OR user_id:2 OR user_id:3)"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns the correct filter for nin" do
|
24
|
+
:user_id.in.solr_filter_for([1, 2, 3]).should == "user_id:1 OR user_id:2 OR user_id:3"
|
25
|
+
end
|
26
|
+
|
19
27
|
it "returns the correct filter for not nil" do
|
20
28
|
:user_id.not.solr_filter_for(nil).should == "user_id:[* TO *]"
|
21
29
|
end
|
@@ -25,6 +25,14 @@ describe Supernova::SolrCriteria do
|
|
25
25
|
criteria.fq_from_with(:user_id => Range.new(10, 12)).should == ["user_id:[10 TO 12]"]
|
26
26
|
end
|
27
27
|
|
28
|
+
it "returns the correct filter for nin" do
|
29
|
+
criteria.fq_from_with(:user_id.nin => [1, 2]).should == ["!(user_id:1 OR user_id:2)"]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns the correct filter for in" do
|
33
|
+
criteria.fq_from_with(:user_id.in => [1, 2]).should == ["user_id:1 OR user_id:2"]
|
34
|
+
end
|
35
|
+
|
28
36
|
it "returns the correct filter for not queries" do
|
29
37
|
criteria.fq_from_with(:user_id.not => nil).should == ["user_id:[* TO *]"]
|
30
38
|
end
|
@@ -501,7 +501,7 @@ describe Supernova::SolrIndexer do
|
|
501
501
|
|
502
502
|
it "separates the first and the second line" do
|
503
503
|
file_stub.should_receive(:puts).with("\{")
|
504
|
-
file_stub.should_receive(:print).with(/\"add\"
|
504
|
+
file_stub.should_receive(:print).with(/\"add\":\{\"doc\"/)
|
505
505
|
file_stub.should_receive(:print).with(%(,\n"add":{"doc":{"id":2}}))
|
506
506
|
indexer.write_to_file(to_index)
|
507
507
|
indexer.write_to_file({:id => 2})
|
data/supernova.gemspec
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{supernova}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.3"
|
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 = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-23}
|
13
|
+
s.default_executable = %q{start_solr}
|
13
14
|
s.description = %q{Unified search scopes}
|
14
15
|
s.email = %q{tobias.schwab@dynport.de}
|
15
16
|
s.executables = ["start_solr"]
|
@@ -94,7 +95,7 @@ Gem::Specification.new do |s|
|
|
94
95
|
s.homepage = %q{http://github.com/dynport/supernova}
|
95
96
|
s.licenses = ["MIT"]
|
96
97
|
s.require_paths = ["lib"]
|
97
|
-
s.rubygems_version = %q{1.
|
98
|
+
s.rubygems_version = %q{1.6.2}
|
98
99
|
s.summary = %q{Unified search scopes}
|
99
100
|
|
100
101
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: supernova
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Schwab
|
@@ -15,10 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-23 00:00:00 +02:00
|
19
|
+
default_executable: start_solr
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
+
name: rsolr
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
25
|
none: false
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
@@ -27,12 +30,12 @@ dependencies:
|
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
30
|
-
version_requirements: *id001
|
31
|
-
name: rsolr
|
32
|
-
prerelease: false
|
33
33
|
type: :runtime
|
34
|
+
requirement: *id001
|
34
35
|
- !ruby/object:Gem::Dependency
|
35
|
-
|
36
|
+
name: will_paginate
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
36
39
|
none: false
|
37
40
|
requirements:
|
38
41
|
- - ">="
|
@@ -41,12 +44,12 @@ dependencies:
|
|
41
44
|
segments:
|
42
45
|
- 0
|
43
46
|
version: "0"
|
44
|
-
version_requirements: *id002
|
45
|
-
name: will_paginate
|
46
|
-
prerelease: false
|
47
47
|
type: :runtime
|
48
|
+
requirement: *id002
|
48
49
|
- !ruby/object:Gem::Dependency
|
49
|
-
|
50
|
+
name: json
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
50
53
|
none: false
|
51
54
|
requirements:
|
52
55
|
- - ">="
|
@@ -55,12 +58,12 @@ dependencies:
|
|
55
58
|
segments:
|
56
59
|
- 0
|
57
60
|
version: "0"
|
58
|
-
version_requirements: *id003
|
59
|
-
name: json
|
60
|
-
prerelease: false
|
61
61
|
type: :runtime
|
62
|
+
requirement: *id003
|
62
63
|
- !ruby/object:Gem::Dependency
|
63
|
-
|
64
|
+
name: activesupport
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
64
67
|
none: false
|
65
68
|
requirements:
|
66
69
|
- - ">="
|
@@ -69,12 +72,12 @@ dependencies:
|
|
69
72
|
segments:
|
70
73
|
- 0
|
71
74
|
version: "0"
|
72
|
-
version_requirements: *id004
|
73
|
-
name: activesupport
|
74
|
-
prerelease: false
|
75
75
|
type: :runtime
|
76
|
+
requirement: *id004
|
76
77
|
- !ruby/object:Gem::Dependency
|
77
|
-
|
78
|
+
name: i18n
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
78
81
|
none: false
|
79
82
|
requirements:
|
80
83
|
- - ">="
|
@@ -83,12 +86,12 @@ dependencies:
|
|
83
86
|
segments:
|
84
87
|
- 0
|
85
88
|
version: "0"
|
86
|
-
version_requirements: *id005
|
87
|
-
name: i18n
|
88
|
-
prerelease: false
|
89
89
|
type: :development
|
90
|
+
requirement: *id005
|
90
91
|
- !ruby/object:Gem::Dependency
|
91
|
-
|
92
|
+
name: activerecord
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
92
95
|
none: false
|
93
96
|
requirements:
|
94
97
|
- - ~>
|
@@ -99,12 +102,12 @@ dependencies:
|
|
99
102
|
- 0
|
100
103
|
- 7
|
101
104
|
version: 3.0.7
|
102
|
-
version_requirements: *id006
|
103
|
-
name: activerecord
|
104
|
-
prerelease: false
|
105
105
|
type: :development
|
106
|
+
requirement: *id006
|
106
107
|
- !ruby/object:Gem::Dependency
|
107
|
-
|
108
|
+
name: ruby-debug
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
108
111
|
none: false
|
109
112
|
requirements:
|
110
113
|
- - ">="
|
@@ -113,12 +116,12 @@ dependencies:
|
|
113
116
|
segments:
|
114
117
|
- 0
|
115
118
|
version: "0"
|
116
|
-
version_requirements: *id007
|
117
|
-
name: ruby-debug
|
118
|
-
prerelease: false
|
119
119
|
type: :development
|
120
|
+
requirement: *id007
|
120
121
|
- !ruby/object:Gem::Dependency
|
121
|
-
|
122
|
+
name: mysql2
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
122
125
|
none: false
|
123
126
|
requirements:
|
124
127
|
- - ~>
|
@@ -129,12 +132,12 @@ dependencies:
|
|
129
132
|
- 2
|
130
133
|
- 7
|
131
134
|
version: 0.2.7
|
132
|
-
version_requirements: *id008
|
133
|
-
name: mysql2
|
134
|
-
prerelease: false
|
135
135
|
type: :development
|
136
|
+
requirement: *id008
|
136
137
|
- !ruby/object:Gem::Dependency
|
137
|
-
|
138
|
+
name: ZenTest
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
138
141
|
none: false
|
139
142
|
requirements:
|
140
143
|
- - "="
|
@@ -145,12 +148,12 @@ dependencies:
|
|
145
148
|
- 5
|
146
149
|
- 0
|
147
150
|
version: 4.5.0
|
148
|
-
version_requirements: *id009
|
149
|
-
name: ZenTest
|
150
|
-
prerelease: false
|
151
151
|
type: :development
|
152
|
+
requirement: *id009
|
152
153
|
- !ruby/object:Gem::Dependency
|
153
|
-
|
154
|
+
name: geokit
|
155
|
+
prerelease: false
|
156
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
154
157
|
none: false
|
155
158
|
requirements:
|
156
159
|
- - ">="
|
@@ -159,12 +162,12 @@ dependencies:
|
|
159
162
|
segments:
|
160
163
|
- 0
|
161
164
|
version: "0"
|
162
|
-
version_requirements: *id010
|
163
|
-
name: geokit
|
164
|
-
prerelease: false
|
165
165
|
type: :development
|
166
|
+
requirement: *id010
|
166
167
|
- !ruby/object:Gem::Dependency
|
167
|
-
|
168
|
+
name: autotest
|
169
|
+
prerelease: false
|
170
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
168
171
|
none: false
|
169
172
|
requirements:
|
170
173
|
- - ">="
|
@@ -173,12 +176,12 @@ dependencies:
|
|
173
176
|
segments:
|
174
177
|
- 0
|
175
178
|
version: "0"
|
176
|
-
version_requirements: *id011
|
177
|
-
name: autotest
|
178
|
-
prerelease: false
|
179
179
|
type: :development
|
180
|
+
requirement: *id011
|
180
181
|
- !ruby/object:Gem::Dependency
|
181
|
-
|
182
|
+
name: autotest-growl
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
182
185
|
none: false
|
183
186
|
requirements:
|
184
187
|
- - ">="
|
@@ -187,12 +190,12 @@ dependencies:
|
|
187
190
|
segments:
|
188
191
|
- 0
|
189
192
|
version: "0"
|
190
|
-
version_requirements: *id012
|
191
|
-
name: autotest-growl
|
192
|
-
prerelease: false
|
193
193
|
type: :development
|
194
|
+
requirement: *id012
|
194
195
|
- !ruby/object:Gem::Dependency
|
195
|
-
|
196
|
+
name: rspec
|
197
|
+
prerelease: false
|
198
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
196
199
|
none: false
|
197
200
|
requirements:
|
198
201
|
- - ~>
|
@@ -203,12 +206,12 @@ dependencies:
|
|
203
206
|
- 3
|
204
207
|
- 0
|
205
208
|
version: 2.3.0
|
206
|
-
version_requirements: *id013
|
207
|
-
name: rspec
|
208
|
-
prerelease: false
|
209
209
|
type: :development
|
210
|
+
requirement: *id013
|
210
211
|
- !ruby/object:Gem::Dependency
|
211
|
-
|
212
|
+
name: bundler
|
213
|
+
prerelease: false
|
214
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
212
215
|
none: false
|
213
216
|
requirements:
|
214
217
|
- - ~>
|
@@ -219,12 +222,12 @@ dependencies:
|
|
219
222
|
- 0
|
220
223
|
- 0
|
221
224
|
version: 1.0.0
|
222
|
-
version_requirements: *id014
|
223
|
-
name: bundler
|
224
|
-
prerelease: false
|
225
225
|
type: :development
|
226
|
+
requirement: *id014
|
226
227
|
- !ruby/object:Gem::Dependency
|
227
|
-
|
228
|
+
name: jeweler
|
229
|
+
prerelease: false
|
230
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
228
231
|
none: false
|
229
232
|
requirements:
|
230
233
|
- - ~>
|
@@ -235,12 +238,12 @@ dependencies:
|
|
235
238
|
- 6
|
236
239
|
- 0
|
237
240
|
version: 1.6.0
|
238
|
-
version_requirements: *id015
|
239
|
-
name: jeweler
|
240
|
-
prerelease: false
|
241
241
|
type: :development
|
242
|
+
requirement: *id015
|
242
243
|
- !ruby/object:Gem::Dependency
|
243
|
-
|
244
|
+
name: rcov
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: &id016 !ruby/object:Gem::Requirement
|
244
247
|
none: false
|
245
248
|
requirements:
|
246
249
|
- - ">="
|
@@ -249,10 +252,8 @@ dependencies:
|
|
249
252
|
segments:
|
250
253
|
- 0
|
251
254
|
version: "0"
|
252
|
-
version_requirements: *id016
|
253
|
-
name: rcov
|
254
|
-
prerelease: false
|
255
255
|
type: :development
|
256
|
+
requirement: *id016
|
256
257
|
description: Unified search scopes
|
257
258
|
email: tobias.schwab@dynport.de
|
258
259
|
executables:
|
@@ -335,6 +336,7 @@ files:
|
|
335
336
|
- spec/supernova/symbol_extensions_spec.rb
|
336
337
|
- spec/supernova_spec.rb
|
337
338
|
- supernova.gemspec
|
339
|
+
has_rdoc: true
|
338
340
|
homepage: http://github.com/dynport/supernova
|
339
341
|
licenses:
|
340
342
|
- MIT
|
@@ -364,7 +366,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
364
366
|
requirements: []
|
365
367
|
|
366
368
|
rubyforge_project:
|
367
|
-
rubygems_version: 1.
|
369
|
+
rubygems_version: 1.6.2
|
368
370
|
signing_key:
|
369
371
|
specification_version: 3
|
370
372
|
summary: Unified search scopes
|