picky 2.6.0 → 2.7.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/analyzer.rb +4 -4
- data/lib/picky/application.rb +6 -7
- data/lib/picky/backend/{backend.rb → base.rb} +31 -14
- data/lib/picky/backend/file/basic.rb +12 -4
- data/lib/picky/backend/file/json.rb +5 -5
- data/lib/picky/backend/file/text.rb +1 -1
- data/lib/picky/backend/files.rb +3 -9
- data/lib/picky/backend/redis/basic.rb +8 -0
- data/lib/picky/backend/redis/list_hash.rb +5 -5
- data/lib/picky/backend/redis/string_hash.rb +5 -5
- data/lib/picky/backend/redis.rb +5 -5
- data/lib/picky/bundle.rb +62 -0
- data/lib/picky/categories.rb +10 -9
- data/lib/picky/categories_indexed.rb +12 -7
- data/lib/picky/categories_indexing.rb +7 -9
- data/lib/picky/category.rb +38 -26
- data/lib/picky/category_indexed.rb +4 -20
- data/lib/picky/category_indexing.rb +71 -68
- data/lib/picky/generators/base.rb +6 -6
- data/lib/picky/generators/partial/substring.rb +28 -26
- data/lib/picky/generators/partial_generator.rb +3 -3
- data/lib/picky/generators/similarity/phonetic.rb +5 -5
- data/lib/picky/generators/similarity_generator.rb +2 -2
- data/lib/picky/generators/weights/logarithmic.rb +3 -3
- data/lib/picky/generators/weights_generator.rb +2 -2
- data/lib/picky/index/base.rb +13 -10
- data/lib/picky/index/base_indexed.rb +2 -0
- data/lib/picky/index/base_indexing.rb +65 -57
- data/lib/picky/indexed/bundle/base.rb +21 -86
- data/lib/picky/indexed/bundle/memory.rb +5 -12
- data/lib/picky/indexed/bundle/redis.rb +42 -0
- data/lib/picky/indexed/wrappers/bundle/wrapper.rb +3 -3
- data/lib/picky/indexers/base.rb +20 -3
- data/lib/picky/indexers/parallel.rb +32 -14
- data/lib/picky/indexers/serial.rb +29 -26
- data/lib/picky/indexes.rb +5 -3
- data/lib/picky/indexes_indexed.rb +3 -15
- data/lib/picky/indexes_indexing.rb +18 -21
- data/lib/picky/indexing/bundle/base.rb +64 -45
- data/lib/picky/indexing/bundle/memory.rb +0 -4
- data/lib/picky/loader.rb +7 -6
- data/lib/picky/query/allocation.rb +3 -3
- data/lib/picky/query/token.rb +5 -1
- data/lib/picky/search.rb +5 -0
- data/lib/picky/sources/base.rb +21 -2
- data/lib/picky/sources/db.rb +0 -7
- data/lib/picky/statistics.rb +9 -12
- data/lib/picky/tokenizers/location.rb +1 -1
- data/lib/tasks/checks.rake +8 -6
- data/lib/tasks/index.rake +14 -20
- data/lib/tasks/server.rake +18 -2
- data/lib/tasks/statistics.rake +27 -14
- data/lib/tasks/todo.rake +2 -2
- data/lib/tasks/try.rake +12 -27
- data/spec/lib/application_spec.rb +1 -1
- data/spec/lib/backend/file/basic_spec.rb +6 -6
- data/spec/lib/backend/file/json_spec.rb +11 -6
- data/spec/lib/backend/file/marshal_spec.rb +11 -6
- data/spec/lib/backend/files_spec.rb +21 -7
- data/spec/lib/backend/redis/basic_spec.rb +6 -0
- data/spec/lib/backend/redis/list_hash_spec.rb +9 -3
- data/spec/lib/backend/redis/string_hash_spec.rb +7 -1
- data/spec/lib/backend/redis_spec.rb +22 -12
- data/spec/lib/categories_indexed_spec.rb +2 -2
- data/spec/lib/category_indexing_spec.rb +12 -33
- data/spec/lib/category_spec.rb +22 -0
- data/spec/lib/index/base_indexing_spec.rb +30 -0
- data/spec/lib/indexed/bundle/memory_spec.rb +13 -20
- data/spec/lib/indexers/base_spec.rb +39 -4
- data/spec/lib/indexers/parallel_spec.rb +2 -10
- data/spec/lib/indexers/serial_spec.rb +11 -26
- data/spec/lib/indexes_class_spec.rb +4 -4
- data/spec/lib/indexes_indexed_spec.rb +2 -2
- data/spec/lib/indexes_indexing_spec.rb +6 -10
- data/spec/lib/indexes_spec.rb +3 -3
- data/spec/lib/indexing/bundle/{super_base_spec.rb → base_spec.rb} +2 -2
- data/spec/lib/indexing/bundle/memory_partial_generation_speed_spec.rb +3 -3
- data/spec/lib/indexing/bundle/memory_spec.rb +16 -14
- data/spec/lib/indexing/bundle/redis_spec.rb +18 -16
- data/spec/lib/query/allocation_spec.rb +1 -1
- data/spec/lib/query/token_spec.rb +5 -7
- data/spec/lib/sources/base_spec.rb +53 -0
- data/spec/lib/sources/db_spec.rb +0 -7
- metadata +11 -12
- data/lib/picky/indexers/solr.rb +0 -56
- data/lib/picky/indexing/bundle/super_base.rb +0 -61
- data/lib/picky/solr/schema_generator.rb +0 -74
- data/lib/tasks/search.rake +0 -9
- data/lib/tasks/shortcuts.rake +0 -32
- data/lib/tasks/solr.rake +0 -36
data/lib/tasks/try.rake
CHANGED
@@ -1,34 +1,19 @@
|
|
1
1
|
# Tasks for manually testing your engine configuration.
|
2
2
|
#
|
3
|
-
|
3
|
+
desc "Try the given text in the indexer/query (index and category optional)."
|
4
|
+
task :try, [:text, :index, :category] => :application do |_, options|
|
5
|
+
text, index, category = options.text, options.index, options.category
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
text, index, category = options.text, options.index, options.category
|
7
|
+
puts
|
8
|
+
fail "\x1b[31mrake try needs a text to try indexing and query preparation\x1b[m, e.g. rake 'try[yourtext]'." unless text
|
8
9
|
|
9
|
-
|
10
|
+
specific = Indexes
|
11
|
+
specific = specific[index] if index
|
12
|
+
specific = specific[category] if category
|
10
13
|
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
# desc "Try how a given word would be tokenized when querying."
|
15
|
-
task :query, [:text] => :application do |_, options|
|
16
|
-
text = options.text
|
17
|
-
|
18
|
-
puts "\"#{text}\" as a search will be preprocessed into #{Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
|
19
|
-
puts
|
20
|
-
puts "(category qualifiers, e.g. title: are removed if they do not exist as a qualifier, so 'toitle:bla' -> 'bla')"
|
21
|
-
end
|
22
|
-
|
23
|
-
# desc "Try the given text with both the index and the query (type:category optional)."
|
24
|
-
task :both, [:text, :index, :category] => :application do |_, options|
|
25
|
-
text, index, category = options.text, options.index, options.category
|
26
|
-
|
27
|
-
puts
|
28
|
-
fail "\x1b[31mrake try needs a text to try indexing and query preparation\x1b[m, e.g. rake 'try[yourtext]'." unless text
|
29
|
-
|
30
|
-
Rake::Task[:"try:index"].invoke text, index, category
|
31
|
-
Rake::Task[:"try:query"].invoke text
|
32
|
-
end
|
14
|
+
puts "\"#{text}\" is saved in the #{specific.identifier} index as #{specific.tokenizer.tokenize(text.dup).to_a}"
|
33
15
|
|
16
|
+
puts "\"#{text}\" as a search will be tokenized into #{Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
|
17
|
+
puts
|
18
|
+
puts "(category qualifiers, e.g. title: are removed if they do not exist as a qualifier, so 'toitle:bla' -> 'bla')"
|
34
19
|
end
|
@@ -37,7 +37,7 @@ describe Application do
|
|
37
37
|
normalizes_words: [[/Deoxyribonucleic Acid/i, 'DNA']],
|
38
38
|
|
39
39
|
substitutes_characters_with: CharacterSubstituters::WestEuropean.new,
|
40
|
-
maximum_tokens: 5
|
40
|
+
maximum_tokens: 5
|
41
41
|
|
42
42
|
books_index = Index::Memory.new :books,
|
43
43
|
source: Sources::DB.new('SELECT id, title, author, isbn13 as isbn FROM books', :file => 'app/db.yml')
|
@@ -10,16 +10,16 @@ describe Backend::File::Basic do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
describe 'to_s' do
|
14
|
-
it 'returns the cache path with the default file extension' do
|
15
|
-
file.to_s.should == 'some/cache/path/to/file.index'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
13
|
describe 'backup_directory' do
|
20
14
|
it "returns the cache path's backup path" do
|
21
15
|
file.backup_directory.should == 'some/cache/path/to/backup'
|
22
16
|
end
|
23
17
|
end
|
24
18
|
|
19
|
+
describe 'to_s' do
|
20
|
+
it 'returns the cache path with the default file extension' do
|
21
|
+
file.to_s.should == 'Backend::File::Basic(some/cache/path/to/file.index)'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
25
|
end
|
@@ -2,25 +2,30 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Backend::File::JSON do
|
4
4
|
|
5
|
-
|
6
|
-
@file = described_class.new "some_cache_path"
|
7
|
-
end
|
5
|
+
let(:file) { described_class.new 'some/cache/path/to/file' }
|
8
6
|
|
9
7
|
describe "dump" do
|
10
8
|
it "delegates to the given hash" do
|
11
9
|
hash = stub :hash
|
12
10
|
|
13
|
-
hash.should_receive(:dump_json).once.with "
|
11
|
+
hash.should_receive(:dump_json).once.with "some/cache/path/to/file.json"
|
14
12
|
|
15
|
-
|
13
|
+
file.dump hash
|
16
14
|
end
|
17
15
|
end
|
16
|
+
|
18
17
|
describe "retrieve" do
|
19
18
|
it "raises" do
|
20
19
|
lambda do
|
21
|
-
|
20
|
+
file.retrieve
|
22
21
|
end.should raise_error("Can't retrieve from JSON file. Use text file.")
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
25
|
+
describe 'to_s' do
|
26
|
+
it 'returns the cache path with the default file extension' do
|
27
|
+
file.to_s.should == 'Backend::File::JSON(some/cache/path/to/file.json)'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
26
31
|
end
|
@@ -2,25 +2,30 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Backend::File::Marshal do
|
4
4
|
|
5
|
-
|
6
|
-
@file = described_class.new "some_cache_path"
|
7
|
-
end
|
5
|
+
let(:file) { described_class.new 'some/cache/path/to/file' }
|
8
6
|
|
9
7
|
describe "dump" do
|
10
8
|
it "delegates to the given hash" do
|
11
9
|
hash = stub :hash
|
12
10
|
|
13
|
-
hash.should_receive(:dump_marshalled).once.with "
|
11
|
+
hash.should_receive(:dump_marshalled).once.with "some/cache/path/to/file.dump"
|
14
12
|
|
15
|
-
|
13
|
+
file.dump hash
|
16
14
|
end
|
17
15
|
end
|
16
|
+
|
18
17
|
describe "retrieve" do
|
19
18
|
it "raises" do
|
20
19
|
lambda do
|
21
|
-
|
20
|
+
file.retrieve
|
22
21
|
end.should raise_error("Can't retrieve from marshalled file. Use text file.")
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
25
|
+
describe 'to_s' do
|
26
|
+
it 'returns the cache path with the default file extension' do
|
27
|
+
file.to_s.should == 'Backend::File::Marshal(some/cache/path/to/file.dump)'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
26
31
|
end
|
@@ -10,7 +10,7 @@ describe Backend::Files do
|
|
10
10
|
|
11
11
|
@prepared = @files.prepared
|
12
12
|
|
13
|
-
@index = @files.
|
13
|
+
@index = @files.inverted
|
14
14
|
@weights = @files.weights
|
15
15
|
@similarity = @files.similarity
|
16
16
|
@configuration = @files.configuration
|
@@ -25,11 +25,14 @@ describe Backend::Files do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "dump indexes" do
|
28
|
+
before(:each) do
|
29
|
+
@files.stub! :timed_exclaim
|
30
|
+
end
|
28
31
|
describe "dump_index" do
|
29
32
|
it "uses the right file" do
|
30
33
|
@index.should_receive(:dump).once.with :some_hash
|
31
34
|
|
32
|
-
@files.
|
35
|
+
@files.dump_inverted :some_hash
|
33
36
|
end
|
34
37
|
end
|
35
38
|
describe "dump_weights" do
|
@@ -63,9 +66,9 @@ describe Backend::Files do
|
|
63
66
|
it "uses the right file" do
|
64
67
|
Yajl::Parser.stub! :parse
|
65
68
|
|
66
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
69
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_name_inverted.json', 'r'
|
67
70
|
|
68
|
-
@files.
|
71
|
+
@files.load_inverted
|
69
72
|
end
|
70
73
|
end
|
71
74
|
describe "load_weights" do
|
@@ -102,7 +105,7 @@ describe Backend::Files do
|
|
102
105
|
it 'uses the right method' do
|
103
106
|
@index.should_receive(:cache_ok?).once.with
|
104
107
|
|
105
|
-
@files.
|
108
|
+
@files.inverted_cache_ok?
|
106
109
|
end
|
107
110
|
end
|
108
111
|
describe "weights_cache_ok?" do
|
@@ -122,11 +125,11 @@ describe Backend::Files do
|
|
122
125
|
end
|
123
126
|
|
124
127
|
describe 'dump indexes' do
|
125
|
-
describe '
|
128
|
+
describe 'inverted_cache_small?' do
|
126
129
|
it 'uses the right method' do
|
127
130
|
@index.should_receive(:cache_small?).once.with
|
128
131
|
|
129
|
-
@files.
|
132
|
+
@files.inverted_cache_small?
|
130
133
|
end
|
131
134
|
end
|
132
135
|
describe 'weights_cache_small?' do
|
@@ -181,5 +184,16 @@ describe Backend::Files do
|
|
181
184
|
@files.bundle_name.should == :some_name
|
182
185
|
end
|
183
186
|
end
|
187
|
+
|
188
|
+
describe 'to_s' do
|
189
|
+
it 'returns the right value' do
|
190
|
+
category = stub :category,
|
191
|
+
:identifier => "category_identifier",
|
192
|
+
:prepared_index_path => "prepared/index/path",
|
193
|
+
:index_path => 'index/path'
|
194
|
+
|
195
|
+
described_class.new("some_bundle", category).to_s.should == "Backend::Files(Backend::File::Text(prepared/index/path.txt), Backend::File::JSON(index/path.json), Backend::File::JSON(index/path.json), Backend::File::Marshal(index/path.dump), Backend::File::JSON(index/path.json))"
|
196
|
+
end
|
197
|
+
end
|
184
198
|
|
185
199
|
end
|
@@ -8,7 +8,7 @@ describe Backend::Redis::ListHash do
|
|
8
8
|
it 'raises an error' do
|
9
9
|
expect {
|
10
10
|
index.member :some_sym
|
11
|
-
}.to raise_error("Can't retrieve
|
11
|
+
}.to raise_error("Can't retrieve single value :some_sym from a Redis ListHash. Use Index::Redis::StringHash.")
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -17,7 +17,7 @@ describe Backend::Redis::ListHash do
|
|
17
17
|
backend = stub :backend
|
18
18
|
index.should_receive(:backend).and_return backend
|
19
19
|
|
20
|
-
backend.stub! :
|
20
|
+
backend.stub! :zrange => :some_lrange_result
|
21
21
|
|
22
22
|
index.collection(:anything).should == :some_lrange_result
|
23
23
|
end
|
@@ -25,10 +25,16 @@ describe Backend::Redis::ListHash do
|
|
25
25
|
backend = stub :backend
|
26
26
|
index.should_receive(:backend).and_return backend
|
27
27
|
|
28
|
-
backend.should_receive(:
|
28
|
+
backend.should_receive(:zrange).once.with "some_namespace:some_sym", 0, -1
|
29
29
|
|
30
30
|
index.collection :some_sym
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
describe 'to_s' do
|
35
|
+
it 'returns the cache path with the default file extension' do
|
36
|
+
index.to_s.should == 'Backend::Redis::ListHash(some_namespace:*)'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
34
40
|
end
|
@@ -17,7 +17,7 @@ describe Backend::Redis::StringHash do
|
|
17
17
|
|
18
18
|
describe 'collection' do
|
19
19
|
it 'raises' do
|
20
|
-
expect { index.collection :anything }.to raise_error("Can't retrieve
|
20
|
+
expect { index.collection :anything }.to raise_error("Can't retrieve collection for :anything from a StringHash. Use Index::Redis::ListHash.")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -38,4 +38,10 @@ describe Backend::Redis::StringHash do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
describe 'to_s' do
|
42
|
+
it 'returns the cache path with the default file extension' do
|
43
|
+
index.to_s.should == 'Backend::Redis::StringHash(some_namespace:*)'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
41
47
|
end
|
@@ -58,18 +58,18 @@ describe Backend::Redis do
|
|
58
58
|
end
|
59
59
|
describe 'ids' do
|
60
60
|
it 'delegates to the index' do
|
61
|
-
|
62
|
-
redis.stub! :
|
61
|
+
inverted = stub :inverted
|
62
|
+
redis.stub! :inverted => inverted
|
63
63
|
|
64
|
-
|
64
|
+
inverted.should_receive(:collection).once.with :some_sym
|
65
65
|
|
66
66
|
redis.ids :some_sym
|
67
67
|
end
|
68
68
|
it 'returns the value' do
|
69
|
-
|
70
|
-
redis.stub! :
|
69
|
+
inverted = stub :inverted
|
70
|
+
redis.stub! :inverted => inverted
|
71
71
|
|
72
|
-
|
72
|
+
inverted.should_receive(:collection).any_number_of_times.and_return [1,2,3]
|
73
73
|
|
74
74
|
redis.ids(:any).should == [1,2,3]
|
75
75
|
end
|
@@ -132,22 +132,32 @@ describe Backend::Redis do
|
|
132
132
|
end
|
133
133
|
describe 'ids' do
|
134
134
|
it 'delegates to the index' do
|
135
|
-
|
136
|
-
redis.stub! :
|
135
|
+
inverted = stub :inverted
|
136
|
+
redis.stub! :inverted => inverted
|
137
137
|
|
138
|
-
|
138
|
+
inverted.should_receive(:collection).once.with :some_sym
|
139
139
|
|
140
140
|
redis.ids :some_sym
|
141
141
|
end
|
142
142
|
it 'returns the value' do
|
143
|
-
|
144
|
-
redis.stub! :
|
143
|
+
inverted = stub :inverted
|
144
|
+
redis.stub! :inverted => inverted
|
145
145
|
|
146
|
-
|
146
|
+
inverted.should_receive(:collection).any_number_of_times.and_return [1,2,3]
|
147
147
|
|
148
148
|
redis.ids(:any).should == [1,2,3]
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
152
|
+
|
153
|
+
describe 'to_s' do
|
154
|
+
it 'returns the right value' do
|
155
|
+
category = stub :category,
|
156
|
+
:identifier => "category_identifier",
|
157
|
+
:prepared_index_path => "prepared/index/path"
|
158
|
+
|
159
|
+
described_class.new("some_bundle", category).to_s.should == "Backend::Redis(Backend::File::Text(prepared/index/path.txt), some_bundle, category_identifier)"
|
160
|
+
end
|
161
|
+
end
|
152
162
|
|
153
163
|
end
|
@@ -39,7 +39,7 @@ describe Categories do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
describe '
|
42
|
+
describe 'clear_categories' do
|
43
43
|
before(:each) do
|
44
44
|
@categories = described_class.new
|
45
45
|
end
|
@@ -56,7 +56,7 @@ describe Categories do
|
|
56
56
|
it "is clear again after clearing" do
|
57
57
|
@categories << stub(:category, :name => :some_name)
|
58
58
|
|
59
|
-
@categories.
|
59
|
+
@categories.clear_categories
|
60
60
|
|
61
61
|
@categories.categories.should be_empty
|
62
62
|
@categories.category_hash.should be_empty
|
@@ -12,36 +12,36 @@ describe Category do
|
|
12
12
|
let(:exact) { category.indexing_exact }
|
13
13
|
let(:partial) { category.indexing_partial }
|
14
14
|
|
15
|
-
describe '
|
15
|
+
describe 'backup' do
|
16
16
|
it 'delegates to both bundles' do
|
17
17
|
exact.should_receive(:backup).once.with()
|
18
18
|
partial.should_receive(:backup).once.with()
|
19
19
|
|
20
|
-
category.
|
20
|
+
category.backup
|
21
21
|
end
|
22
22
|
end
|
23
|
-
describe '
|
23
|
+
describe 'restore' do
|
24
24
|
it 'delegates to both bundles' do
|
25
25
|
exact.should_receive(:restore).once.with()
|
26
26
|
partial.should_receive(:restore).once.with()
|
27
27
|
|
28
|
-
category.
|
28
|
+
category.restore
|
29
29
|
end
|
30
30
|
end
|
31
|
-
describe '
|
31
|
+
describe 'check' do
|
32
32
|
it 'delegates to both bundles' do
|
33
33
|
exact.should_receive(:raise_unless_cache_exists).once.with()
|
34
34
|
partial.should_receive(:raise_unless_cache_exists).once.with()
|
35
35
|
|
36
|
-
category.
|
36
|
+
category.check
|
37
37
|
end
|
38
38
|
end
|
39
|
-
describe '
|
39
|
+
describe 'clear' do
|
40
40
|
it 'delegates to both bundles' do
|
41
41
|
exact.should_receive(:delete).once.with()
|
42
42
|
partial.should_receive(:delete).once.with()
|
43
43
|
|
44
|
-
category.
|
44
|
+
category.clear
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -79,7 +79,7 @@ describe Category do
|
|
79
79
|
end
|
80
80
|
it 'should use the exact index to generate the partial index' do
|
81
81
|
exact_index = stub :exact_index
|
82
|
-
exact.stub! :
|
82
|
+
exact.stub! :inverted => exact_index
|
83
83
|
partial.should_receive(:generate_partial_from).once.with(exact_index)
|
84
84
|
|
85
85
|
category.generate_partial
|
@@ -94,7 +94,7 @@ describe Category do
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
describe '
|
97
|
+
describe 'cache' do
|
98
98
|
it 'should call multiple methods in order' do
|
99
99
|
category.should_receive(:configure).once.with().ordered
|
100
100
|
category.should_receive(:generate_caches_from_source).once.with().ordered
|
@@ -103,7 +103,7 @@ describe Category do
|
|
103
103
|
category.should_receive(:dump_caches).once.with().ordered
|
104
104
|
category.should_receive(:timed_exclaim).once.ordered
|
105
105
|
|
106
|
-
category.
|
106
|
+
category.cache
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -159,34 +159,13 @@ describe Category do
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
describe "cache" do
|
163
|
-
before(:each) do
|
164
|
-
category.stub! :generate_caches
|
165
|
-
category.stub! :configure
|
166
|
-
end
|
167
|
-
it "prepares the cache directory" do
|
168
|
-
category.should_receive(:prepare_index_directory).once.with
|
169
|
-
|
170
|
-
category.cache
|
171
|
-
end
|
172
|
-
it "tells the indexer to index" do
|
173
|
-
category.should_receive(:generate_caches).once.with
|
174
|
-
|
175
|
-
category.cache
|
176
|
-
end
|
177
|
-
end
|
178
162
|
describe "index" do
|
179
163
|
before(:each) do
|
180
164
|
@indexer = stub :indexer, :index => nil
|
181
165
|
category.stub! :indexer => @indexer
|
182
166
|
end
|
183
|
-
it "prepares the cache directory" do
|
184
|
-
category.should_receive(:prepare_index_directory).once.with
|
185
|
-
|
186
|
-
category.prepare
|
187
|
-
end
|
188
167
|
it "tells the indexer to index" do
|
189
|
-
@indexer.should_receive(:index).once.with
|
168
|
+
@indexer.should_receive(:index).once.with [category]
|
190
169
|
|
191
170
|
category.prepare
|
192
171
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Category do
|
4
|
+
|
5
|
+
let(:index) { Index::Memory.new :some_index, source: [] }
|
6
|
+
let(:category) { described_class.new :some_category, index }
|
7
|
+
|
8
|
+
it 'should set defaults correctly' do
|
9
|
+
category.indexing_exact.weights_strategy.should == Generators::Weights::Default
|
10
|
+
category.indexing_exact.partial_strategy.should be_kind_of(Generators::Partial::None)
|
11
|
+
category.indexing_exact.similarity_strategy.should == Generators::Similarity::Default
|
12
|
+
|
13
|
+
category.indexing_partial.weights_strategy.should be_kind_of(Generators::Weights::Logarithmic)
|
14
|
+
category.indexing_partial.partial_strategy.should == Generators::Partial::Default
|
15
|
+
category.indexing_partial.similarity_strategy.should be_kind_of(Generators::Similarity::None)
|
16
|
+
|
17
|
+
category.indexed_exact.similarity_strategy.should == Generators::Similarity::Default
|
18
|
+
|
19
|
+
category.indexed_partial.similarity_strategy.should be_kind_of(Generators::Similarity::None)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -2,6 +2,36 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Index::Base do
|
4
4
|
|
5
|
+
context 'in general' do
|
6
|
+
context 'with #each source' do
|
7
|
+
let(:index) { described_class.new :some_name, source: [] }
|
8
|
+
|
9
|
+
it 'does things in order' do
|
10
|
+
index.should_receive(:check_source_empty).once.with.ordered
|
11
|
+
index.should_receive(:index_in_parallel).once.with.ordered
|
12
|
+
|
13
|
+
index.index
|
14
|
+
end
|
15
|
+
end
|
16
|
+
context 'with non#each source' do
|
17
|
+
let(:source) { stub :source, :harvest => nil }
|
18
|
+
let(:index) { described_class.new :some_name, source: source }
|
19
|
+
|
20
|
+
it 'does things in order' do
|
21
|
+
category = stub :category
|
22
|
+
index.stub! :categories => [
|
23
|
+
category,
|
24
|
+
category,
|
25
|
+
category
|
26
|
+
]
|
27
|
+
|
28
|
+
category.should_receive(:index).exactly(3).times
|
29
|
+
|
30
|
+
index.index
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
5
35
|
context "with categories" do
|
6
36
|
before(:each) do
|
7
37
|
@source = []
|
@@ -12,28 +12,21 @@ describe Indexed::Bundle::Memory do
|
|
12
12
|
|
13
13
|
describe 'to_s' do
|
14
14
|
it 'does something' do
|
15
|
-
@bundle.to_s.should ==
|
16
|
-
Memory
|
17
|
-
Files:
|
18
|
-
Index: spec/test_directory/index/test/some_index/some_category_some_name_index.json
|
19
|
-
Weights: spec/test_directory/index/test/some_index/some_category_some_name_weights.json
|
20
|
-
Similarity: spec/test_directory/index/test/some_index/some_category_some_name_similarity.dump
|
21
|
-
Config: spec/test_directory/index/test/some_index/some_category_some_name_configuration.json
|
22
|
-
TO_S
|
15
|
+
@bundle.to_s.should == "Indexed::Bundle::Memory(test:some_index:some_category:some_name, Backend::Files(Backend::File::Text(spec/test_directory/index/test/some_index/prepared_some_category_index.txt), Backend::File::JSON(spec/test_directory/index/test/some_index/some_category_some_name_inverted.json), Backend::File::JSON(spec/test_directory/index/test/some_index/some_category_some_name_weights.json), Backend::File::Marshal(spec/test_directory/index/test/some_index/some_category_some_name_similarity.dump), Backend::File::JSON(spec/test_directory/index/test/some_index/some_category_some_name_configuration.json)))"
|
23
16
|
end
|
24
17
|
end
|
25
18
|
|
26
19
|
describe 'clear_index' do
|
27
20
|
before(:each) do
|
28
|
-
@bundle.instance_variable_set(:@
|
21
|
+
@bundle.instance_variable_set(:@inverted, :not_empty)
|
29
22
|
end
|
30
|
-
it 'has not cleared the index' do
|
31
|
-
@bundle.
|
23
|
+
it 'has not cleared the inverted index' do
|
24
|
+
@bundle.inverted.should == :not_empty
|
32
25
|
end
|
33
|
-
it 'clears the index' do
|
34
|
-
@bundle.
|
26
|
+
it 'clears the inverted index' do
|
27
|
+
@bundle.clear_inverted
|
35
28
|
|
36
|
-
@bundle.
|
29
|
+
@bundle.inverted.should be_empty
|
37
30
|
end
|
38
31
|
end
|
39
32
|
describe 'clear_weights' do
|
@@ -78,13 +71,13 @@ Memory
|
|
78
71
|
|
79
72
|
describe 'identifier' do
|
80
73
|
it 'should return a specific identifier' do
|
81
|
-
@bundle.identifier.should == 'some_index:some_category:some_name'
|
74
|
+
@bundle.identifier.should == 'test:some_index:some_category:some_name'
|
82
75
|
end
|
83
76
|
end
|
84
77
|
|
85
78
|
describe 'ids' do
|
86
79
|
before(:each) do
|
87
|
-
@bundle.instance_variable_set :@
|
80
|
+
@bundle.instance_variable_set :@inverted, { :existing => :some_ids }
|
88
81
|
end
|
89
82
|
it 'should return an empty array if not found' do
|
90
83
|
@bundle.ids(:non_existing).should == []
|
@@ -108,7 +101,7 @@ Memory
|
|
108
101
|
|
109
102
|
describe 'load' do
|
110
103
|
it 'should trigger loads' do
|
111
|
-
@bundle.should_receive(:
|
104
|
+
@bundle.should_receive(:load_inverted).once.with
|
112
105
|
@bundle.should_receive(:load_weights).once.with
|
113
106
|
@bundle.should_receive(:load_similarity).once.with
|
114
107
|
@bundle.should_receive(:load_configuration).once.with
|
@@ -124,9 +117,9 @@ Memory
|
|
124
117
|
it "uses the right file" do
|
125
118
|
Yajl::Parser.stub! :parse
|
126
119
|
|
127
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
120
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_name_inverted.json', 'r'
|
128
121
|
|
129
|
-
@bundle.
|
122
|
+
@bundle.load_inverted
|
130
123
|
end
|
131
124
|
end
|
132
125
|
describe "load_weights" do
|
@@ -166,7 +159,7 @@ Memory
|
|
166
159
|
@bundle = described_class.new :some_name, @category, :similarity
|
167
160
|
end
|
168
161
|
it 'should initialize the index correctly' do
|
169
|
-
@bundle.
|
162
|
+
@bundle.inverted.should == {}
|
170
163
|
end
|
171
164
|
it 'should initialize the weights index correctly' do
|
172
165
|
@bundle.weights.should == {}
|