supernova 0.3.13 → 0.4.13
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/Gemfile +2 -1
- data/Gemfile.lock +14 -16
- data/README.rdoc +1 -8
- data/VERSION +1 -1
- data/lib/supernova.rb +0 -1
- data/solr/start.rb +3 -0
- data/spec/integration/solr_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -21
- data/spec/supernova_spec.rb +7 -7
- data/supernova.gemspec +9 -9
- metadata +42 -33
- data/lib/supernova/thinking_sphinx.rb +0 -8
- data/lib/supernova/thinking_sphinx_criteria.rb +0 -49
- data/spec/integration/thinking_sphinx_spec.rb +0 -77
- data/spec/supernova/thinking_sphinx_criteria_spec.rb +0 -142
data/Gemfile
CHANGED
@@ -6,10 +6,11 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
|
9
|
-
gem "thinking-sphinx", "2.0.3"
|
10
9
|
gem "rsolr"
|
11
10
|
gem "will_paginate"
|
12
11
|
gem "json"
|
12
|
+
gem "activesupport"
|
13
|
+
gem "activerecord"
|
13
14
|
|
14
15
|
group :development do
|
15
16
|
gem "ruby-debug"
|
data/Gemfile.lock
CHANGED
@@ -2,17 +2,18 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
ZenTest (4.5.0)
|
5
|
-
activemodel (3.0.
|
6
|
-
activesupport (= 3.0.
|
5
|
+
activemodel (3.0.0)
|
6
|
+
activesupport (= 3.0.0)
|
7
7
|
builder (~> 2.1.2)
|
8
|
-
i18n (~> 0.
|
9
|
-
activerecord (3.0.
|
10
|
-
activemodel (= 3.0.
|
11
|
-
activesupport (= 3.0.
|
12
|
-
arel (~>
|
8
|
+
i18n (~> 0.4.1)
|
9
|
+
activerecord (3.0.0)
|
10
|
+
activemodel (= 3.0.0)
|
11
|
+
activesupport (= 3.0.0)
|
12
|
+
arel (~> 1.0.0)
|
13
13
|
tzinfo (~> 0.3.23)
|
14
|
-
activesupport (3.0.
|
15
|
-
arel (
|
14
|
+
activesupport (3.0.0)
|
15
|
+
arel (1.0.1)
|
16
|
+
activesupport (~> 3.0.0)
|
16
17
|
autotest (4.4.6)
|
17
18
|
ZenTest (>= 4.4.1)
|
18
19
|
autotest-growl (0.2.9)
|
@@ -21,7 +22,7 @@ GEM
|
|
21
22
|
diff-lcs (1.1.2)
|
22
23
|
geokit (1.6.0)
|
23
24
|
git (1.2.5)
|
24
|
-
i18n (0.
|
25
|
+
i18n (0.4.2)
|
25
26
|
jeweler (1.6.2)
|
26
27
|
bundler (~> 1.0)
|
27
28
|
git (>= 1.2.5)
|
@@ -31,7 +32,6 @@ GEM
|
|
31
32
|
mysql2 (0.2.7)
|
32
33
|
rake (0.9.2)
|
33
34
|
rcov (0.9.9)
|
34
|
-
riddle (1.3.3)
|
35
35
|
rsolr (1.0.2)
|
36
36
|
builder (>= 2.1.2)
|
37
37
|
rspec (2.3.0)
|
@@ -47,16 +47,15 @@ GEM
|
|
47
47
|
ruby-debug-base (~> 0.10.4.0)
|
48
48
|
ruby-debug-base (0.10.4)
|
49
49
|
linecache (>= 0.3)
|
50
|
-
|
51
|
-
activerecord (>= 3.0.3)
|
52
|
-
riddle (>= 1.2.2)
|
53
|
-
tzinfo (0.3.27)
|
50
|
+
tzinfo (0.3.29)
|
54
51
|
will_paginate (2.3.15)
|
55
52
|
|
56
53
|
PLATFORMS
|
57
54
|
ruby
|
58
55
|
|
59
56
|
DEPENDENCIES
|
57
|
+
activerecord
|
58
|
+
activesupport
|
60
59
|
autotest
|
61
60
|
autotest-growl
|
62
61
|
bundler (~> 1.0.0)
|
@@ -68,5 +67,4 @@ DEPENDENCIES
|
|
68
67
|
rsolr
|
69
68
|
rspec (~> 2.3.0)
|
70
69
|
ruby-debug
|
71
|
-
thinking-sphinx (= 2.0.3)
|
72
70
|
will_paginate
|
data/README.rdoc
CHANGED
@@ -2,12 +2,7 @@
|
|
2
2
|
|
3
3
|
== Setup
|
4
4
|
|
5
|
-
|
6
|
-
require "supernova/thinking_sphinx"
|
7
|
-
|
8
|
-
class Offer
|
9
|
-
include Supernova::ThinkingSphinx
|
10
|
-
end
|
5
|
+
will come back soon!
|
11
6
|
|
12
7
|
=== Anonymous Scopes
|
13
8
|
|
@@ -24,8 +19,6 @@
|
|
24
19
|
=== Named Scopes
|
25
20
|
|
26
21
|
class Offer
|
27
|
-
include Supernova::ThinkingSphinx
|
28
|
-
|
29
22
|
named_search_scope :popular do
|
30
23
|
order("popularity desc")
|
31
24
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.13
|
data/lib/supernova.rb
CHANGED
data/solr/start.rb
ADDED
@@ -24,7 +24,7 @@ describe "Solr" do
|
|
24
24
|
after(:each) do
|
25
25
|
Supernova::Solr.url = nil
|
26
26
|
Supernova::Solr.instance_variable_set("@connection", nil)
|
27
|
-
Offer.criteria_class = Supernova::
|
27
|
+
Offer.criteria_class = Supernova::SolrCriteria
|
28
28
|
end
|
29
29
|
|
30
30
|
def new_criteria
|
data/spec/spec_helper.rb
CHANGED
@@ -7,6 +7,7 @@ require "logger"
|
|
7
7
|
require "fileutils"
|
8
8
|
require "ruby-debug"
|
9
9
|
require "geokit"
|
10
|
+
require "active_record"
|
10
11
|
|
11
12
|
if defined?(Debugger) && Debugger.respond_to?(:settings)
|
12
13
|
Debugger.settings[:autolist] = 1
|
@@ -32,33 +33,13 @@ ActiveRecord::Base.establish_connection(
|
|
32
33
|
)
|
33
34
|
|
34
35
|
PROJECT_ROOT = Pathname.new(File.expand_path("..", File.dirname(__FILE__)))
|
35
|
-
FileUtils.mkdir_p(PROJECT_ROOT.join("db/sphinx/development"))
|
36
36
|
FileUtils.mkdir_p(PROJECT_ROOT.join("log"))
|
37
|
-
FileUtils.mkdir_p(PROJECT_ROOT.join("config"))
|
38
|
-
|
39
|
-
ThinkingSphinx::ActiveRecord::LogSubscriber.logger = Logger.new(
|
40
|
-
open(File.expand_path("../log/active_record.log", File.dirname(__FILE__)), "a")
|
41
|
-
)
|
42
|
-
|
43
|
-
ActiveRecord::Base.send(:include, ThinkingSphinx::ActiveRecord)
|
44
37
|
|
45
38
|
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS offers")
|
46
39
|
ActiveRecord::Base.connection.execute("CREATE TABLE offers (id SERIAL, text TEXT, user_id INTEGER, enabled BOOLEAN, popularity INTEGER, lat FLOAT, lng FLOAT)")
|
47
40
|
|
48
41
|
class Offer < ActiveRecord::Base
|
49
|
-
include Supernova::
|
50
|
-
|
51
|
-
define_index do
|
52
|
-
indexes text
|
53
|
-
|
54
|
-
has :user_id
|
55
|
-
has :enabled
|
56
|
-
has :popularity, :sort => true
|
57
|
-
|
58
|
-
has "RADIANS(lat)", :as => :lat, :type => :float
|
59
|
-
has "RADIANS(lng)", :as => :lng, :type => :float
|
60
|
-
end
|
61
|
-
|
42
|
+
include Supernova::Solr
|
62
43
|
named_search_scope :for_user_ids do |*ids|
|
63
44
|
with(:user_id => ids.flatten)
|
64
45
|
end
|
data/spec/supernova_spec.rb
CHANGED
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Supernova do
|
4
4
|
let(:clazz) do
|
5
5
|
clazz = Class.new
|
6
|
-
clazz.send(:include, Supernova::
|
6
|
+
clazz.send(:include, Supernova::Solr)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#including" do
|
10
10
|
it "can be includes" do
|
11
|
-
Class.new.send(:include, Supernova::
|
11
|
+
Class.new.send(:include, Supernova::Solr)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "defines a named_search_scope method" do
|
@@ -19,7 +19,7 @@ describe Supernova do
|
|
19
19
|
|
20
20
|
describe "#search_scope" do
|
21
21
|
it "returns a new criteria" do
|
22
|
-
clazz.search_scope.should be_an_instance_of(Supernova::
|
22
|
+
clazz.search_scope.should be_an_instance_of(Supernova::SolrCriteria)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "sets the correct clazz" do
|
@@ -40,7 +40,7 @@ describe Supernova do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "returns a new criteria" do
|
43
|
-
clazz.popular.should be_an_instance_of(Supernova::
|
43
|
+
clazz.popular.should be_an_instance_of(Supernova::SolrCriteria)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "sets the clazz attribute" do
|
@@ -58,11 +58,11 @@ describe Supernova do
|
|
58
58
|
|
59
59
|
describe "chaining" do
|
60
60
|
it "calls merge with both scopes" do
|
61
|
-
scope = Supernova::
|
62
|
-
scope.should_receive(:merge).with(instance_of(Supernova::
|
61
|
+
scope = Supernova::SolrCriteria.new(clazz).named_scope_class(clazz)
|
62
|
+
scope.should_receive(:merge).with(instance_of(Supernova::SolrCriteria))
|
63
63
|
scope.popular
|
64
64
|
end
|
65
|
-
# Supernova::
|
65
|
+
# Supernova::SolrCriteria.new(clazz).popular.should be_an_instance_of()
|
66
66
|
end
|
67
67
|
|
68
68
|
describe "with parameters" do
|
data/supernova.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{supernova}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.13"
|
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-
|
12
|
+
s.date = %q{2011-07-18}
|
13
13
|
s.description = %q{Unified search scopes}
|
14
14
|
s.email = %q{tobias.schwab@dynport.de}
|
15
15
|
s.executables = ["start_solr"]
|
@@ -38,8 +38,6 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/supernova/solr_criteria.rb",
|
39
39
|
"lib/supernova/solr_indexer.rb",
|
40
40
|
"lib/supernova/symbol_extensions.rb",
|
41
|
-
"lib/supernova/thinking_sphinx.rb",
|
42
|
-
"lib/supernova/thinking_sphinx_criteria.rb",
|
43
41
|
"solr/conf/admin-extra.html",
|
44
42
|
"solr/conf/elevate.xml",
|
45
43
|
"solr/conf/mapping-FoldToASCII.txt",
|
@@ -77,9 +75,9 @@ Gem::Specification.new do |s|
|
|
77
75
|
"solr/conf/xslt/example_atom.xsl",
|
78
76
|
"solr/conf/xslt/example_rss.xsl",
|
79
77
|
"solr/conf/xslt/luke.xsl",
|
78
|
+
"solr/start.rb",
|
80
79
|
"spec/database.sql",
|
81
80
|
"spec/integration/solr_spec.rb",
|
82
|
-
"spec/integration/thinking_sphinx_spec.rb",
|
83
81
|
"spec/spec_helper.rb",
|
84
82
|
"spec/supernova/condition_spec.rb",
|
85
83
|
"spec/supernova/criteria_spec.rb",
|
@@ -88,7 +86,6 @@ Gem::Specification.new do |s|
|
|
88
86
|
"spec/supernova/solr_indexer_spec.rb",
|
89
87
|
"spec/supernova/solr_spec.rb",
|
90
88
|
"spec/supernova/symbol_extensions_spec.rb",
|
91
|
-
"spec/supernova/thinking_sphinx_criteria_spec.rb",
|
92
89
|
"spec/supernova_spec.rb",
|
93
90
|
"supernova.gemspec"
|
94
91
|
]
|
@@ -102,10 +99,11 @@ Gem::Specification.new do |s|
|
|
102
99
|
s.specification_version = 3
|
103
100
|
|
104
101
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
105
|
-
s.add_runtime_dependency(%q<thinking-sphinx>, ["= 2.0.3"])
|
106
102
|
s.add_runtime_dependency(%q<rsolr>, [">= 0"])
|
107
103
|
s.add_runtime_dependency(%q<will_paginate>, [">= 0"])
|
108
104
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
105
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
106
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 0"])
|
109
107
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
110
108
|
s.add_development_dependency(%q<mysql2>, ["~> 0.2.7"])
|
111
109
|
s.add_development_dependency(%q<geokit>, [">= 0"])
|
@@ -116,10 +114,11 @@ Gem::Specification.new do |s|
|
|
116
114
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
117
115
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
118
116
|
else
|
119
|
-
s.add_dependency(%q<thinking-sphinx>, ["= 2.0.3"])
|
120
117
|
s.add_dependency(%q<rsolr>, [">= 0"])
|
121
118
|
s.add_dependency(%q<will_paginate>, [">= 0"])
|
122
119
|
s.add_dependency(%q<json>, [">= 0"])
|
120
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
121
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
123
122
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
124
123
|
s.add_dependency(%q<mysql2>, ["~> 0.2.7"])
|
125
124
|
s.add_dependency(%q<geokit>, [">= 0"])
|
@@ -131,10 +130,11 @@ Gem::Specification.new do |s|
|
|
131
130
|
s.add_dependency(%q<rcov>, [">= 0"])
|
132
131
|
end
|
133
132
|
else
|
134
|
-
s.add_dependency(%q<thinking-sphinx>, ["= 2.0.3"])
|
135
133
|
s.add_dependency(%q<rsolr>, [">= 0"])
|
136
134
|
s.add_dependency(%q<will_paginate>, [">= 0"])
|
137
135
|
s.add_dependency(%q<json>, [">= 0"])
|
136
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
137
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
138
138
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
139
139
|
s.add_dependency(%q<mysql2>, ["~> 0.2.7"])
|
140
140
|
s.add_dependency(%q<geokit>, [">= 0"])
|
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: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 13
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.13
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Schwab
|
@@ -15,22 +15,20 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
22
22
|
none: false
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
hash:
|
26
|
+
hash: 3
|
27
27
|
segments:
|
28
|
-
- 2
|
29
28
|
- 0
|
30
|
-
|
31
|
-
version: 2.0.3
|
29
|
+
version: "0"
|
32
30
|
version_requirements: *id001
|
33
|
-
name:
|
31
|
+
name: rsolr
|
34
32
|
prerelease: false
|
35
33
|
type: :runtime
|
36
34
|
- !ruby/object:Gem::Dependency
|
@@ -44,7 +42,7 @@ dependencies:
|
|
44
42
|
- 0
|
45
43
|
version: "0"
|
46
44
|
version_requirements: *id002
|
47
|
-
name:
|
45
|
+
name: will_paginate
|
48
46
|
prerelease: false
|
49
47
|
type: :runtime
|
50
48
|
- !ruby/object:Gem::Dependency
|
@@ -58,7 +56,7 @@ dependencies:
|
|
58
56
|
- 0
|
59
57
|
version: "0"
|
60
58
|
version_requirements: *id003
|
61
|
-
name:
|
59
|
+
name: json
|
62
60
|
prerelease: false
|
63
61
|
type: :runtime
|
64
62
|
- !ruby/object:Gem::Dependency
|
@@ -72,7 +70,7 @@ dependencies:
|
|
72
70
|
- 0
|
73
71
|
version: "0"
|
74
72
|
version_requirements: *id004
|
75
|
-
name:
|
73
|
+
name: activesupport
|
76
74
|
prerelease: false
|
77
75
|
type: :runtime
|
78
76
|
- !ruby/object:Gem::Dependency
|
@@ -86,11 +84,25 @@ dependencies:
|
|
86
84
|
- 0
|
87
85
|
version: "0"
|
88
86
|
version_requirements: *id005
|
87
|
+
name: activerecord
|
88
|
+
prerelease: false
|
89
|
+
type: :runtime
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
hash: 3
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
version: "0"
|
100
|
+
version_requirements: *id006
|
89
101
|
name: ruby-debug
|
90
102
|
prerelease: false
|
91
103
|
type: :development
|
92
104
|
- !ruby/object:Gem::Dependency
|
93
|
-
requirement: &
|
105
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
94
106
|
none: false
|
95
107
|
requirements:
|
96
108
|
- - ~>
|
@@ -101,12 +113,12 @@ dependencies:
|
|
101
113
|
- 2
|
102
114
|
- 7
|
103
115
|
version: 0.2.7
|
104
|
-
version_requirements: *
|
116
|
+
version_requirements: *id007
|
105
117
|
name: mysql2
|
106
118
|
prerelease: false
|
107
119
|
type: :development
|
108
120
|
- !ruby/object:Gem::Dependency
|
109
|
-
requirement: &
|
121
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
110
122
|
none: false
|
111
123
|
requirements:
|
112
124
|
- - ">="
|
@@ -115,12 +127,12 @@ dependencies:
|
|
115
127
|
segments:
|
116
128
|
- 0
|
117
129
|
version: "0"
|
118
|
-
version_requirements: *
|
130
|
+
version_requirements: *id008
|
119
131
|
name: geokit
|
120
132
|
prerelease: false
|
121
133
|
type: :development
|
122
134
|
- !ruby/object:Gem::Dependency
|
123
|
-
requirement: &
|
135
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
124
136
|
none: false
|
125
137
|
requirements:
|
126
138
|
- - ">="
|
@@ -129,12 +141,12 @@ dependencies:
|
|
129
141
|
segments:
|
130
142
|
- 0
|
131
143
|
version: "0"
|
132
|
-
version_requirements: *
|
144
|
+
version_requirements: *id009
|
133
145
|
name: autotest
|
134
146
|
prerelease: false
|
135
147
|
type: :development
|
136
148
|
- !ruby/object:Gem::Dependency
|
137
|
-
requirement: &
|
149
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
138
150
|
none: false
|
139
151
|
requirements:
|
140
152
|
- - ">="
|
@@ -143,12 +155,12 @@ dependencies:
|
|
143
155
|
segments:
|
144
156
|
- 0
|
145
157
|
version: "0"
|
146
|
-
version_requirements: *
|
158
|
+
version_requirements: *id010
|
147
159
|
name: autotest-growl
|
148
160
|
prerelease: false
|
149
161
|
type: :development
|
150
162
|
- !ruby/object:Gem::Dependency
|
151
|
-
requirement: &
|
163
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
152
164
|
none: false
|
153
165
|
requirements:
|
154
166
|
- - ~>
|
@@ -159,12 +171,12 @@ dependencies:
|
|
159
171
|
- 3
|
160
172
|
- 0
|
161
173
|
version: 2.3.0
|
162
|
-
version_requirements: *
|
174
|
+
version_requirements: *id011
|
163
175
|
name: rspec
|
164
176
|
prerelease: false
|
165
177
|
type: :development
|
166
178
|
- !ruby/object:Gem::Dependency
|
167
|
-
requirement: &
|
179
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
168
180
|
none: false
|
169
181
|
requirements:
|
170
182
|
- - ~>
|
@@ -175,12 +187,12 @@ dependencies:
|
|
175
187
|
- 0
|
176
188
|
- 0
|
177
189
|
version: 1.0.0
|
178
|
-
version_requirements: *
|
190
|
+
version_requirements: *id012
|
179
191
|
name: bundler
|
180
192
|
prerelease: false
|
181
193
|
type: :development
|
182
194
|
- !ruby/object:Gem::Dependency
|
183
|
-
requirement: &
|
195
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
184
196
|
none: false
|
185
197
|
requirements:
|
186
198
|
- - ~>
|
@@ -191,12 +203,12 @@ dependencies:
|
|
191
203
|
- 6
|
192
204
|
- 0
|
193
205
|
version: 1.6.0
|
194
|
-
version_requirements: *
|
206
|
+
version_requirements: *id013
|
195
207
|
name: jeweler
|
196
208
|
prerelease: false
|
197
209
|
type: :development
|
198
210
|
- !ruby/object:Gem::Dependency
|
199
|
-
requirement: &
|
211
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
200
212
|
none: false
|
201
213
|
requirements:
|
202
214
|
- - ">="
|
@@ -205,7 +217,7 @@ dependencies:
|
|
205
217
|
segments:
|
206
218
|
- 0
|
207
219
|
version: "0"
|
208
|
-
version_requirements: *
|
220
|
+
version_requirements: *id014
|
209
221
|
name: rcov
|
210
222
|
prerelease: false
|
211
223
|
type: :development
|
@@ -239,8 +251,6 @@ files:
|
|
239
251
|
- lib/supernova/solr_criteria.rb
|
240
252
|
- lib/supernova/solr_indexer.rb
|
241
253
|
- lib/supernova/symbol_extensions.rb
|
242
|
-
- lib/supernova/thinking_sphinx.rb
|
243
|
-
- lib/supernova/thinking_sphinx_criteria.rb
|
244
254
|
- solr/conf/admin-extra.html
|
245
255
|
- solr/conf/elevate.xml
|
246
256
|
- solr/conf/mapping-FoldToASCII.txt
|
@@ -278,9 +288,9 @@ files:
|
|
278
288
|
- solr/conf/xslt/example_atom.xsl
|
279
289
|
- solr/conf/xslt/example_rss.xsl
|
280
290
|
- solr/conf/xslt/luke.xsl
|
291
|
+
- solr/start.rb
|
281
292
|
- spec/database.sql
|
282
293
|
- spec/integration/solr_spec.rb
|
283
|
-
- spec/integration/thinking_sphinx_spec.rb
|
284
294
|
- spec/spec_helper.rb
|
285
295
|
- spec/supernova/condition_spec.rb
|
286
296
|
- spec/supernova/criteria_spec.rb
|
@@ -289,7 +299,6 @@ files:
|
|
289
299
|
- spec/supernova/solr_indexer_spec.rb
|
290
300
|
- spec/supernova/solr_spec.rb
|
291
301
|
- spec/supernova/symbol_extensions_spec.rb
|
292
|
-
- spec/supernova/thinking_sphinx_criteria_spec.rb
|
293
302
|
- spec/supernova_spec.rb
|
294
303
|
- supernova.gemspec
|
295
304
|
homepage: http://github.com/dynport/supernova
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require "thinking_sphinx"
|
2
|
-
require "zlib"
|
3
|
-
|
4
|
-
class Supernova::ThinkingSphinxCriteria < Supernova::Criteria
|
5
|
-
def self.index_statement_for(field_name, column = nil)
|
6
|
-
column ||= field_name
|
7
|
-
[%(CONCAT("#{field_name}_", #{column})), { :as => :"indexed_#{field_name}" }]
|
8
|
-
end
|
9
|
-
|
10
|
-
def normalize_with_filter(attributes)
|
11
|
-
attributes.inject({}) do |hash, (key, value)|
|
12
|
-
value = Zlib.crc32(value.to_s) if value.is_a?(String) || value.is_a?(Class)
|
13
|
-
hash.merge!(key => value)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_params
|
18
|
-
sphinx_options = { :match_mode => :boolean, :with => {}, :conditions => {}, :without => {} }
|
19
|
-
sphinx_options[:order] = self.search_options[:order] if self.search_options[:order]
|
20
|
-
sphinx_options[:limit] = self.search_options[:limit] if self.search_options[:limit]
|
21
|
-
sphinx_options[:select] = self.search_options[:select] if self.search_options[:select]
|
22
|
-
sphinx_options[:group_by] = self.search_options[:group_by] if self.search_options[:group_by]
|
23
|
-
sphinx_options.merge!(self.search_options[:pagination]) if self.search_options[:pagination].is_a?(Hash)
|
24
|
-
sphinx_options[:classes] = self.filters[:classes] if self.filters[:classes]
|
25
|
-
sphinx_options[:classes] = [self.clazz] if self.clazz
|
26
|
-
sphinx_options[:conditions].merge!(self.filters[:conditions]) if self.filters[:conditions]
|
27
|
-
sphinx_options[:with].merge!(normalize_with_filter(self.filters[:with])) if self.filters[:with]
|
28
|
-
sphinx_options[:without].merge!(normalize_with_filter(self.filters[:without])) if self.filters[:without]
|
29
|
-
sphinx_options.merge!(self.search_options[:custom_options]) if self.search_options[:custom_options]
|
30
|
-
if self.search_options[:geo_center] && self.search_options[:geo_distance]
|
31
|
-
sphinx_options[:geo] = [self.search_options[:geo_center][:lat].to_radians, self.search_options[:geo_center][:lng].to_radians]
|
32
|
-
sphinx_options[:with]["@geodist"] = self.search_options[:geo_distance].is_a?(Range) ? self.search_options[:geo_distance] : Range.new(0.0, self.search_options[:geo_distance])
|
33
|
-
end
|
34
|
-
[(self.search_options[:search] || Array.new).join(" "), sphinx_options]
|
35
|
-
end
|
36
|
-
|
37
|
-
def execute
|
38
|
-
ThinkingSphinx.search(*self.to_params)
|
39
|
-
end
|
40
|
-
|
41
|
-
def ids
|
42
|
-
params = *self.to_params
|
43
|
-
ThinkingSphinx.search_for_ids(*params)
|
44
|
-
end
|
45
|
-
|
46
|
-
def total_entries
|
47
|
-
ids.total_entries
|
48
|
-
end
|
49
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require "active_record"
|
3
|
-
require "thinking_sphinx"
|
4
|
-
require "mysql2"
|
5
|
-
require "fileutils"
|
6
|
-
|
7
|
-
describe "ThinkingSphinx" do
|
8
|
-
let(:ts) { ThinkingSphinx::Configuration.instance }
|
9
|
-
|
10
|
-
before(:each) do
|
11
|
-
ts.build
|
12
|
-
ts.controller.index
|
13
|
-
ts.controller.start
|
14
|
-
|
15
|
-
|
16
|
-
ThinkingSphinx.deltas_enabled = true
|
17
|
-
ThinkingSphinx.updates_enabled = true
|
18
|
-
ThinkingSphinx.suppress_delta_output = true
|
19
|
-
|
20
|
-
Offer.connection.execute "TRUNCATE offers"
|
21
|
-
root = Geokit::LatLng.new(47, 11)
|
22
|
-
endpoint = root.endpoint(90, 50, :units => :kms)
|
23
|
-
@offer1 = Offer.create!(:id => 1, :user_id => 1, :enabled => false, :text => "Hans Meyer", :popularity => 10, :lat => root.lat, :lng => root.lng)
|
24
|
-
@offer2 = Offer.create!(:id => 2, :user_id => 2, :enabled => true, :text => "Marek Mintal", :popularity => 1, :lat => endpoint.lat, :lng => endpoint.lng)
|
25
|
-
ts.controller.index
|
26
|
-
sleep 0.3
|
27
|
-
end
|
28
|
-
|
29
|
-
it "finds the correct objects" do
|
30
|
-
Offer.for_user_ids(2).to_a.to_a.should == [@offer2]
|
31
|
-
Offer.for_user_ids(2, 1).to_a.to_a.sort_by(&:id) == [@offer1, @offer2]
|
32
|
-
end
|
33
|
-
|
34
|
-
it "correctly filters out unwanted records" do
|
35
|
-
Offer.search_scope.without(:user_id => 2).to_a.to_a.sort_by(&:id).should == [@offer1]
|
36
|
-
Offer.search_scope.without(:user_id => 1).to_a.to_a.sort_by(&:id).should == [@offer2]
|
37
|
-
Offer.search_scope.without(:user_id => 1).without(:user_id => 2).to_a.to_a.sort_by(&:id).should == []
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns the corect ids" do
|
41
|
-
Offer.for_user_ids(2).ids.to_a.to_a.should == [2]
|
42
|
-
end
|
43
|
-
|
44
|
-
it "filters by enabled" do
|
45
|
-
Offer.search_scope.with(:enabled => true).to_a.to_a.should == [@offer2]
|
46
|
-
Offer.search_scope.with(:enabled => false).to_a.to_a.should == [@offer1]
|
47
|
-
end
|
48
|
-
|
49
|
-
it "combines searches" do
|
50
|
-
Offer.search_scope.with(:enabled => false).with(:user_id => 2).to_a.should be_empty
|
51
|
-
end
|
52
|
-
|
53
|
-
it "searches for names" do
|
54
|
-
Offer.search_scope.search("Marek").map(&:id).should == [2]
|
55
|
-
Offer.search_scope.search("Hans").map(&:id).should == [1]
|
56
|
-
end
|
57
|
-
|
58
|
-
it "sorty by popularity" do
|
59
|
-
Offer.search_scope.order("popularity desc").map(&:id).should == [1, 2]
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "geo search" do
|
63
|
-
it "finds the correct offers" do
|
64
|
-
Offer.search_scope.near(47, 11).within(25.kms).to_a.to_a.should == [@offer1]
|
65
|
-
end
|
66
|
-
|
67
|
-
it "finds more offers when radius is bigger" do
|
68
|
-
Offer.search_scope.near(47, 11).within(49.kms).to_a.should_not include(@offer2)
|
69
|
-
Offer.search_scope.near(47, 11).within(51.kms).to_a.should include(@offer2)
|
70
|
-
end
|
71
|
-
|
72
|
-
it "finds offers around other offers" do
|
73
|
-
Offer.search_scope.near(@offer1).within(49.kms).to_a.to_a.should == [@offer1]
|
74
|
-
Offer.search_scope.near(@offer1).within(51.kms).order("@geodist desc").to_a.to_a.should == [@offer2, @offer1]
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Supernova::ThinkingSphinxCriteria" do
|
4
|
-
let(:scope) { Supernova::ThinkingSphinxCriteria.new }
|
5
|
-
|
6
|
-
describe "#to_params" do
|
7
|
-
it "returns an array" do
|
8
|
-
scope.to_params.should be_an_instance_of(Array)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "sets the correct order query" do
|
12
|
-
scope.order("title desc").to_params.at(1)[:order].should == "title desc"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "sets the correct group_by statement" do
|
16
|
-
scope.group_by("title").to_params.at(1)[:group_by].should == "title"
|
17
|
-
end
|
18
|
-
|
19
|
-
it "sets the match_mode to boolean" do
|
20
|
-
scope.to_params.at(1)[:match_mode].should == :boolean
|
21
|
-
end
|
22
|
-
|
23
|
-
it "does not set the classes field by default" do
|
24
|
-
scope.to_params.at(1).should_not have_key(:classes)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "sets the classes field when classes set" do
|
28
|
-
scope.for_classes(Offer).to_params.at(1)[:classes].should == [Offer]
|
29
|
-
end
|
30
|
-
|
31
|
-
it "sets the classes to the clazz when intialized with the class" do
|
32
|
-
Supernova::ThinkingSphinxCriteria.new(Offer).to_params.at(1)[:classes].should == [Offer]
|
33
|
-
end
|
34
|
-
|
35
|
-
it "sets the search query when present" do
|
36
|
-
scope.search("some test").to_params.at(0).should == "some test"
|
37
|
-
end
|
38
|
-
|
39
|
-
it "sets a set limit" do
|
40
|
-
scope.limit(88).to_params.at(1)[:limit].should == 88
|
41
|
-
end
|
42
|
-
|
43
|
-
it "sets the correct without parameters" do
|
44
|
-
scope.without(:user_id => 9).to_params.at(1)[:without].should == { :user_id => [9] }
|
45
|
-
scope.without(:user_id => 9).without(:user_id => 9).without(:user_id => 1).to_params.at(1)[:without].should == { :user_id => [9, 1] }
|
46
|
-
end
|
47
|
-
|
48
|
-
it "calls sphinx with select fields" do
|
49
|
-
scope.select(%w(id title name)).to_params.at(1)[:select].should == %w(id title name)
|
50
|
-
end
|
51
|
-
|
52
|
-
it "sets the correct with filters" do
|
53
|
-
scope.with(:a => 1).with(:b => 2).to_params.at(1)[:with].should == {
|
54
|
-
:a => 1,
|
55
|
-
:b => 2
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
it "uses the crc32 value of strings when used in with" do
|
60
|
-
scope.with(:a => Offer).to_params.at(1)[:with].should == {
|
61
|
-
:a => 3893864506, # crc32 of Offer string
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
it "sets the correct geo option filter" do
|
66
|
-
scope.near(53.5748, 10.0347).within(5.kms).to_params.at(1)[:geo].map(&:to_s).should == ["0.935056656097458", "0.175138554449875"]
|
67
|
-
end
|
68
|
-
|
69
|
-
it "merges correct with options" do
|
70
|
-
scope.near(53.5748, 10.0347).within(5.kms).with(:filter => true).to_params.at(1)[:with].should == {
|
71
|
-
"@geodist" => Range.new(0.0, 5_000.0),
|
72
|
-
:filter => true
|
73
|
-
}
|
74
|
-
end
|
75
|
-
|
76
|
-
it "sets the correct geo distance filter when single value given" do
|
77
|
-
# @geodist
|
78
|
-
scope.near(53.5748, 10.0347).within(7.kms).to_params.at(1)[:with]["@geodist"].should == Range.new(0.0, 7_000.0)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "sets the correct geo distance filter when range given value given" do
|
82
|
-
# @geodist
|
83
|
-
scope.near(53.5748, 10.0347).within(7.kms..10.kms).to_params.at(1)[:with]["@geodist"].should == Range.new(7_000.0, 10_000.0)
|
84
|
-
end
|
85
|
-
|
86
|
-
{ :page => 8, :per_page => 1 }.each do |key, value|
|
87
|
-
it "sets pagination pagination #{key} to #{value}" do
|
88
|
-
scope.paginate(key => value).to_params.at(1)[key].should == value
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
it "adds custom options to the sphinx search" do
|
93
|
-
scope.options(:star => true).to_params.at(1)[:star].should == true
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe "#normalize_with_filter" do
|
98
|
-
it "does not change booleans and integers" do
|
99
|
-
range = 1..10
|
100
|
-
scope.normalize_with_filter(:a => 1, :enabled => true, :range => range).should == { :a => 1, :enabled => true, :range => range }
|
101
|
-
end
|
102
|
-
|
103
|
-
it "uses crc32 of strings" do
|
104
|
-
scope.normalize_with_filter(:a => "Test").should == { :a => 2018365746 } # crc32 of "Test"
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "with to_params mockes" do
|
109
|
-
let(:query) { double("query") }
|
110
|
-
let(:options) { double("options") }
|
111
|
-
let(:sphinx_response) { double("sphinx_respons") }
|
112
|
-
|
113
|
-
before(:each) do
|
114
|
-
scope.stub!(:to_params).and_return([query, options])
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "#to_a" do
|
118
|
-
it "returns the sphinx search" do
|
119
|
-
ThinkingSphinx.stub!(:search).and_return sphinx_response
|
120
|
-
scope.to_a.should == sphinx_response
|
121
|
-
end
|
122
|
-
|
123
|
-
it "calls ThinkingSphinx with what to_params returns" do
|
124
|
-
ThinkingSphinx.should_receive(:search).with(query, options).and_return sphinx_response
|
125
|
-
scope.to_a.should == sphinx_response
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
it "forwards ids to search_for_ids" do
|
130
|
-
ids_response = double("id response")
|
131
|
-
ThinkingSphinx.should_receive(:search_for_ids).with(query, options).and_return ids_response
|
132
|
-
scope.ids
|
133
|
-
end
|
134
|
-
|
135
|
-
it "forwards total_entries to search_for_ids" do
|
136
|
-
ids_response = double("id response")
|
137
|
-
ThinkingSphinx.should_receive(:search_for_ids).with(query, options).and_return ids_response
|
138
|
-
ids_response.should_receive(:total_entries).and_return 88
|
139
|
-
scope.total_entries.should == 88
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|