picky 2.1.2 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/{lib → aux}/picky/cli.rb +50 -38
  2. data/bin/picky +1 -1
  3. data/lib/picky/application.rb +5 -2
  4. data/lib/picky/index/base.rb +88 -25
  5. data/lib/picky/index/memory.rb +8 -8
  6. data/lib/picky/index/redis.rb +8 -8
  7. data/lib/picky/index_bundle.rb +2 -2
  8. data/lib/picky/indexing/indexes.rb +6 -6
  9. data/lib/picky/internals/calculations/location.rb +54 -42
  10. data/lib/picky/internals/index/backend.rb +21 -21
  11. data/lib/picky/internals/index/file/text.rb +11 -11
  12. data/lib/picky/internals/index/files.rb +6 -6
  13. data/lib/picky/internals/index/redis.rb +14 -14
  14. data/lib/picky/internals/indexed/bundle/base.rb +2 -2
  15. data/lib/picky/internals/indexed/bundle/redis.rb +3 -3
  16. data/lib/picky/internals/indexed/category.rb +8 -9
  17. data/lib/picky/internals/indexed/wrappers/bundle/calculation.rb +25 -23
  18. data/lib/picky/internals/indexed/wrappers/bundle/location.rb +36 -34
  19. data/lib/picky/internals/indexed/wrappers/bundle/wrapper.rb +35 -33
  20. data/lib/picky/internals/indexed/wrappers/category/location.rb +27 -0
  21. data/lib/picky/internals/indexers/base.rb +28 -0
  22. data/lib/picky/internals/indexers/parallel.rb +64 -0
  23. data/lib/picky/internals/indexers/serial.rb +20 -29
  24. data/lib/picky/internals/indexing/bundle/base.rb +2 -2
  25. data/lib/picky/internals/indexing/bundle/super_base.rb +3 -3
  26. data/lib/picky/internals/indexing/category.rb +30 -27
  27. data/lib/picky/internals/indexing/index.rb +82 -27
  28. data/lib/picky/internals/indexing/wrappers/category/location.rb +27 -0
  29. data/lib/picky/internals/query/indexes.rb +1 -1
  30. data/lib/picky/internals/query/qualifiers.rb +7 -6
  31. data/lib/picky/internals/query/weights.rb +6 -0
  32. data/lib/picky/internals/shared/category.rb +52 -0
  33. data/lib/picky/internals/tokenizers/base.rb +1 -1
  34. data/lib/picky/internals/tokenizers/location.rb +54 -0
  35. data/lib/picky/loader.rb +16 -3
  36. data/lib/picky/no_source_specified_exception.rb +3 -0
  37. data/lib/picky/search.rb +44 -5
  38. data/lib/picky/sources/base.rb +2 -2
  39. data/lib/picky/sources/couch.rb +1 -1
  40. data/lib/picky/sources/csv.rb +1 -1
  41. data/lib/picky/sources/db.rb +9 -9
  42. data/lib/picky/sources/delicious.rb +1 -1
  43. data/lib/picky/sources/wrappers/base.rb +12 -13
  44. data/lib/picky/sources/wrappers/location.rb +24 -54
  45. data/lib/tasks/search.rake +4 -5
  46. data/lib/tasks/todo.rake +1 -1
  47. data/spec/{lib → aux/picky}/cli_spec.rb +13 -8
  48. data/spec/lib/application_spec.rb +21 -16
  49. data/spec/lib/index/base_spec.rb +74 -27
  50. data/spec/lib/index/redis_spec.rb +1 -1
  51. data/spec/lib/index_bundle_spec.rb +1 -1
  52. data/spec/lib/indexing/indexes_spec.rb +5 -5
  53. data/spec/lib/internals/calculations/location_spec.rb +14 -3
  54. data/spec/lib/internals/index/files_spec.rb +2 -3
  55. data/spec/lib/internals/index/redis_spec.rb +122 -49
  56. data/spec/lib/internals/indexed/bundle/memory_spec.rb +4 -6
  57. data/spec/lib/internals/indexed/bundle/redis_spec.rb +2 -3
  58. data/spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb +3 -3
  59. data/spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb +3 -3
  60. data/spec/lib/internals/indexers/parallel_spec.rb +36 -0
  61. data/spec/lib/internals/indexers/serial_spec.rb +6 -14
  62. data/spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb +2 -3
  63. data/spec/lib/internals/indexing/bundle/memory_spec.rb +5 -6
  64. data/spec/lib/internals/indexing/bundle/redis_spec.rb +5 -6
  65. data/spec/lib/internals/indexing/category_spec.rb +21 -6
  66. data/spec/lib/internals/indexing/index_spec.rb +43 -7
  67. data/spec/lib/query/indexes_spec.rb +1 -1
  68. data/spec/lib/search_spec.rb +51 -2
  69. data/spec/lib/sources/couch_spec.rb +6 -6
  70. data/spec/lib/sources/csv_spec.rb +4 -4
  71. data/spec/lib/sources/db_spec.rb +13 -14
  72. data/spec/lib/sources/delicious_spec.rb +3 -3
  73. data/spec/lib/sources/wrappers/base_spec.rb +9 -10
  74. data/spec/lib/sources/wrappers/location_spec.rb +11 -23
  75. metadata +14 -15
  76. data/lib/picky/auxiliary/terminal.rb +0 -219
  77. data/lib/picky/internals/configuration/index.rb +0 -67
  78. data/lib/picky/internals/indexers/no_source_specified_error.rb +0 -7
  79. data/lib/picky/internals/indexing/categories.rb +0 -46
  80. data/spec/lib/auxiliary/terminal_spec.rb +0 -150
  81. data/spec/lib/internals/configuration/index_spec.rb +0 -80
  82. data/spec/lib/internals/indexing/categories_spec.rb +0 -49
