picky 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/picky/application.rb +38 -37
- data/lib/picky/cacher/partial/default.rb +1 -3
- data/lib/picky/cacher/partial/subtoken.rb +44 -18
- data/lib/picky/configuration/field.rb +6 -2
- data/lib/picky/configuration/indexes.rb +16 -7
- data/lib/picky/configuration/queries.rb +3 -13
- data/lib/picky/extensions/symbol.rb +19 -4
- data/lib/picky/generator.rb +9 -0
- data/lib/picky/helpers/measuring.rb +3 -3
- data/lib/picky/index/bundle.rb +5 -4
- data/lib/picky/index/category.rb +14 -7
- data/lib/picky/index/combined.rb +6 -1
- data/lib/picky/indexers/no_source_specified_error.rb +2 -0
- data/lib/picky/indexes.rb +3 -9
- data/lib/picky/query/allocation.rb +1 -1
- data/lib/picky/query/allocations.rb +2 -2
- data/lib/picky/rack/harakiri.rb +10 -8
- data/lib/picky/routing.rb +19 -21
- data/lib/picky/solr/schema_generator.rb +4 -4
- data/lib/picky/sources/base.rb +16 -4
- data/lib/picky/sources/csv.rb +3 -0
- data/lib/picky/sources/db.rb +30 -22
- data/lib/picky/tokenizers/base.rb +7 -5
- data/lib/picky/tokenizers/index.rb +5 -5
- data/lib/picky/tokenizers/query.rb +9 -9
- data/prototype_project/app/application.rb +36 -29
- data/prototype_project/app/db.yml +1 -1
- data/prototype_project/config.ru +3 -2
- data/spec/ext/performant_spec.rb +2 -2
- data/spec/lib/application_spec.rb +54 -8
- data/spec/lib/cacher/partial/default_spec.rb +15 -0
- data/spec/lib/cacher/partial/subtoken_spec.rb +54 -2
- data/spec/lib/extensions/symbol_spec.rb +124 -30
- data/spec/lib/index/bundle_partial_generation_speed_spec.rb +1 -1
- data/spec/lib/query/allocations_spec.rb +5 -5
- data/spec/lib/query/combinations_spec.rb +3 -3
- data/spec/lib/rack/harakiri_spec.rb +29 -0
- data/spec/lib/routing_spec.rb +22 -98
- data/spec/lib/tokenizers/index_spec.rb +1 -1
- data/spec/specific/speed_spec.rb +4 -5
- metadata +7 -3
@@ -62,21 +62,21 @@ describe 'Query::Combinations' do
|
|
62
62
|
@combination2.should_receive(:ids).once.with.and_return (1..100).to_a
|
63
63
|
@combination3.should_receive(:ids).once.with.and_return (1..10).to_a
|
64
64
|
|
65
|
-
Benchmark.realtime { @combinations.ids }.should
|
65
|
+
Benchmark.realtime { @combinations.ids }.should < 0.004
|
66
66
|
end
|
67
67
|
it "should be fast" do
|
68
68
|
@combination1.should_receive(:ids).once.with.and_return (1..1000).to_a
|
69
69
|
@combination2.should_receive(:ids).once.with.and_return (1..100).to_a
|
70
70
|
@combination3.should_receive(:ids).once.with.and_return (1..10).to_a
|
71
71
|
|
72
|
-
Benchmark.realtime { @combinations.ids }.should
|
72
|
+
Benchmark.realtime { @combinations.ids }.should < 0.00015
|
73
73
|
end
|
74
74
|
it "should be fast" do
|
75
75
|
@combination1.should_receive(:ids).once.with.and_return (1..1000).to_a
|
76
76
|
@combination2.should_receive(:ids).once.with.and_return (901..1000).to_a
|
77
77
|
@combination3.should_receive(:ids).once.with.and_return (1..10).to_a
|
78
78
|
|
79
|
-
Benchmark.realtime { @combinations.ids }.should
|
79
|
+
Benchmark.realtime { @combinations.ids }.should < 0.0001
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Rack::Harakiri do
|
5
|
+
before(:each) do
|
6
|
+
@app = stub :app
|
7
|
+
end
|
8
|
+
context "defaults" do
|
9
|
+
before(:each) do
|
10
|
+
@harakiri = Rack::Harakiri.new @app
|
11
|
+
end
|
12
|
+
it "should quit after an amount of requests" do
|
13
|
+
@harakiri.quit_after_requests.should == 50
|
14
|
+
end
|
15
|
+
end
|
16
|
+
context "with harakiri set" do
|
17
|
+
before(:each) do
|
18
|
+
Rack::Harakiri.after = 100
|
19
|
+
@harakiri = Rack::Harakiri.new @app
|
20
|
+
end
|
21
|
+
after(:each) do
|
22
|
+
Rack::Harakiri.after = nil
|
23
|
+
end
|
24
|
+
it "should quit after an amount of requests" do
|
25
|
+
@harakiri.quit_after_requests.should == 100
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/spec/lib/routing_spec.rb
CHANGED
@@ -78,54 +78,6 @@ describe Routing do
|
|
78
78
|
@routing.routes.freeze
|
79
79
|
@routing.call(env).should == [333, {}, ['this is gurk']]
|
80
80
|
end
|
81
|
-
it 'should route correctly' do
|
82
|
-
env = rack_defaults_for '/searches/live.json?query=some_query'
|
83
|
-
|
84
|
-
live = stub :live
|
85
|
-
live.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Live.new)
|
86
|
-
Query::Live.stub! :new => live
|
87
|
-
|
88
|
-
@routing.live %r{/searches/live}, :some_index
|
89
|
-
|
90
|
-
@routing.routes.freeze
|
91
|
-
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"52"}, ["{\"allocations\":[],\"offset\":0,\"duration\":0,\"total\":0}"]]
|
92
|
-
end
|
93
|
-
it 'should route correctly' do
|
94
|
-
env = rack_defaults_for '/searches/live.json?query=some_query'
|
95
|
-
|
96
|
-
live = stub :live
|
97
|
-
live.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Live.new)
|
98
|
-
Query::Live.stub! :new => live
|
99
|
-
|
100
|
-
@routing.live '/searches/live', :some_index
|
101
|
-
|
102
|
-
@routing.routes.freeze
|
103
|
-
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"52"}, ["{\"allocations\":[],\"offset\":0,\"duration\":0,\"total\":0}"]]
|
104
|
-
end
|
105
|
-
it 'should route correctly' do
|
106
|
-
env = rack_defaults_for '/searches/full?query=some_query'
|
107
|
-
|
108
|
-
full = stub :full
|
109
|
-
full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
|
110
|
-
Query::Full.stub! :new => full
|
111
|
-
|
112
|
-
@routing.full %r{/searches/full}, :some_index
|
113
|
-
|
114
|
-
@routing.routes.freeze
|
115
|
-
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"50"}, ["\x04\b{\t:\x10allocations[\x00:\voffseti\x00:\rdurationi\x00:\ntotali\x00"]]
|
116
|
-
end
|
117
|
-
it 'should route correctly' do
|
118
|
-
env = rack_defaults_for '/searches/full?query=some_query'
|
119
|
-
|
120
|
-
full = stub :full
|
121
|
-
full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
|
122
|
-
Query::Full.stub! :new => full
|
123
|
-
|
124
|
-
@routing.full '/searches/full', :some_index
|
125
|
-
|
126
|
-
@routing.routes.freeze
|
127
|
-
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"50"}, ["\x04\b{\t:\x10allocations[\x00:\voffseti\x00:\rdurationi\x00:\ntotali\x00"]]
|
128
|
-
end
|
129
81
|
it 'should route correctly' do
|
130
82
|
env = rack_defaults_for '/searches/some_route?query=some_query'
|
131
83
|
|
@@ -133,7 +85,7 @@ describe Routing do
|
|
133
85
|
full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
|
134
86
|
Query::Full.stub! :new => full
|
135
87
|
|
136
|
-
@routing.route '/searches/some_route'
|
88
|
+
@routing.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index)
|
137
89
|
|
138
90
|
@routing.routes.freeze
|
139
91
|
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"50"}, ["\x04\b{\t:\x10allocations[\x00:\voffseti\x00:\rdurationi\x00:\ntotali\x00"]]
|
@@ -145,7 +97,7 @@ describe Routing do
|
|
145
97
|
full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
|
146
98
|
Query::Full.stub! :new => full
|
147
99
|
|
148
|
-
@routing.route '/searches/some_route'
|
100
|
+
@routing.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index), :query => { :type => :some_type }
|
149
101
|
|
150
102
|
@routing.routes.freeze
|
151
103
|
@routing.call(env).should == [200, {"Content-Type"=>"application/octet-stream", "Content-Length"=>"50"}, ["\x04\b{\t:\x10allocations[\x00:\voffseti\x00:\rdurationi\x00:\ntotali\x00"]]
|
@@ -157,7 +109,7 @@ describe Routing do
|
|
157
109
|
full.should_receive(:search_with_text).never
|
158
110
|
Query::Full.stub! :new => full
|
159
111
|
|
160
|
-
@routing.route '/searches/some_route'
|
112
|
+
@routing.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index)
|
161
113
|
|
162
114
|
@routing.routes.freeze
|
163
115
|
@routing.call(env).should == [404, {"Content-Type"=>"text/html", "X-Cascade"=>"pass"}, ["Not Found"]]
|
@@ -194,7 +146,22 @@ describe Routing do
|
|
194
146
|
end
|
195
147
|
end
|
196
148
|
|
197
|
-
describe
|
149
|
+
describe "route" do
|
150
|
+
it "should delegate correctly" do
|
151
|
+
@routing.should_receive(:route_one).once.with %r{regexp1}, :query1, {}
|
152
|
+
@routing.should_receive(:route_one).once.with %r{regexp2}, :query2, {}
|
153
|
+
|
154
|
+
@routing.route %r{regexp1} => :query1, %r{regexp2} => :query2
|
155
|
+
end
|
156
|
+
it "should split options correctly" do
|
157
|
+
@routing.should_receive(:route_one).once.with %r{regexp1}, :query1, :some => :option
|
158
|
+
@routing.should_receive(:route_one).once.with %r{regexp2}, :query2, :some => :option
|
159
|
+
|
160
|
+
@routing.route %r{regexp1} => :query1, %r{regexp2} => :query2, :some => :option
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe 'route_one' do
|
198
165
|
before(:each) do
|
199
166
|
@some_query_app = stub :some_query_app
|
200
167
|
@routing.stub! :generate_app => @some_query_app
|
@@ -202,17 +169,17 @@ describe Routing do
|
|
202
169
|
it 'should add the right route' do
|
203
170
|
@routes.should_receive(:add_route).once.with @some_query_app, { :request_method => "GET", :path_info => /some_url/ }
|
204
171
|
|
205
|
-
@routing.
|
172
|
+
@routing.route_one %r{some_url}, :some_query, {}
|
206
173
|
end
|
207
174
|
it 'should add the right route' do
|
208
175
|
@routes.should_receive(:add_route).once.with @some_query_app, { :request_method => "GET", :path_info => /some_url/ }
|
209
176
|
|
210
|
-
@routing.
|
177
|
+
@routing.route_one 'some_url', :some_query, {}
|
211
178
|
end
|
212
179
|
it 'should add the right route' do
|
213
180
|
@routes.should_receive(:add_route).once.with @some_query_app, { :request_method => "GET", :glarf => :blarf, :path_info => /some_url/ }
|
214
181
|
|
215
|
-
@routing.
|
182
|
+
@routing.route_one 'some_url', :some_query, { :glarf => :blarf }
|
216
183
|
end
|
217
184
|
end
|
218
185
|
|
@@ -232,49 +199,6 @@ describe Routing do
|
|
232
199
|
end
|
233
200
|
end
|
234
201
|
|
235
|
-
#
|
236
|
-
describe 'live' do
|
237
|
-
describe 'instance creation' do
|
238
|
-
before(:each) do
|
239
|
-
@routing.stub :route
|
240
|
-
end
|
241
|
-
context 'with options' do
|
242
|
-
it 'should call route correctly' do
|
243
|
-
Query::Live.should_receive(:new).once.with :some_index, :some_other_index
|
244
|
-
|
245
|
-
@routing.live :url, :some_index, :some_other_index, { :query => { :param => :value } }
|
246
|
-
end
|
247
|
-
end
|
248
|
-
context 'without options' do
|
249
|
-
it 'should call route correctly' do
|
250
|
-
Query::Live.should_receive(:new).once.with :some_index, :some_other_index
|
251
|
-
|
252
|
-
@routing.live :url, :some_index, :some_other_index
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
256
|
-
describe 'delegation' do
|
257
|
-
context 'with options' do
|
258
|
-
it 'should call route correctly' do
|
259
|
-
Query::Live.stub! :new => :live
|
260
|
-
|
261
|
-
@routing.should_receive(:route).once.with :url, :live, { :query => { :param => :value } }
|
262
|
-
|
263
|
-
@routing.live :url, :some_index, { :query => { :param => :value } }
|
264
|
-
end
|
265
|
-
end
|
266
|
-
context 'without options' do
|
267
|
-
it 'should call route correctly' do
|
268
|
-
Query::Live.stub! :new => :live
|
269
|
-
|
270
|
-
@routing.should_receive(:route).once.with :url, :live, {}
|
271
|
-
|
272
|
-
@routing.live :url, :some_index
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
202
|
describe 'answer' do
|
279
203
|
context 'with app' do
|
280
204
|
before(:each) do
|
@@ -8,7 +8,7 @@ describe Tokenizers::Index do
|
|
8
8
|
@tokenizer = Tokenizers::Index.new
|
9
9
|
end
|
10
10
|
|
11
|
-
describe "
|
11
|
+
describe "remove_removes_characters" do
|
12
12
|
it "should not remove ' from a query by default" do
|
13
13
|
@tokenizer.remove_illegals("Lugi's").should == "Lugi's"
|
14
14
|
end
|
data/spec/specific/speed_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
|
3
3
|
describe "Speccing Ruby for speed" do
|
4
|
-
|
5
4
|
describe "various versions for allocation id concatenating" do
|
6
5
|
before(:each) do
|
7
6
|
@allocs = [:hello, :speed, :test]
|
@@ -22,14 +21,14 @@ describe "Speccing Ruby for speed" do
|
|
22
21
|
@allocs.inject([]) do |total, alloc|
|
23
22
|
total + @ids[alloc]
|
24
23
|
end
|
25
|
-
end.should
|
24
|
+
end.should < 0.0025
|
26
25
|
end
|
27
26
|
end
|
28
27
|
describe "map and flatten!(1)" do
|
29
28
|
it "should be fast" do
|
30
29
|
Benchmark.realtime do
|
31
30
|
@allocs.map { |alloc| @ids[alloc] }.flatten!(1)
|
32
|
-
end.should
|
31
|
+
end.should < 0.02
|
33
32
|
end
|
34
33
|
end
|
35
34
|
describe "<< and flatten!(1)" do
|
@@ -38,7 +37,7 @@ describe "Speccing Ruby for speed" do
|
|
38
37
|
@allocs.inject([]) do |total, alloc|
|
39
38
|
total << @ids[alloc]
|
40
39
|
end.flatten!(1)
|
41
|
-
end.should
|
40
|
+
end.should < 0.02
|
42
41
|
end
|
43
42
|
end
|
44
43
|
describe "<< and flatten!" do
|
@@ -47,7 +46,7 @@ describe "Speccing Ruby for speed" do
|
|
47
46
|
@allocs.inject([]) do |total, alloc|
|
48
47
|
total << @ids[alloc]
|
49
48
|
end.flatten!
|
50
|
-
end.should
|
49
|
+
end.should < 0.02
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.9
|
9
|
+
version: 0.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Hanke
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-12 00:00:00 +02:00
|
18
18
|
default_executable: picky
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- prototype_project/unicorn.ru
|
144
144
|
- spec/ext/performant_spec.rb
|
145
145
|
- spec/lib/application_spec.rb
|
146
|
+
- spec/lib/cacher/partial/default_spec.rb
|
146
147
|
- spec/lib/cacher/partial/subtoken_spec.rb
|
147
148
|
- spec/lib/cacher/partial_generator_spec.rb
|
148
149
|
- spec/lib/cacher/similarity/double_levenshtone_spec.rb
|
@@ -180,6 +181,7 @@ files:
|
|
180
181
|
- spec/lib/query/token_spec.rb
|
181
182
|
- spec/lib/query/tokens_spec.rb
|
182
183
|
- spec/lib/query/weights_spec.rb
|
184
|
+
- spec/lib/rack/harakiri_spec.rb
|
183
185
|
- spec/lib/results/base_spec.rb
|
184
186
|
- spec/lib/routing_spec.rb
|
185
187
|
- spec/lib/solr/schema_generator_spec.rb
|
@@ -226,6 +228,7 @@ summary: Picky the Search Engine
|
|
226
228
|
test_files:
|
227
229
|
- spec/ext/performant_spec.rb
|
228
230
|
- spec/lib/application_spec.rb
|
231
|
+
- spec/lib/cacher/partial/default_spec.rb
|
229
232
|
- spec/lib/cacher/partial/subtoken_spec.rb
|
230
233
|
- spec/lib/cacher/partial_generator_spec.rb
|
231
234
|
- spec/lib/cacher/similarity/double_levenshtone_spec.rb
|
@@ -263,6 +266,7 @@ test_files:
|
|
263
266
|
- spec/lib/query/token_spec.rb
|
264
267
|
- spec/lib/query/tokens_spec.rb
|
265
268
|
- spec/lib/query/weights_spec.rb
|
269
|
+
- spec/lib/rack/harakiri_spec.rb
|
266
270
|
- spec/lib/results/base_spec.rb
|
267
271
|
- spec/lib/routing_spec.rb
|
268
272
|
- spec/lib/solr/schema_generator_spec.rb
|