picky 2.1.2 → 2.2.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 → aux}/picky/cli.rb +50 -38
- data/bin/picky +1 -1
- data/lib/picky/application.rb +5 -2
- data/lib/picky/index/base.rb +88 -25
- data/lib/picky/index/memory.rb +8 -8
- data/lib/picky/index/redis.rb +8 -8
- data/lib/picky/index_bundle.rb +2 -2
- data/lib/picky/indexing/indexes.rb +6 -6
- data/lib/picky/internals/calculations/location.rb +54 -42
- data/lib/picky/internals/index/backend.rb +21 -21
- data/lib/picky/internals/index/file/text.rb +11 -11
- data/lib/picky/internals/index/files.rb +6 -6
- data/lib/picky/internals/index/redis.rb +14 -14
- data/lib/picky/internals/indexed/bundle/base.rb +2 -2
- data/lib/picky/internals/indexed/bundle/redis.rb +3 -3
- data/lib/picky/internals/indexed/category.rb +8 -9
- data/lib/picky/internals/indexed/wrappers/bundle/calculation.rb +25 -23
- data/lib/picky/internals/indexed/wrappers/bundle/location.rb +36 -34
- data/lib/picky/internals/indexed/wrappers/bundle/wrapper.rb +35 -33
- data/lib/picky/internals/indexed/wrappers/category/location.rb +27 -0
- data/lib/picky/internals/indexers/base.rb +28 -0
- data/lib/picky/internals/indexers/parallel.rb +64 -0
- data/lib/picky/internals/indexers/serial.rb +20 -29
- data/lib/picky/internals/indexing/bundle/base.rb +2 -2
- data/lib/picky/internals/indexing/bundle/super_base.rb +3 -3
- data/lib/picky/internals/indexing/category.rb +30 -27
- data/lib/picky/internals/indexing/index.rb +82 -27
- data/lib/picky/internals/indexing/wrappers/category/location.rb +27 -0
- data/lib/picky/internals/query/indexes.rb +1 -1
- data/lib/picky/internals/query/qualifiers.rb +7 -6
- data/lib/picky/internals/query/weights.rb +6 -0
- data/lib/picky/internals/shared/category.rb +52 -0
- data/lib/picky/internals/tokenizers/base.rb +1 -1
- data/lib/picky/internals/tokenizers/location.rb +54 -0
- data/lib/picky/loader.rb +16 -3
- data/lib/picky/no_source_specified_exception.rb +3 -0
- data/lib/picky/search.rb +44 -5
- data/lib/picky/sources/base.rb +2 -2
- data/lib/picky/sources/couch.rb +1 -1
- data/lib/picky/sources/csv.rb +1 -1
- data/lib/picky/sources/db.rb +9 -9
- data/lib/picky/sources/delicious.rb +1 -1
- data/lib/picky/sources/wrappers/base.rb +12 -13
- data/lib/picky/sources/wrappers/location.rb +24 -54
- data/lib/tasks/search.rake +4 -5
- data/lib/tasks/todo.rake +1 -1
- data/spec/{lib → aux/picky}/cli_spec.rb +13 -8
- data/spec/lib/application_spec.rb +21 -16
- data/spec/lib/index/base_spec.rb +74 -27
- data/spec/lib/index/redis_spec.rb +1 -1
- data/spec/lib/index_bundle_spec.rb +1 -1
- data/spec/lib/indexing/indexes_spec.rb +5 -5
- data/spec/lib/internals/calculations/location_spec.rb +14 -3
- data/spec/lib/internals/index/files_spec.rb +2 -3
- data/spec/lib/internals/index/redis_spec.rb +122 -49
- data/spec/lib/internals/indexed/bundle/memory_spec.rb +4 -6
- data/spec/lib/internals/indexed/bundle/redis_spec.rb +2 -3
- data/spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb +3 -3
- data/spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb +3 -3
- data/spec/lib/internals/indexers/parallel_spec.rb +36 -0
- data/spec/lib/internals/indexers/serial_spec.rb +6 -14
- data/spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb +2 -3
- data/spec/lib/internals/indexing/bundle/memory_spec.rb +5 -6
- data/spec/lib/internals/indexing/bundle/redis_spec.rb +5 -6
- data/spec/lib/internals/indexing/category_spec.rb +21 -6
- data/spec/lib/internals/indexing/index_spec.rb +43 -7
- data/spec/lib/query/indexes_spec.rb +1 -1
- data/spec/lib/search_spec.rb +51 -2
- data/spec/lib/sources/couch_spec.rb +6 -6
- data/spec/lib/sources/csv_spec.rb +4 -4
- data/spec/lib/sources/db_spec.rb +13 -14
- data/spec/lib/sources/delicious_spec.rb +3 -3
- data/spec/lib/sources/wrappers/base_spec.rb +9 -10
- data/spec/lib/sources/wrappers/location_spec.rb +11 -23
- metadata +14 -15
- data/lib/picky/auxiliary/terminal.rb +0 -219
- data/lib/picky/internals/configuration/index.rb +0 -67
- data/lib/picky/internals/indexers/no_source_specified_error.rb +0 -7
- data/lib/picky/internals/indexing/categories.rb +0 -46
- data/spec/lib/auxiliary/terminal_spec.rb +0 -150
- data/spec/lib/internals/configuration/index_spec.rb +0 -80
- data/spec/lib/internals/indexing/categories_spec.rb +0 -49
@@ -1,67 +0,0 @@
|
|
1
|
-
module Configuration # :nodoc:all
|
2
|
-
|
3
|
-
# Holds the configuration for a
|
4
|
-
# index/category combination.
|
5
|
-
#
|
6
|
-
class Index
|
7
|
-
|
8
|
-
attr_reader :index, :category
|
9
|
-
|
10
|
-
def initialize index, category
|
11
|
-
@index = index
|
12
|
-
@category = category
|
13
|
-
end
|
14
|
-
|
15
|
-
def index_name
|
16
|
-
@index_name ||= index.name
|
17
|
-
end
|
18
|
-
def category_name
|
19
|
-
@category_name ||= category.name
|
20
|
-
end
|
21
|
-
|
22
|
-
#
|
23
|
-
#
|
24
|
-
def index_path bundle_name, name
|
25
|
-
"#{index_directory}/#{category_name}_#{bundle_name}_#{name}"
|
26
|
-
end
|
27
|
-
|
28
|
-
# Was: search_index_file_name
|
29
|
-
#
|
30
|
-
def prepared_index_path
|
31
|
-
@prepared_index_path ||= "#{index_directory}/prepared_#{category_name}_index"
|
32
|
-
end
|
33
|
-
def prepared_index_file &block
|
34
|
-
@prepared_index_file ||= Internals::Index::File::Text.new prepared_index_path
|
35
|
-
@prepared_index_file.open_for_indexing &block
|
36
|
-
end
|
37
|
-
|
38
|
-
# Identifier for internal use.
|
39
|
-
#
|
40
|
-
def identifier
|
41
|
-
@identifier ||= "#{index_name}:#{category_name}"
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_s
|
45
|
-
"#{index_name} #{category_name}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.index_root
|
49
|
-
@index_root ||= "#{PICKY_ROOT}/index"
|
50
|
-
end
|
51
|
-
def index_root
|
52
|
-
self.class.index_root
|
53
|
-
end
|
54
|
-
# Was: cache_directory
|
55
|
-
#
|
56
|
-
def index_directory
|
57
|
-
@index_directory ||= "#{index_root}/#{PICKY_ENVIRONMENT}/#{index_name}"
|
58
|
-
end
|
59
|
-
# Was: prepare_cache_directory
|
60
|
-
#
|
61
|
-
def prepare_index_directory
|
62
|
-
FileUtils.mkdir_p index_directory
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Internals
|
2
|
-
|
3
|
-
module Indexing
|
4
|
-
|
5
|
-
class Categories
|
6
|
-
|
7
|
-
attr_reader :categories
|
8
|
-
|
9
|
-
each_delegate :index,
|
10
|
-
:cache,
|
11
|
-
:generate_caches,
|
12
|
-
:backup_caches,
|
13
|
-
:restore_caches,
|
14
|
-
:check_caches,
|
15
|
-
:clear_caches,
|
16
|
-
:create_directory_structure,
|
17
|
-
:to => :categories
|
18
|
-
|
19
|
-
def initialize
|
20
|
-
@categories = []
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
categories.indented_to_s
|
25
|
-
end
|
26
|
-
|
27
|
-
def << category
|
28
|
-
categories << category
|
29
|
-
end
|
30
|
-
|
31
|
-
def find category_name
|
32
|
-
category_name = category_name.to_sym
|
33
|
-
|
34
|
-
categories.each do |category|
|
35
|
-
next unless category.name == category_name
|
36
|
-
return category
|
37
|
-
end
|
38
|
-
|
39
|
-
raise %Q{Index category "#{category_name}" not found. Possible categories: "#{categories.map(&:name).join('", "')}".}
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
@@ -1,150 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
# We need to load the Statistics file explicitly as the Statistics
|
6
|
-
# are not loaded with the Loader (not needed in the server, only for script runs).
|
7
|
-
#
|
8
|
-
require File.expand_path '../../../../lib/picky/auxiliary/terminal', __FILE__
|
9
|
-
|
10
|
-
describe Terminal do
|
11
|
-
|
12
|
-
let(:terminal) { described_class.new('/some/url') }
|
13
|
-
|
14
|
-
describe 'backspace' do
|
15
|
-
it 'works correctly' do
|
16
|
-
terminal.should_receive(:chop_text).once.ordered.with()
|
17
|
-
terminal.should_receive(:print).once.ordered.with "\e[1D \e[1D"
|
18
|
-
terminal.should_receive(:flush).once.ordered.with()
|
19
|
-
|
20
|
-
terminal.backspace
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'write_results' do
|
25
|
-
it 'works correctly' do
|
26
|
-
terminal.should_receive(:move_to).once.ordered.with 0
|
27
|
-
terminal.should_receive(:write).once.ordered.with " 0"
|
28
|
-
terminal.should_receive(:move_to).once.ordered.with 10
|
29
|
-
|
30
|
-
terminal.write_results nil
|
31
|
-
end
|
32
|
-
it 'works correctly' do
|
33
|
-
terminal.should_receive(:move_to).once.ordered.with 0
|
34
|
-
terminal.should_receive(:write).once.ordered.with "123456789"
|
35
|
-
terminal.should_receive(:move_to).once.ordered.with 10
|
36
|
-
|
37
|
-
terminal.write_results stub(:results, :total => 123456789)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'search' do
|
42
|
-
before(:each) do
|
43
|
-
@client = stub :client
|
44
|
-
terminal.stub! :client => @client
|
45
|
-
|
46
|
-
terminal.add_text 'hello'
|
47
|
-
end
|
48
|
-
it 'searches full correctly' do
|
49
|
-
@client.should_receive(:search).once.with 'hello', :ids => 20
|
50
|
-
|
51
|
-
terminal.search true
|
52
|
-
end
|
53
|
-
it 'searches full correctly' do
|
54
|
-
terminal = described_class.new('/some/url', 33)
|
55
|
-
terminal.stub! :client => @client
|
56
|
-
|
57
|
-
@client.should_receive(:search).once.with '', :ids => 33
|
58
|
-
|
59
|
-
terminal.search true
|
60
|
-
end
|
61
|
-
it 'searches live correctly' do
|
62
|
-
@client.should_receive(:search).once.with 'hello', :ids => 0
|
63
|
-
|
64
|
-
terminal.search
|
65
|
-
end
|
66
|
-
it 'searches live correctly' do
|
67
|
-
@client.should_receive(:search).once.with 'hello', :ids => 0
|
68
|
-
|
69
|
-
terminal.search false
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe 'clear_ids' do
|
74
|
-
it 'moves to the ids, then clears all' do
|
75
|
-
terminal.should_receive(:move_to_ids).once.with()
|
76
|
-
terminal.should_receive(:write).once.with " "*200
|
77
|
-
|
78
|
-
terminal.clear_ids
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe 'write_ids' do
|
83
|
-
it 'writes the result\'s ids' do
|
84
|
-
terminal.should_receive(:move_to_ids).once.with()
|
85
|
-
terminal.should_receive(:write).once.with "=> []"
|
86
|
-
|
87
|
-
terminal.write_ids stub(:results, :total => nil)
|
88
|
-
end
|
89
|
-
it 'writes the result\'s ids' do
|
90
|
-
terminal.should_receive(:move_to_ids).once.with()
|
91
|
-
terminal.should_receive(:write).once.with "=> [1, 2, 3]"
|
92
|
-
|
93
|
-
terminal.write_ids stub(:results, :total => 3, :ids => [1, 2, 3])
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe 'move_to_ids' do
|
98
|
-
it 'moves to a specific place' do
|
99
|
-
terminal.should_receive(:move_to).once.with 12
|
100
|
-
|
101
|
-
terminal.move_to_ids
|
102
|
-
end
|
103
|
-
it 'moves to a specific place' do
|
104
|
-
terminal.add_text 'test'
|
105
|
-
|
106
|
-
terminal.should_receive(:move_to).once.with 16
|
107
|
-
|
108
|
-
terminal.move_to_ids
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe 'left' do
|
113
|
-
it 'moves by amount' do
|
114
|
-
terminal.should_receive(:print).once.ordered.with "\e[13D"
|
115
|
-
terminal.should_receive(:flush).once.ordered
|
116
|
-
|
117
|
-
terminal.left 13
|
118
|
-
end
|
119
|
-
it 'default is 1' do
|
120
|
-
terminal.should_receive(:print).once.ordered.with "\e[1D"
|
121
|
-
terminal.should_receive(:flush).once.ordered
|
122
|
-
|
123
|
-
terminal.left
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe 'right' do
|
128
|
-
it 'moves by amount' do
|
129
|
-
terminal.should_receive(:print).once.ordered.with "\e[13C"
|
130
|
-
terminal.should_receive(:flush).once.ordered
|
131
|
-
|
132
|
-
terminal.right 13
|
133
|
-
end
|
134
|
-
it 'default is 1' do
|
135
|
-
terminal.should_receive(:print).once.ordered.with "\e[1C"
|
136
|
-
terminal.should_receive(:flush).once.ordered
|
137
|
-
|
138
|
-
terminal.right
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe 'flush' do
|
143
|
-
it 'flushes STDOUT' do
|
144
|
-
STDOUT.should_receive(:flush).once.with()
|
145
|
-
|
146
|
-
terminal.flush
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Configuration::Index' do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@index = stub :index, :name => :some_index
|
7
|
-
@category = stub :category, :name => :some_category
|
8
|
-
@config = Configuration::Index.new @index, @category
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "index_name" do
|
12
|
-
it "returns the right thing" do
|
13
|
-
@config.index_name.should == :some_index
|
14
|
-
end
|
15
|
-
end
|
16
|
-
describe "category_name" do
|
17
|
-
it "returns the right thing" do
|
18
|
-
@config.category_name.should == :some_category
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "index_path" do
|
23
|
-
it "caches" do
|
24
|
-
@config.index_path(:some_bundle, :some_name).should_not equal(@config.index_path(:some_bundle, :some_name))
|
25
|
-
end
|
26
|
-
it "returns the right thing" do
|
27
|
-
@config.index_path(:some_bundle, :some_name).should == 'spec/test_directory/index/test/some_index/some_category_some_bundle_some_name'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# describe "file_name" do
|
32
|
-
# it "caches" do
|
33
|
-
# @config.file_name.should equal(@config.file_name)
|
34
|
-
# end
|
35
|
-
# it "returns the right thing" do
|
36
|
-
# @config.file_name.should == 'some_index_some_category'
|
37
|
-
# end
|
38
|
-
# end
|
39
|
-
|
40
|
-
describe "identifier" do
|
41
|
-
it "caches" do
|
42
|
-
@config.identifier.should equal(@config.identifier)
|
43
|
-
end
|
44
|
-
it "returns the right thing" do
|
45
|
-
@config.identifier.should == 'some_index:some_category'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
describe "index_root" do
|
49
|
-
it "caches" do
|
50
|
-
@config.index_root.should equal(@config.index_root)
|
51
|
-
end
|
52
|
-
it "returns the right thing" do
|
53
|
-
@config.index_root.should == 'spec/test_directory/index'
|
54
|
-
end
|
55
|
-
end
|
56
|
-
describe "index_directory" do
|
57
|
-
it "caches" do
|
58
|
-
@config.index_directory.should equal(@config.index_directory)
|
59
|
-
end
|
60
|
-
it "returns the right thing" do
|
61
|
-
@config.index_directory.should == 'spec/test_directory/index/test/some_index'
|
62
|
-
end
|
63
|
-
end
|
64
|
-
describe "prepared_index_path" do
|
65
|
-
it "caches" do
|
66
|
-
@config.prepared_index_path.should equal(@config.prepared_index_path)
|
67
|
-
end
|
68
|
-
it "returns the right thing" do
|
69
|
-
@config.prepared_index_path.should == 'spec/test_directory/index/test/some_index/prepared_some_category_index'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
describe "prepare_index_directory" do
|
73
|
-
it "calls the right thing" do
|
74
|
-
FileUtils.should_receive(:mkdir_p).once.with 'spec/test_directory/index/test/some_index'
|
75
|
-
|
76
|
-
@config.prepare_index_directory
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Internals::Indexing::Categories do
|
4
|
-
|
5
|
-
let(:categories) { described_class.new }
|
6
|
-
|
7
|
-
describe 'to_s' do
|
8
|
-
context 'no categories' do
|
9
|
-
it 'outputs the right thing' do
|
10
|
-
categories.to_s.should == ""
|
11
|
-
end
|
12
|
-
end
|
13
|
-
context 'with categories' do
|
14
|
-
before(:each) do
|
15
|
-
index = stub :index, :name => :some_name
|
16
|
-
categories << Internals::Indexing::Category.new(:some_name, index, :source => stub(:source))
|
17
|
-
end
|
18
|
-
it 'outputs the right thing' do
|
19
|
-
categories.to_s.should == " Category(some_name from some_name):\n Exact:\n Memory\n Partial:\n Memory\n"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'find' do
|
25
|
-
context 'no categories' do
|
26
|
-
it 'raises on none existent category' do
|
27
|
-
expect do
|
28
|
-
categories.find :some_non_existent_name
|
29
|
-
end.to raise_error(%Q{Index category "some_non_existent_name" not found. Possible categories: "".})
|
30
|
-
end
|
31
|
-
end
|
32
|
-
context 'with categories' do
|
33
|
-
before(:each) do
|
34
|
-
index = stub :index, :name => :some_name
|
35
|
-
@category = Internals::Indexing::Category.new(:some_name, index, :source => stub(:source))
|
36
|
-
categories << @category
|
37
|
-
end
|
38
|
-
it 'returns it if found' do
|
39
|
-
categories.find(:some_name).should == @category
|
40
|
-
end
|
41
|
-
it 'raises on none existent category' do
|
42
|
-
expect do
|
43
|
-
categories.find :some_non_existent_name
|
44
|
-
end.to raise_error(%Q{Index category "some_non_existent_name" not found. Possible categories: "some_name".})
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|