@@ -34,8 +34,8 @@ describe Sources::Couch do
34
34
 
35
35
  describe "harvest" do
36
36
  it "yields the right data" do
37
- field = stub :b, :from => :b
38
- @source.harvest :anything, field do |id, token|
37
+ category = stub :b, :from => :b
38
+ @source.harvest category do |id, token|
39
39
  id.should eql('550e8400-e29b-41d4-a716-446655440000')
40
40
  token.should eql('b data')
41
41
  end.should have(1).item
@@ -60,8 +60,8 @@ describe Sources::Couch do
60
60
 
61
61
  describe "harvest" do
62
62
  it "yields the right data" do
63
- field = stub :b, :from => :b
64
- @source.harvest :anything, field do |id, token|
63
+ category = stub :b, :from => :b
64
+ @source.harvest category do |id, token|
65
65
  id.should eql('123')
66
66
  token.should eql('b data')
67
67
  end.should have(1).item
@@ -94,8 +94,8 @@ describe Sources::Couch do
94
94
 
95
95
  describe "harvest" do
96
96
  it "yields the right data" do
97
- field = stub :b, :from => :b
98
- @source.harvest :anything, field do |id, token|
97
+ category = stub :b, :from => :b
98
+ @source.harvest category do |id, token|
99
99
  id.should eql('7f')
100
100
  token.should eql('b data')
101
101
  end.should have(1).item
@@ -50,8 +50,8 @@ describe Sources::CSV do
50
50
  end
51
51
  describe "harvest" do
52
52
  it "should yield the right data" do
53
- field = stub :b, :from => :b
54
- @source.harvest :anything, field do |id, token|
53
+ category = stub :b, :from => :b
54
+ @source.harvest category do |id, token|
55
55
  [id, token].should == [' 7', 'b data']
56
56
  end
57
57
  end
@@ -70,8 +70,8 @@ describe Sources::CSV do
70
70
  end
71
71
  describe "harvest" do
72
72
  it "should yield the right data" do
73
- field = stub :b, :from => :b
74
- @source.harvest :anything, field do |id, token|
73
+ category = stub :b, :from => :b
74
+ @source.harvest category do |id, token|
75
75
  [id, token].should == [' 7', 'b data']
