picky 0.10.5 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/picky/alias_instances.rb +1 -0
- data/lib/picky/application.rb +6 -7
- data/lib/picky/bundle.rb +31 -0
- data/lib/picky/configuration/indexes.rb +30 -41
- data/lib/picky/configuration/type.rb +6 -40
- data/lib/picky/ext/maybe_compile.rb +9 -0
- data/lib/picky/index/bundle.rb +1 -139
- data/lib/picky/{query/combinator.rb → index/categories.rb} +16 -18
- data/lib/picky/index/category.rb +20 -46
- data/lib/picky/index/type.rb +16 -12
- data/lib/picky/index/types.rb +41 -0
- data/lib/picky/index/wrappers/exact_first.rb +5 -1
- data/lib/picky/indexers/base.rb +9 -8
- data/lib/picky/indexing/bundle.rb +152 -0
- data/lib/picky/indexing/categories.rb +36 -0
- data/lib/picky/indexing/category.rb +145 -0
- data/lib/picky/indexing/type.rb +45 -0
- data/lib/picky/indexing/types.rb +74 -0
- data/lib/picky/loader.rb +17 -7
- data/lib/picky/query/base.rb +5 -4
- data/lib/picky/sources/wrappers/base.rb +23 -0
- data/lib/picky/sources/wrappers/location.rb +92 -0
- data/lib/picky/tokenizers/index.rb +4 -1
- data/lib/picky/type.rb +46 -0
- data/lib/picky/types.rb +38 -0
- data/lib/tasks/index.rake +4 -0
- data/project_prototype/Gemfile +1 -1
- data/project_prototype/app/application.rb +12 -12
- data/spec/lib/application_spec.rb +6 -9
- data/spec/lib/configuration/indexes_spec.rb +0 -85
- data/spec/lib/index/bundle_spec.rb +2 -94
- data/spec/lib/index/category_spec.rb +7 -86
- data/spec/lib/index/type_spec.rb +14 -26
- data/spec/lib/index/wrappers/exact_first_spec.rb +12 -12
- data/spec/lib/{index → indexing}/bundle_partial_generation_speed_spec.rb +2 -2
- data/spec/lib/indexing/bundle_spec.rb +174 -0
- data/spec/lib/{query/combinator_spec.rb → indexing/categories_spec.rb} +30 -34
- data/spec/lib/indexing/category_spec.rb +257 -0
- data/spec/lib/indexing/type_spec.rb +32 -0
- data/spec/lib/loader_spec.rb +0 -2
- data/spec/lib/query/base_spec.rb +8 -17
- data/spec/lib/query/full_spec.rb +3 -6
- data/spec/lib/query/live_spec.rb +4 -3
- data/spec/lib/sources/wrappers/base_spec.rb +35 -0
- data/spec/lib/sources/wrappers/location_spec.rb +68 -0
- data/spec/lib/tokenizers/index_spec.rb +2 -5
- metadata +32 -16
- data/lib/picky/configuration/field.rb +0 -73
- data/lib/picky/indexes.rb +0 -179
- data/lib/picky/initializers/ext.rb +0 -1
- data/spec/lib/configuration/field_spec.rb +0 -208
- data/spec/lib/configuration/type_spec.rb +0 -49
data/spec/lib/query/full_spec.rb
CHANGED
@@ -3,16 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe Query::Full do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
@
|
6
|
+
@type = stub :type
|
7
|
+
@index = stub :index, :index => @type
|
7
8
|
end
|
8
9
|
|
9
10
|
describe 'result_type' do
|
10
11
|
before(:each) do
|
11
|
-
@
|
12
|
-
Query::Token.processed('some'),
|
13
|
-
Query::Token.processed('query')
|
14
|
-
]
|
15
|
-
@query = Query::Full.new @tokens, @index
|
12
|
+
@query = Query::Full.new @index
|
16
13
|
end
|
17
14
|
it "should return a specific type" do
|
18
15
|
@query.result_type.should == Results::Full
|
data/spec/lib/query/live_spec.rb
CHANGED
@@ -5,12 +5,13 @@ describe Query::Live do
|
|
5
5
|
before(:each) do
|
6
6
|
# @category1 = Index::Category.new
|
7
7
|
# @type_index = Index::Type.new :some_name, :some_result_type, @category1
|
8
|
-
@
|
8
|
+
@type = stub :type
|
9
|
+
@index = stub :index, :index => @type
|
9
10
|
end
|
10
11
|
|
11
12
|
describe 'result_type' do
|
12
13
|
before(:each) do
|
13
|
-
@query = Query::Live.new
|
14
|
+
@query = Query::Live.new @index
|
14
15
|
end
|
15
16
|
it "should return a specific type" do
|
16
17
|
@query.result_type.should == Results::Live
|
@@ -40,7 +41,7 @@ describe Query::Live do
|
|
40
41
|
describe "results_from" do
|
41
42
|
describe "with empty ids" do
|
42
43
|
before(:each) do
|
43
|
-
@query = Query::Live.new
|
44
|
+
@query = Query::Live.new @index
|
44
45
|
@allocations = stub :allocations, :total => 0, :ids => [], :to_result => :some_results, :process! => nil
|
45
46
|
end
|
46
47
|
it "should generate a result" do
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sources::Wrappers::Base do
|
4
|
+
|
5
|
+
context "with backend" do
|
6
|
+
it "doesn't fail" do
|
7
|
+
lambda { Sources::Wrappers::Base.new(:something) }.should_not raise_error
|
8
|
+
end
|
9
|
+
before(:each) do
|
10
|
+
@backend = stub :backend
|
11
|
+
@wrapper = Sources::Wrappers::Base.new @backend
|
12
|
+
end
|
13
|
+
it "delegates harvest" do
|
14
|
+
@backend.should_receive(:harvest).once.with :some_type, :some_field
|
15
|
+
|
16
|
+
@wrapper.harvest :some_type, :some_field
|
17
|
+
end
|
18
|
+
it "delegates take_snapshot" do
|
19
|
+
@backend.should_receive(:take_snapshot).once.with :some_type
|
20
|
+
|
21
|
+
@wrapper.take_snapshot :some_type
|
22
|
+
end
|
23
|
+
it "delegates connect_backend" do
|
24
|
+
@backend.should_receive(:connect_backend).once.with # nothing
|
25
|
+
|
26
|
+
@wrapper.connect_backend
|
27
|
+
end
|
28
|
+
end
|
29
|
+
context "without backend" do
|
30
|
+
it "fails" do
|
31
|
+
lambda { Sources::Wrappers::Base.new }.should raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sources::Wrappers::Location do
|
4
|
+
|
5
|
+
context "with backend" do
|
6
|
+
before(:each) do
|
7
|
+
@backend = stub :backend
|
8
|
+
end
|
9
|
+
context "without grid option" do
|
10
|
+
it "fails" do
|
11
|
+
lambda { Sources::Wrappers::Location.new(:something) }.should raise_error
|
12
|
+
end
|
13
|
+
end
|
14
|
+
context "with grid option" do
|
15
|
+
before(:each) do
|
16
|
+
@wrapper = Sources::Wrappers::Location.new @backend, grid:10
|
17
|
+
end
|
18
|
+
it "uses a default of 1 on the precision" do
|
19
|
+
@wrapper.precision.should == 1
|
20
|
+
end
|
21
|
+
it "delegates harvest" do
|
22
|
+
@backend.should_receive(:harvest).once.with :some_type, :some_field
|
23
|
+
|
24
|
+
@wrapper.harvest :some_type, :some_field
|
25
|
+
end
|
26
|
+
it "delegates take_snapshot" do
|
27
|
+
@backend.should_receive(:take_snapshot).once.with :some_type
|
28
|
+
|
29
|
+
@wrapper.take_snapshot :some_type
|
30
|
+
end
|
31
|
+
it "delegates connect_backend" do
|
32
|
+
@backend.should_receive(:connect_backend).once.with # nothing
|
33
|
+
|
34
|
+
@wrapper.connect_backend
|
35
|
+
end
|
36
|
+
end
|
37
|
+
context "with grid and precision option" do
|
38
|
+
before(:each) do
|
39
|
+
@wrapper = Sources::Wrappers::Location.new @backend, grid:4, precision:2
|
40
|
+
end
|
41
|
+
it "uses the given precision" do
|
42
|
+
@wrapper.precision.should == 2
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "locations_for" do
|
46
|
+
before(:each) do
|
47
|
+
@wrapper.instance_variable_set :@min, -3
|
48
|
+
@wrapper.marginize
|
49
|
+
end
|
50
|
+
it "returns the right array" do
|
51
|
+
@wrapper.locations_for(17).should == [13, 14, 15, 16, 17] # TODO Correct?
|
52
|
+
end
|
53
|
+
it "returns the right array" do
|
54
|
+
@wrapper.locations_for(-3).should == [0, 1, 2, 3, 4]
|
55
|
+
end
|
56
|
+
it "returns the right array" do
|
57
|
+
@wrapper.locations_for(20).should == [14, 15, 16, 17, 18]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
context "without backend" do
|
63
|
+
it "fails" do
|
64
|
+
lambda { Sources::Wrappers::Location.new }.should raise_error(ArgumentError)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -39,11 +39,7 @@ describe Tokenizers::Index do
|
|
39
39
|
|
40
40
|
describe "reject!" do
|
41
41
|
it "should reject tokens if blank" do
|
42
|
-
|
43
|
-
t2 = stub(:token, :to_s => 'not blank')
|
44
|
-
t3 = stub(:token, :to_s => '')
|
45
|
-
|
46
|
-
@tokenizer.reject([t1, t2, t3]).should == [t2]
|
42
|
+
@tokenizer.reject(['', 'not blank', '']).should == ['not blank']
|
47
43
|
end
|
48
44
|
end
|
49
45
|
|
@@ -68,6 +64,7 @@ describe Tokenizers::Index do
|
|
68
64
|
#
|
69
65
|
it_should_tokenize_token "splitting on \\s", [:splitting, :on, :"\\s"]
|
70
66
|
it_should_tokenize_token 'und', [:und]
|
67
|
+
it_should_tokenize_token '7', [:'7']
|
71
68
|
end
|
72
69
|
end
|
73
70
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 11
|
8
|
+
- 0
|
9
|
+
version: 0.11.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-11-
|
17
|
+
date: 2010-11-08 00:00:00 +01:00
|
18
18
|
default_executable: picky
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -42,7 +42,9 @@ files:
|
|
42
42
|
- lib/bundling.rb
|
43
43
|
- lib/constants.rb
|
44
44
|
- lib/deployment.rb
|
45
|
+
- lib/picky/alias_instances.rb
|
45
46
|
- lib/picky/application.rb
|
47
|
+
- lib/picky/bundle.rb
|
46
48
|
- lib/picky/cacher/convenience.rb
|
47
49
|
- lib/picky/cacher/generator.rb
|
48
50
|
- lib/picky/cacher/partial/default.rb
|
@@ -60,11 +62,11 @@ files:
|
|
60
62
|
- lib/picky/cacher/weights/strategy.rb
|
61
63
|
- lib/picky/cacher/weights_generator.rb
|
62
64
|
- lib/picky/character_substitution/european.rb
|
63
|
-
- lib/picky/configuration/field.rb
|
64
65
|
- lib/picky/configuration/indexes.rb
|
65
66
|
- lib/picky/configuration/queries.rb
|
66
67
|
- lib/picky/configuration/type.rb
|
67
68
|
- lib/picky/cores.rb
|
69
|
+
- lib/picky/ext/maybe_compile.rb
|
68
70
|
- lib/picky/ext/ruby19/extconf.rb
|
69
71
|
- lib/picky/extensions/array.rb
|
70
72
|
- lib/picky/extensions/hash.rb
|
@@ -76,6 +78,7 @@ files:
|
|
76
78
|
- lib/picky/helpers/gc.rb
|
77
79
|
- lib/picky/helpers/measuring.rb
|
78
80
|
- lib/picky/index/bundle.rb
|
81
|
+
- lib/picky/index/categories.rb
|
79
82
|
- lib/picky/index/category.rb
|
80
83
|
- lib/picky/index/file/basic.rb
|
81
84
|
- lib/picky/index/file/json.rb
|
@@ -83,14 +86,18 @@ files:
|
|
83
86
|
- lib/picky/index/file/text.rb
|
84
87
|
- lib/picky/index/files.rb
|
85
88
|
- lib/picky/index/type.rb
|
89
|
+
- lib/picky/index/types.rb
|
86
90
|
- lib/picky/index/wrappers/exact_first.rb
|
87
91
|
- lib/picky/indexers/base.rb
|
88
92
|
- lib/picky/indexers/default.rb
|
89
93
|
- lib/picky/indexers/field.rb
|
90
94
|
- lib/picky/indexers/no_source_specified_error.rb
|
91
95
|
- lib/picky/indexers/solr.rb
|
92
|
-
- lib/picky/
|
93
|
-
- lib/picky/
|
96
|
+
- lib/picky/indexing/bundle.rb
|
97
|
+
- lib/picky/indexing/categories.rb
|
98
|
+
- lib/picky/indexing/category.rb
|
99
|
+
- lib/picky/indexing/type.rb
|
100
|
+
- lib/picky/indexing/types.rb
|
94
101
|
- lib/picky/loader.rb
|
95
102
|
- lib/picky/loggers/search.rb
|
96
103
|
- lib/picky/query/allocation.rb
|
@@ -98,7 +105,6 @@ files:
|
|
98
105
|
- lib/picky/query/base.rb
|
99
106
|
- lib/picky/query/combination.rb
|
100
107
|
- lib/picky/query/combinations.rb
|
101
|
-
- lib/picky/query/combinator.rb
|
102
108
|
- lib/picky/query/full.rb
|
103
109
|
- lib/picky/query/live.rb
|
104
110
|
- lib/picky/query/qualifiers.rb
|
@@ -119,9 +125,13 @@ files:
|
|
119
125
|
- lib/picky/sources/csv.rb
|
120
126
|
- lib/picky/sources/db.rb
|
121
127
|
- lib/picky/sources/delicious.rb
|
128
|
+
- lib/picky/sources/wrappers/base.rb
|
129
|
+
- lib/picky/sources/wrappers/location.rb
|
122
130
|
- lib/picky/tokenizers/base.rb
|
123
131
|
- lib/picky/tokenizers/index.rb
|
124
132
|
- lib/picky/tokenizers/query.rb
|
133
|
+
- lib/picky/type.rb
|
134
|
+
- lib/picky/types.rb
|
125
135
|
- lib/picky-tasks.rb
|
126
136
|
- lib/picky.rb
|
127
137
|
- lib/tasks/application.rake
|
@@ -161,9 +171,7 @@ files:
|
|
161
171
|
- spec/lib/cacher/weights/logarithmic_spec.rb
|
162
172
|
- spec/lib/cacher/weights_generator_spec.rb
|
163
173
|
- spec/lib/character_substitution/european_spec.rb
|
164
|
-
- spec/lib/configuration/field_spec.rb
|
165
174
|
- spec/lib/configuration/indexes_spec.rb
|
166
|
-
- spec/lib/configuration/type_spec.rb
|
167
175
|
- spec/lib/cores_spec.rb
|
168
176
|
- spec/lib/extensions/array_spec.rb
|
169
177
|
- spec/lib/extensions/hash_spec.rb
|
@@ -174,7 +182,6 @@ files:
|
|
174
182
|
- spec/lib/helpers/cache_spec.rb
|
175
183
|
- spec/lib/helpers/gc_spec.rb
|
176
184
|
- spec/lib/helpers/measuring_spec.rb
|
177
|
-
- spec/lib/index/bundle_partial_generation_speed_spec.rb
|
178
185
|
- spec/lib/index/bundle_spec.rb
|
179
186
|
- spec/lib/index/category_spec.rb
|
180
187
|
- spec/lib/index/file/basic_spec.rb
|
@@ -186,6 +193,11 @@ files:
|
|
186
193
|
- spec/lib/index/wrappers/exact_first_spec.rb
|
187
194
|
- spec/lib/indexers/base_spec.rb
|
188
195
|
- spec/lib/indexers/field_spec.rb
|
196
|
+
- spec/lib/indexing/bundle_partial_generation_speed_spec.rb
|
197
|
+
- spec/lib/indexing/bundle_spec.rb
|
198
|
+
- spec/lib/indexing/categories_spec.rb
|
199
|
+
- spec/lib/indexing/category_spec.rb
|
200
|
+
- spec/lib/indexing/type_spec.rb
|
189
201
|
- spec/lib/loader_spec.rb
|
190
202
|
- spec/lib/loggers/search_spec.rb
|
191
203
|
- spec/lib/query/allocation_spec.rb
|
@@ -193,7 +205,6 @@ files:
|
|
193
205
|
- spec/lib/query/base_spec.rb
|
194
206
|
- spec/lib/query/combination_spec.rb
|
195
207
|
- spec/lib/query/combinations_spec.rb
|
196
|
-
- spec/lib/query/combinator_spec.rb
|
197
208
|
- spec/lib/query/full_spec.rb
|
198
209
|
- spec/lib/query/live_spec.rb
|
199
210
|
- spec/lib/query/qualifiers_spec.rb
|
@@ -210,6 +221,8 @@ files:
|
|
210
221
|
- spec/lib/sources/csv_spec.rb
|
211
222
|
- spec/lib/sources/db_spec.rb
|
212
223
|
- spec/lib/sources/delicious_spec.rb
|
224
|
+
- spec/lib/sources/wrappers/base_spec.rb
|
225
|
+
- spec/lib/sources/wrappers/location_spec.rb
|
213
226
|
- spec/lib/tokenizers/base_spec.rb
|
214
227
|
- spec/lib/tokenizers/index_spec.rb
|
215
228
|
- spec/lib/tokenizers/query_spec.rb
|
@@ -260,9 +273,7 @@ test_files:
|
|
260
273
|
- spec/lib/cacher/weights/logarithmic_spec.rb
|
261
274
|
- spec/lib/cacher/weights_generator_spec.rb
|
262
275
|
- spec/lib/character_substitution/european_spec.rb
|
263
|
-
- spec/lib/configuration/field_spec.rb
|
264
276
|
- spec/lib/configuration/indexes_spec.rb
|
265
|
-
- spec/lib/configuration/type_spec.rb
|
266
277
|
- spec/lib/cores_spec.rb
|
267
278
|
- spec/lib/extensions/array_spec.rb
|
268
279
|
- spec/lib/extensions/hash_spec.rb
|
@@ -273,7 +284,6 @@ test_files:
|
|
273
284
|
- spec/lib/helpers/cache_spec.rb
|
274
285
|
- spec/lib/helpers/gc_spec.rb
|
275
286
|
- spec/lib/helpers/measuring_spec.rb
|
276
|
-
- spec/lib/index/bundle_partial_generation_speed_spec.rb
|
277
287
|
- spec/lib/index/bundle_spec.rb
|
278
288
|
- spec/lib/index/category_spec.rb
|
279
289
|
- spec/lib/index/file/basic_spec.rb
|
@@ -285,6 +295,11 @@ test_files:
|
|
285
295
|
- spec/lib/index/wrappers/exact_first_spec.rb
|
286
296
|
- spec/lib/indexers/base_spec.rb
|
287
297
|
- spec/lib/indexers/field_spec.rb
|
298
|
+
- spec/lib/indexing/bundle_partial_generation_speed_spec.rb
|
299
|
+
- spec/lib/indexing/bundle_spec.rb
|
300
|
+
- spec/lib/indexing/categories_spec.rb
|
301
|
+
- spec/lib/indexing/category_spec.rb
|
302
|
+
- spec/lib/indexing/type_spec.rb
|
288
303
|
- spec/lib/loader_spec.rb
|
289
304
|
- spec/lib/loggers/search_spec.rb
|
290
305
|
- spec/lib/query/allocation_spec.rb
|
@@ -292,7 +307,6 @@ test_files:
|
|
292
307
|
- spec/lib/query/base_spec.rb
|
293
308
|
- spec/lib/query/combination_spec.rb
|
294
309
|
- spec/lib/query/combinations_spec.rb
|
295
|
-
- spec/lib/query/combinator_spec.rb
|
296
310
|
- spec/lib/query/full_spec.rb
|
297
311
|
- spec/lib/query/live_spec.rb
|
298
312
|
- spec/lib/query/qualifiers_spec.rb
|
@@ -309,6 +323,8 @@ test_files:
|
|
309
323
|
- spec/lib/sources/csv_spec.rb
|
310
324
|
- spec/lib/sources/db_spec.rb
|
311
325
|
- spec/lib/sources/delicious_spec.rb
|
326
|
+
- spec/lib/sources/wrappers/base_spec.rb
|
327
|
+
- spec/lib/sources/wrappers/location_spec.rb
|
312
328
|
- spec/lib/tokenizers/base_spec.rb
|
313
329
|
- spec/lib/tokenizers/index_spec.rb
|
314
330
|
- spec/lib/tokenizers/query_spec.rb
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module Configuration
|
2
|
-
|
3
|
-
# Describes the configuration of a "field", a category
|
4
|
-
# (title is a category of a books index, for example).
|
5
|
-
#
|
6
|
-
class Field
|
7
|
-
attr_reader :name, :indexed_name, :virtual, :tokenizer
|
8
|
-
attr_accessor :type # convenience TODO Still needed?
|
9
|
-
def initialize name, options = {}
|
10
|
-
@name = name.to_sym
|
11
|
-
@tokenizer = options[:tokenizer] || Tokenizers::Index.default
|
12
|
-
|
13
|
-
# TODO Dup the options?
|
14
|
-
|
15
|
-
@source = options.delete :source
|
16
|
-
|
17
|
-
@indexer_class = options.delete(:indexer) || Indexers::Default
|
18
|
-
|
19
|
-
@indexed_name = options.delete(:indexed_field) || name # TODO Rename to indexed_as?
|
20
|
-
@virtual = options.delete(:virtual) || false
|
21
|
-
|
22
|
-
qualifiers = generate_qualifiers_from options
|
23
|
-
Query::Qualifiers.add(name, qualifiers) if qualifiers
|
24
|
-
|
25
|
-
# @remove = options[:remove] || false
|
26
|
-
# @filter = options[:filter] || true
|
27
|
-
|
28
|
-
@options = options
|
29
|
-
end
|
30
|
-
def generate_qualifiers_from options
|
31
|
-
options[:qualifiers] || options[:qualifier] && [options[:qualifier]] || [name]
|
32
|
-
end
|
33
|
-
def source
|
34
|
-
@source || type.source
|
35
|
-
end
|
36
|
-
def generate
|
37
|
-
Index::Category.new self.name, type, @options
|
38
|
-
end
|
39
|
-
# TODO Duplicate code in bundle. Move to application.
|
40
|
-
#
|
41
|
-
# TODO Move to type, and use in bundle from there.
|
42
|
-
#
|
43
|
-
def search_index_root
|
44
|
-
File.join PICKY_ROOT, 'index'
|
45
|
-
end
|
46
|
-
# TODO Move to config. Duplicate Code in field.rb.
|
47
|
-
#
|
48
|
-
def cache_directory
|
49
|
-
File.join search_index_root, PICKY_ENVIRONMENT, type.name.to_s
|
50
|
-
end
|
51
|
-
def search_index_file_name
|
52
|
-
File.join cache_directory, "prepared_#{name}_index.txt"
|
53
|
-
end
|
54
|
-
def index
|
55
|
-
prepare_cache_directory
|
56
|
-
indexer.index
|
57
|
-
end
|
58
|
-
def prepare_cache_directory
|
59
|
-
FileUtils.mkdir_p cache_directory
|
60
|
-
end
|
61
|
-
def cache
|
62
|
-
prepare_cache_directory
|
63
|
-
generate.generate_caches
|
64
|
-
end
|
65
|
-
def indexer
|
66
|
-
@indexer || @indexer = @indexer_class.new(type, self)
|
67
|
-
end
|
68
|
-
def virtual?
|
69
|
-
!!virtual
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
data/lib/picky/indexes.rb
DELETED
@@ -1,179 +0,0 @@
|
|
1
|
-
# TODO I should really do a Types collector class which does all this!
|
2
|
-
#
|
3
|
-
module Indexes
|
4
|
-
|
5
|
-
mattr_accessor :configuration, :types, :type_mapping
|
6
|
-
|
7
|
-
# Takes a snapshot of the originating table.
|
8
|
-
#
|
9
|
-
def self.take_snapshot *args
|
10
|
-
configuration.take_snapshot *args
|
11
|
-
end
|
12
|
-
# Runs the indexers in parallel (index + cache).
|
13
|
-
#
|
14
|
-
def self.index randomly = true
|
15
|
-
Indexes.take_snapshot
|
16
|
-
|
17
|
-
# Run in parallel.
|
18
|
-
#
|
19
|
-
# TODO Make option to also use non-random.
|
20
|
-
# rake index:random (default)
|
21
|
-
# rake index:ordered
|
22
|
-
#
|
23
|
-
timed_exclaim "INDEXING USING #{Cores.max_processors} PROCESSORS, IN #{randomly ? 'RANDOM' : 'GIVEN'} ORDER."
|
24
|
-
Cores.forked self.fields, { randomly: randomly } do |field, cores|
|
25
|
-
field.index
|
26
|
-
field.cache
|
27
|
-
end
|
28
|
-
timed_exclaim "INDEXING FINISHED."
|
29
|
-
end
|
30
|
-
def self.index_solr
|
31
|
-
configuration.index_solr
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns an array of fields.
|
35
|
-
#
|
36
|
-
# TODO Rewrite.
|
37
|
-
#
|
38
|
-
def self.fields
|
39
|
-
result = []
|
40
|
-
configuration.types.each do |type|
|
41
|
-
type.fields.inject(result) do |total, field|
|
42
|
-
total << field
|
43
|
-
end
|
44
|
-
end
|
45
|
-
result
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
#
|
50
|
-
# TODO Rewrite.
|
51
|
-
#
|
52
|
-
def self.find type_name, field_name
|
53
|
-
type_name = type_name.to_sym
|
54
|
-
field_name = field_name.to_sym
|
55
|
-
configuration.types.each do |type|
|
56
|
-
next unless type.name == type_name
|
57
|
-
type.fields.each do |field|
|
58
|
-
next unless field.name == field_name
|
59
|
-
return field
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Backup / Restore.
|
65
|
-
#
|
66
|
-
def self.backup_caches
|
67
|
-
each_category do |category|
|
68
|
-
category.exact.backup
|
69
|
-
category.partial.backup
|
70
|
-
end
|
71
|
-
end
|
72
|
-
def self.restore_caches
|
73
|
-
each_category do |category|
|
74
|
-
category.exact.restore
|
75
|
-
category.partial.restore
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Use these if you need to index / cache a single index.
|
80
|
-
#
|
81
|
-
def self.generate_index_only type_name, field_name
|
82
|
-
Indexes.configuration.types.each do |type|
|
83
|
-
next unless type_name == type.name
|
84
|
-
type.fields.each do |field|
|
85
|
-
field.index if field_name == field.name
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
def self.generate_cache_only type_name, category_name
|
90
|
-
Indexes.each do |type|
|
91
|
-
next unless type_name == type.name
|
92
|
-
type.categories.each do |category|
|
93
|
-
category.generate_caches if category_name == category.name
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# Runs the index cache generation.
|
99
|
-
#
|
100
|
-
# TODO Needed?
|
101
|
-
#
|
102
|
-
def self.generate_caches
|
103
|
-
each &:generate_caches
|
104
|
-
end
|
105
|
-
# Loads all indexes from the caches.
|
106
|
-
#
|
107
|
-
# TODO Rename load_indexes.
|
108
|
-
#
|
109
|
-
def self.load_from_cache
|
110
|
-
each &:load_from_cache
|
111
|
-
end
|
112
|
-
def self.reload
|
113
|
-
load_from_cache
|
114
|
-
end
|
115
|
-
|
116
|
-
# Checks if the caches are there.
|
117
|
-
#
|
118
|
-
def self.check_caches
|
119
|
-
each do |type|
|
120
|
-
type.categories.each do |category|
|
121
|
-
category.exact.raise_unless_cache_exists
|
122
|
-
category.partial.raise_unless_cache_exists
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# Removes the cache files.
|
128
|
-
#
|
129
|
-
def self.clear_caches
|
130
|
-
each_bundle do |exact, partial|
|
131
|
-
exact.delete
|
132
|
-
partial.delete
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
# Creates the directory structure for the indexes.
|
137
|
-
#
|
138
|
-
# TODO Should be on type?
|
139
|
-
#
|
140
|
-
def self.create_directory_structure
|
141
|
-
each_bundle do |exact, partial|
|
142
|
-
exact.create_directory
|
143
|
-
partial.create_directory
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
#
|
148
|
-
#
|
149
|
-
def self.clear
|
150
|
-
self.types = [] # TODO self.types = Types.new
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
|
-
def self.each &block
|
155
|
-
types.each &block
|
156
|
-
end
|
157
|
-
def self.each_category &block
|
158
|
-
each do |type|
|
159
|
-
type.categories.each &block
|
160
|
-
end
|
161
|
-
end
|
162
|
-
def self.each_bundle
|
163
|
-
each_category do |category|
|
164
|
-
yield category.exact, category.partial
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def self.add type
|
169
|
-
self.type_mapping ||= {}
|
170
|
-
self.types ||= []
|
171
|
-
|
172
|
-
self.type_mapping[type.name] = type
|
173
|
-
self.types << type
|
174
|
-
end
|
175
|
-
def self.[] type_name
|
176
|
-
self.type_mapping[type_name]
|
177
|
-
end
|
178
|
-
|
179
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require File.expand_path '../../ext/ruby19/performant', __FILE__
|