picky 0.10.5 → 0.11.0
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/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__
|