76
76
  end
77
77
  end
@@ -24,8 +24,8 @@ describe Sources::DB do
24
24
 
25
25
  describe "get_data" do
26
26
  before(:each) do
27
- @type = stub :type, :name => :some_type
28
- @category = stub :category, :from => :some_category
27
+ @index = stub :index, :name => :some_index_name
28
+ @category = stub :category, :from => :some_category, :index => @index
29
29
  end
30
30
  context 'mysql' do
31
31
  before(:each) do
@@ -36,20 +36,20 @@ describe Sources::DB do
36
36
 
37
37
  @connection.should_receive(:execute).
38
38
  once.
39
- with('SELECT id, some_category FROM picky_some_type_index st WHERE st.__picky_id > some_offset LIMIT 25000').
39
+ with('SELECT id, some_category FROM picky_some_index_name_index st WHERE st.__picky_id > some_offset LIMIT 25000').
40
40
  and_return []
41
41
 
42
- @source.get_data @type, @category, :some_offset
42
+ @source.get_data @category, :some_offset
43
43
  end
44
44
  end
45
45
  context 'with data' do
46
46
  it 'yields to the caller' do
47
47
  @connection.should_receive(:execute).
48
48
  any_number_of_times.
49
- with('SELECT id, some_category FROM picky_some_type_index st WHERE st.__picky_id > some_offset LIMIT 25000').
49
+ with('SELECT id, some_category FROM picky_some_index_name_index st WHERE st.__picky_id > some_offset LIMIT 25000').
50
50
  and_return [[1, 'text']]
51
51
 
52
- @source.get_data @type, @category, :some_offset do |id, text|
52
+ @source.get_data @category, :some_offset do |id, text|
53
53
  id.should == 1
54
54
  text.should == 'text'
55
55
  end
@@ -100,8 +100,8 @@ describe Sources::DB do
100
100
 
101
101
  describe 'harvest' do
102
102
  before(:each) do
103
- @type = stub :type, :name => :some_type
104
- @category = stub :category, :name => :some_category
103
+ @index = stub :index, :name => :some_index
104
+ @category = stub :category, :name => :some_category, :index => @index
105
105
 
106
106
  @source.should_receive(:get_data).any_number_of_times.and_return [[:some_id, 'some_text']].cycle
107
107
  @source.stub! :count => 17
@@ -109,7 +109,7 @@ describe Sources::DB do
109
109
  it 'calls connect_backend' do
110
110
  @source.should_receive(:connect_backend).once.with()
111
111
 
112
- @source.harvest @type, @category do |id, text|
112
+ @source.harvest @category do |id, text|
113
113
  p [id, text]
114
114
  end
115
115
  end
@@ -118,19 +118,18 @@ describe Sources::DB do
118
118
  describe "harvest_statement_with_offset" do
119
119
  before(:each) do
120
120
  @category = stub :category, :from => :some_category
121
- @type = stub :type, :name => :some_type
122
121
  end
123
122
  it "should get a harvest statement and the chunksize to put the statement together" do
124
- @source.should_receive(:harvest_statement).once.with(@type, @category).and_return 'some_example_statement'
125
- @source.harvest_statement_with_offset(@type, @category, :some_offset)
123
+ @source.should_receive(:harvest_statement).once.with(@category).and_return 'some_example_statement'
124
+ @source.harvest_statement_with_offset(@category, :some_offset)
126
125
  end
127
126
  it "should add an AND if it already contains a WHERE statement" do
128
127
  @source.should_receive(:harvest_statement).and_return 'WHERE'
129
- @source.harvest_statement_with_offset(@type, @category, :some_offset).should == "WHERE AND st.__picky_id > some_offset LIMIT 25000"
128
+ @source.harvest_statement_with_offset(@category, :some_offset).should == "WHERE AND st.__picky_id > some_offset LIMIT 25000"
130
129
  end
131
130
  it "should add a WHERE if it doesn't already contain one" do
132
131
  @source.should_receive(:harvest_statement).and_return 'some_statement'
133
- @source.harvest_statement_with_offset(@type, @category, :some_offset).should == "some_statement WHERE st.__picky_id > some_offset LIMIT 25000"
132
+ @source.harvest_statement_with_offset(@category, :some_offset).should == "some_statement WHERE st.__picky_id > some_offset LIMIT 25000"
134
133
  end
135
134
  end
136
135
 
@@ -51,19 +51,19 @@ describe Sources::Delicious do
51
51
  end
52
52
  it "should yield the right data" do
53
53
  category = stub :b, :from => :tags
54
- @source.harvest :anything, category do |id, token|
54
+ @source.harvest category do |id, token|
55
55
  [id, token].should == [1, "barefoot running shoe"]
56
56
  end
57
57
  end
58
58
  it "should yield the right data" do
59
59
  category = stub :b, :from => :title
60
- @source.harvest :anything, category do |id, token|
60
+ @source.harvest category do |id, token|
61
61
  [id, token].should == [1, "VIBRAM - FiveFingers"]
62
62
  end
63
63
  end
64
64
  it "should yield the right data" do
65
65
  category = stub :b, :from => :url
66
- @source.harvest :anything, category do |id, token|
66
+ @source.harvest category do |id, token|
67
67
  [id, token].should == [1, "http://www.vibramfivefingers.it/"]
68
68
  end
69
69
  end
@@ -3,36 +3,35 @@ require 'spec_helper'
3
3
  describe Sources::Wrappers::Base do
4
4
 
5
5
  before(:each) do
6
- @backend = stub :backend
7
- @category = stub :category, :source => @backend
6
+ @source = stub :source
8
7
  end
9
8
 
10
9
  context "with backend" do
11
10
  it "doesn't fail" do
12
- lambda { Sources::Wrappers::Base.new(@category) }.should_not raise_error
11
+ lambda { described_class.new(@source) }.should_not raise_error
13
12
  end
14
13
  before(:each) do
15
- @wrapper = Sources::Wrappers::Base.new @category
14
+ @wrapper = described_class.new @source
16
15
  end
17
16
  it "delegates harvest" do
18
- @backend.should_receive(:harvest).once.with :some_type, :some_field
17
+ @source.should_receive(:harvest).once.with :some_category
19
18
 
20
- @wrapper.harvest :some_type, :some_field
19
+ @wrapper.harvest :some_category
21
20
  end
22
21
  it "delegates take_snapshot" do
23
- @backend.should_receive(:take_snapshot).once.with :some_type
22
+ @source.should_receive(:take_snapshot).once.with :some_index
24
23
 
25
- @wrapper.take_snapshot :some_type
24
+ @wrapper.take_snapshot :some_index
26
25
  end
27
26
  it "delegates connect_backend" do
28
- @backend.should_receive(:connect_backend).once.with # nothing
27
+ @source.should_receive(:connect_backend).once.with # nothing
29
28
 
30
29
  @wrapper.connect_backend
31
30
  end
32
31
  end
33
32
  context "without backend" do
34
33
  it "fails" do
35
- lambda { Sources::Wrappers::Base.new }.should raise_error(ArgumentError)
34
+ lambda { described_class.new }.should raise_error(ArgumentError)
36
35
  end
37
36
  end
38
37
 
@@ -4,8 +4,8 @@ describe Sources::Wrappers::Location do
4
4
 
5
5
  context "with backend" do
6
6
  before(:each) do
7
- @backend = stub :backend
8
- @category = stub :category, :source => @backend
7
+ @source = stub :source
8
+ @category = stub :category
9
9
  end
10
10
  context "without grid option" do
11
11
  it "fails" do
@@ -14,47 +14,35 @@ describe Sources::Wrappers::Location do
14
14
  end
15
15
  context "with grid option" do
16
16
  before(:each) do
17
- @wrapper = described_class.new @category, grid:10
17
+ @wrapper = described_class.new @source, 10
18
18
  end
19
19
  it "uses a default of 1 on the precision" do
20
- @wrapper.precision.should == 1
20
+ @wrapper.calculation.precision.should == 1
21
21
  end
22
22
  it "delegates harvest" do
23
23
  @category.stub! :exact => {}
24
24
 
25
- @backend.should_receive(:harvest).once.with :some_type, @category
25
+ @source.should_receive(:harvest).once.with @category
26
26
 
27
- @wrapper.harvest :some_type, @category
27
+ @wrapper.harvest @category
28
28
  end
29
29
  it "delegates take_snapshot" do
30
- @backend.should_receive(:take_snapshot).once.with :some_type
30
+ @source.should_receive(:take_snapshot).once.with()
31
31
 
32
- @wrapper.take_snapshot :some_type
32
+ @wrapper.take_snapshot
33
33
  end
34
34
  it "delegates connect_backend" do
35
- @backend.should_receive(:connect_backend).once.with # nothing
35
+ @source.should_receive(:connect_backend).once.with()
36
36
 
37
37
  @wrapper.connect_backend
38
38
  end
39
39
  end
40
40
  context "with grid and precision option" do
41
41
  before(:each) do
42
- @wrapper = described_class.new @category, grid:4, precision:2
42
+ @wrapper = described_class.new @category, 4, 2
43
43
  end
44
44
  it "uses the given precision" do
45
- @wrapper.precision.should == 2
46
- end
47
-
48
- describe "locations_for" do
49
- it "returns the right array" do
50
- @wrapper.locations_for(15).should == [13, 14, 15, 16, 17]
51
- end
52
- it "returns the right array" do
53
- @wrapper.locations_for(2).should == [0, 1, 2, 3, 4]
54
- end
55
- it "returns the right array" do
56
- @wrapper.locations_for(16).should == [14, 15, 16, 17, 18]
57
- end
45
+ @wrapper.calculation.precision.should == 2
58
46
  end
59
47
  end
60
48
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: picky
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.1.2
5
+ version: 2.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Florian Hanke
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-11 00:00:00 +10:00
13
+ date: 2011-04-14 00:00:00 +10:00
14
14
  default_executable: picky
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -33,15 +33,14 @@ extensions:
33
33
  extra_rdoc_files: []
34
34
 
35
35
  files:
36
+ - aux/picky/cli.rb
36
37
  - lib/bundling.rb
37
38
  - lib/constants.rb
38
39
  - lib/deployment.rb
39
40
  - lib/picky/aliases.rb
40
41
  - lib/picky/analyzer.rb
41
42
  - lib/picky/application.rb
42
- - lib/picky/auxiliary/terminal.rb
43
43
  - lib/picky/character_substituters/west_european.rb
44
- - lib/picky/cli.rb
45
44
  - lib/picky/cores.rb
46
45
  - lib/picky/generators/aliases.rb
47
46
  - lib/picky/index/base.rb
@@ -56,7 +55,6 @@ files:
56
55
  - lib/picky/internals/adapters/rack/query.rb
57
56
  - lib/picky/internals/adapters/rack.rb
58
57
  - lib/picky/internals/calculations/location.rb
59
- - lib/picky/internals/configuration/index.rb
60
58
  - lib/picky/internals/ext/maybe_compile.rb
61
59
  - lib/picky/internals/ext/ruby19/extconf.rb
62
60
  - lib/picky/internals/extensions/array.rb
@@ -104,17 +102,19 @@ files:
104
102
  - lib/picky/internals/indexed/wrappers/bundle/calculation.rb
105
103
  - lib/picky/internals/indexed/wrappers/bundle/location.rb
106
104
  - lib/picky/internals/indexed/wrappers/bundle/wrapper.rb
105
+ - lib/picky/internals/indexed/wrappers/category/location.rb
107
106
  - lib/picky/internals/indexed/wrappers/exact_first.rb
108
- - lib/picky/internals/indexers/no_source_specified_error.rb
107
+ - lib/picky/internals/indexers/base.rb
108
+ - lib/picky/internals/indexers/parallel.rb
109
109
  - lib/picky/internals/indexers/serial.rb
110
110
  - lib/picky/internals/indexers/solr.rb
111
111
  - lib/picky/internals/indexing/bundle/base.rb
112
112
  - lib/picky/internals/indexing/bundle/memory.rb
113
113
  - lib/picky/internals/indexing/bundle/redis.rb
114
114
  - lib/picky/internals/indexing/bundle/super_base.rb
115
- - lib/picky/internals/indexing/categories.rb
116
115
  - lib/picky/internals/indexing/category.rb
117
116
  - lib/picky/internals/indexing/index.rb
117
+ - lib/picky/internals/indexing/wrappers/category/location.rb
118
118
  - lib/picky/internals/performant.rb
119
119
  - lib/picky/internals/query/allocation.rb
120
120
  - lib/picky/internals/query/allocations.rb
@@ -127,13 +127,16 @@ files:
127
127
  - lib/picky/internals/query/token.rb
128
128
  - lib/picky/internals/query/tokens.rb
129
129
  - lib/picky/internals/query/weights.rb
130
+ - lib/picky/internals/shared/category.rb
130
131
  - lib/picky/internals/solr/schema_generator.rb
131
132
  - lib/picky/internals/tokenizers/base.rb
132
133
  - lib/picky/internals/tokenizers/index.rb
134
+ - lib/picky/internals/tokenizers/location.rb
133
135
  - lib/picky/internals/tokenizers/query.rb
134
136
  - lib/picky/internals.rb
135
137
  - lib/picky/loader.rb
136
138
  - lib/picky/loggers/search.rb
139
+ - lib/picky/no_source_specified_exception.rb
137
140
  - lib/picky/query/solr.rb
138
141
  - lib/picky/query.rb
139
142
  - lib/picky/rack/harakiri.rb
@@ -164,14 +167,13 @@ files:
164
167
  - lib/tasks/todo.rake
165
168
  - lib/tasks/try.rake
166
169
  - lib/picky/internals/ext/ruby19/performant.c
170
+ - spec/aux/picky/cli_spec.rb
167
171
  - spec/ext/performant_spec.rb
168
172
  - spec/lib/aliases_spec.rb
169
173
  - spec/lib/analyzer_spec.rb
170
174
  - spec/lib/application_spec.rb
171
- - spec/lib/auxiliary/terminal_spec.rb
172
175
  - spec/lib/bundling_spec.rb
173
176
  - spec/lib/character_substituters/west_european_spec.rb
174
- - spec/lib/cli_spec.rb
175
177
  - spec/lib/generators/aliases_spec.rb
176
178
  - spec/lib/index/base_spec.rb
177
179
  - spec/lib/index/redis_spec.rb
@@ -182,7 +184,6 @@ files:
182
184
  - spec/lib/internals/adapters/rack/live_parameters_spec.rb
183
185
  - spec/lib/internals/adapters/rack/query_spec.rb
184
186
  - spec/lib/internals/calculations/location_spec.rb
185
- - spec/lib/internals/configuration/index_spec.rb
186
187
  - spec/lib/internals/cores_spec.rb
187
188
  - spec/lib/internals/extensions/array_spec.rb
188
189
  - spec/lib/internals/extensions/hash_spec.rb
@@ -221,12 +222,12 @@ files:
221
222
  - spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb
222
223
  - spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb
223
224
  - spec/lib/internals/indexed/wrappers/exact_first_spec.rb
225
+ - spec/lib/internals/indexers/parallel_spec.rb
224
226
  - spec/lib/internals/indexers/serial_spec.rb
225
227
  - spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb
226
228
  - spec/lib/internals/indexing/bundle/memory_spec.rb
227
229
  - spec/lib/internals/indexing/bundle/redis_spec.rb
228
230
  - spec/lib/internals/indexing/bundle/super_base_spec.rb
229
- - spec/lib/internals/indexing/categories_spec.rb
230
231
  - spec/lib/internals/indexing/category_spec.rb
231
232
  - spec/lib/internals/indexing/index_spec.rb
232
233
  - spec/lib/internals/indexing/indexes_spec.rb
@@ -290,14 +291,13 @@ signing_key:
290
291
  specification_version: 3
291
292
  summary: "Picky: Semantic Search Engine. Clever Interface. Good Tools."
292
293
  test_files:
294
+ - spec/aux/picky/cli_spec.rb
293
295
  - spec/ext/performant_spec.rb
294
296
  - spec/lib/aliases_spec.rb
295
297
  - spec/lib/analyzer_spec.rb
296
298
  - spec/lib/application_spec.rb
297
- - spec/lib/auxiliary/terminal_spec.rb
298
299
  - spec/lib/bundling_spec.rb
299
300
  - spec/lib/character_substituters/west_european_spec.rb
300
- - spec/lib/cli_spec.rb
301
301
  - spec/lib/generators/aliases_spec.rb
302
302
  - spec/lib/index/base_spec.rb
303
303
  - spec/lib/index/redis_spec.rb
@@ -308,7 +308,6 @@ test_files:
308
308
  - spec/lib/internals/adapters/rack/live_parameters_spec.rb
309
309
  - spec/lib/internals/adapters/rack/query_spec.rb
310
310
  - spec/lib/internals/calculations/location_spec.rb
311
- - spec/lib/internals/configuration/index_spec.rb
312
311
  - spec/lib/internals/cores_spec.rb
313
312
  - spec/lib/internals/extensions/array_spec.rb
314
313
  - spec/lib/internals/extensions/hash_spec.rb
@@ -347,12 +346,12 @@ test_files:
347
346
  - spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb
348
347
  - spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb
349
348
  - spec/lib/internals/indexed/wrappers/exact_first_spec.rb
349
+ - spec/lib/internals/indexers/parallel_spec.rb
350
350
  - spec/lib/internals/indexers/serial_spec.rb
351
351
  - spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb
352
352
  - spec/lib/internals/indexing/bundle/memory_spec.rb
353
353
  - spec/lib/internals/indexing/bundle/redis_spec.rb
354
354
  - spec/lib/internals/indexing/bundle/super_base_spec.rb
355
- - spec/lib/internals/indexing/categories_spec.rb
356
355
  - spec/lib/internals/indexing/category_spec.rb
357
356
  - spec/lib/internals/indexing/index_spec.rb
358
357
  - spec/lib/internals/indexing/indexes_spec.rb
@@ -1,219 +0,0 @@
1
- class Terminal
2
-
3
- attr_reader :client
4
-
5
- def initialize given_uri, id_amount = nil
6
- check_highline_gem
7
- check_picky_client_gem
8
-
9
- require 'uri'
10
- uri = URI.parse given_uri
11
-
12
- # If the user gave a whole url without http, add that and reparse.
13
- #
14
- unless uri.path
15
- uri = URI.parse "http://#{given_uri}"
16
- end
17
-
18
- # If the user gave a path without / in front, add one.
19
- #
20
- unless uri.path =~ /^\//
21
- uri.path = "/#{uri.path}"
22
- end
23
-
24
- @searches = 0
25
- @durations = 0
26
- @current_text = ''
27
- @cursor_offset = 0
28
- @last_ids = ''
29
- @id_amount = id_amount && Integer(id_amount) || 20
30
- @client = Picky::Client.new :host => (uri.host || 'localhost'), :port => (uri.port || 8080), :path => uri.path
31
-
32
- install_trap
33
- end
34
- def check_highline_gem # :nodoc:
35
- require "highline/system_extensions"
36
- extend HighLine::SystemExtensions
37
- rescue LoadError
38
- warn_gem_missing 'highline', 'the terminal interface'
39
- exit 1
40
- end
41
- def check_picky_client_gem # :nodoc:
42
- require 'picky-client'
43
- rescue LoadError
44
- warn_gem_missing 'picky-client', 'the terminal interface'
45
- exit 1
46
- end
47
-
48
- # Install the Ctrl-C handler.
49
- #
50
- def install_trap
51
- Signal.trap('INT') do
52
- print "\e[100D"
53
- flush
54
- puts "\n"
55
- puts "You performed #{@searches} searches, totalling #{"%.3f" % @durations} seconds."
56
- print "\e[100D"
57
- flush
58
- exit
59
- end
60
- end
61
-
62
- # Flush to STDOUT.
63
- #
64
- def flush
65
- STDOUT.flush
66
- end
67
-
68
- # Position cursor amount to the left.
69
- #
70
- def left amount = 1
71
- print "\e[#{amount}D"
72
- flush
73
- end
74
-
75
- # Position cursor amount to the right.
76
- #
77
- def right amount = 1
78
- print "\e[#{amount}C"
79
- flush
80
- end
81
-
82
- # Move cursor to position.
83
- #
84
- def move_to position
85
- relative = position - @cursor_offset
86
- if relative > 0
87
- right relative
88
- else
89
- left relative
90
- end
91
- @cursor_offset = position
92
- flush
93
- end
94
-
95
- # Delete one character.
96
- #
97
- def backspace
98
- chop_text
99
- print "\e[1D \e[1D"
100
- flush
101
- end
102
-
103
- # Write the text to the input area.
104
- #
105
- def write text
106
- @cursor_offset += text.size
107
- print text
108
- flush
109
- end
110
-
111
- # Chop off one character.
112
- #
113
- def chop_text
114
- @current_text.chop!
115
- end
116
-
117
- # Add the given text to the current text.
118
- #
119
- def add_text text
120
- @current_text << text
121
- end
122
-
123
- # Type the given text into the input area.
124
- #
125
- def type_search character
126
- add_text character
127
- write character
128
- end
129
-
130
- # Write the amount of result ids.
131
- #
132
- def write_results results
133
- move_to 0
134
- write "%9d" % (results && results.total || 0)
135
- move_to 10 + @current_text.size
136
- end
137
-
138
- # Move to the id area.
139
- #
140
- def move_to_ids
141
- move_to 12 + @current_text.size
142
- end
143
-
144
- # Write the result ids.
145
- #
146
- def write_ids results
147
- move_to_ids
148
- write "=> #{results.total ? results.ids(@id_amount) : []}"
149
- rescue StandardError => e
150
- p e.message
151
- p e.backtrace
152
- end
153
-
154
- # Clear the result ids.
155
- #
156
- def clear_ids
157
- move_to_ids
158
- write @ids_clearing_string ||= " "*200
159
- end
160
-
161
- # Log a search.
162
- #
163
- def log results
164
- @searches += 1
165
- @durations += (results[:duration] || 0)
166
- end
167
-
168
- # Perform a search.
169
- #
170
- def search full = false
171
- client.search @current_text, :ids => (full ? @id_amount : 0)
172
- end
173
-
174
- # Perform a search and write the results.
175
- #
176
- # Handles 404s and connection problems.
177
- #
178
- def search_and_write full = false
179
- results = search full
180
- results.extend Picky::Convenience
181
-
182
- log results
183
-
184
- full ? write_ids(results) : clear_ids
185
-
186
- write_results results
187
- rescue Errno::ECONNREFUSED => e
188
- write "Please start a Picky server listening to #{@client.path}."
189
- rescue Yajl::ParseError => e
190
- write "Got a 404. Maybe the path #{@client.path} isn't a correct one?"
191
- end
192
-
193
- # Run the terminal.
194
- #
195
- # Note: Uses a simple loop to handle input.
196
- #
197
- def run
198
- puts "Type and see the result count update. Press enter for the first #{@id_amount} result ids."
199
- puts "Break with Ctrl-C."
200
-
201
- search_and_write
202
-
203
- loop do
204
- input = get_character
205
-
206
- case input
207
- when 127
208
- backspace
209
- search_and_write
210
- when 13
211
- search_and_write true
212
- else # All other.
213
- type_search input.chr
214
- search_and_write
215
- end
216
- end
217
- end
218
-
219
- end