picky 2.7.0 → 3.0.0.pre1

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.
Files changed (213) hide show
  1. data/lib/picky/adapters/rack/base.rb +20 -16
  2. data/lib/picky/adapters/rack/live_parameters.rb +28 -24
  3. data/lib/picky/adapters/rack/search.rb +67 -0
  4. data/lib/picky/adapters/rack.rb +27 -23
  5. data/lib/picky/application.rb +246 -236
  6. data/lib/picky/backend/base.rb +115 -119
  7. data/lib/picky/backend/file/basic.rb +102 -98
  8. data/lib/picky/backend/file/json.rb +27 -23
  9. data/lib/picky/backend/file/marshal.rb +32 -28
  10. data/lib/picky/backend/file/text.rb +45 -41
  11. data/lib/picky/backend/files.rb +19 -15
  12. data/lib/picky/backend/redis/basic.rb +76 -72
  13. data/lib/picky/backend/redis/list_hash.rb +40 -36
  14. data/lib/picky/backend/redis/string_hash.rb +30 -26
  15. data/lib/picky/backend/redis.rb +32 -28
  16. data/lib/picky/bundle.rb +82 -57
  17. data/lib/{bundling.rb → picky/bundling.rb} +0 -0
  18. data/lib/picky/calculations/location.rb +51 -47
  19. data/lib/picky/categories.rb +60 -56
  20. data/lib/picky/categories_indexed.rb +73 -82
  21. data/lib/picky/categories_indexing.rb +12 -8
  22. data/lib/picky/category.rb +109 -120
  23. data/lib/picky/category_indexed.rb +39 -41
  24. data/lib/picky/category_indexing.rb +123 -125
  25. data/lib/picky/character_substituters/west_european.rb +32 -26
  26. data/lib/{constants.rb → picky/constants.rb} +0 -0
  27. data/lib/picky/cores.rb +96 -92
  28. data/lib/{deployment.rb → picky/deployment.rb} +0 -0
  29. data/lib/picky/frontend_adapters/rack.rb +133 -118
  30. data/lib/picky/generators/aliases.rb +5 -3
  31. data/lib/picky/generators/base.rb +11 -7
  32. data/lib/picky/generators/partial/default.rb +7 -3
  33. data/lib/picky/generators/partial/none.rb +24 -20
  34. data/lib/picky/generators/partial/strategy.rb +20 -16
  35. data/lib/picky/generators/partial/substring.rb +94 -90
  36. data/lib/picky/generators/partial_generator.rb +11 -7
  37. data/lib/picky/generators/similarity/default.rb +9 -5
  38. data/lib/picky/generators/similarity/double_metaphone.rb +20 -16
  39. data/lib/picky/generators/similarity/metaphone.rb +20 -16
  40. data/lib/picky/generators/similarity/none.rb +23 -19
  41. data/lib/picky/generators/similarity/phonetic.rb +49 -45
  42. data/lib/picky/generators/similarity/soundex.rb +20 -16
  43. data/lib/picky/generators/similarity/strategy.rb +10 -6
  44. data/lib/picky/generators/similarity_generator.rb +11 -7
  45. data/lib/picky/generators/strategy.rb +14 -10
  46. data/lib/picky/generators/weights/default.rb +9 -5
  47. data/lib/picky/generators/weights/logarithmic.rb +30 -26
  48. data/lib/picky/generators/weights/strategy.rb +10 -6
  49. data/lib/picky/generators/weights_generator.rb +11 -7
  50. data/lib/picky/helpers/measuring.rb +20 -16
  51. data/lib/picky/indexed/bundle/base.rb +39 -37
  52. data/lib/picky/indexed/bundle/memory.rb +68 -64
  53. data/lib/picky/indexed/bundle/redis.rb +73 -69
  54. data/lib/picky/indexed/wrappers/bundle/calculation.rb +26 -22
  55. data/lib/picky/indexed/wrappers/bundle/location.rb +30 -26
  56. data/lib/picky/indexed/wrappers/bundle/wrapper.rb +36 -32
  57. data/lib/picky/indexed/wrappers/category/location.rb +17 -13
  58. data/lib/picky/indexed/wrappers/exact_first.rb +46 -42
  59. data/lib/picky/indexers/base.rb +26 -22
  60. data/lib/picky/indexers/parallel.rb +62 -58
  61. data/lib/picky/indexers/serial.rb +41 -37
  62. data/lib/picky/indexes/index.rb +400 -0
  63. data/lib/picky/indexes/index_indexed.rb +24 -0
  64. data/lib/picky/indexes/index_indexing.rb +138 -0
  65. data/lib/picky/indexes/memory.rb +20 -0
  66. data/lib/picky/indexes/redis.rb +20 -0
  67. data/lib/picky/indexes.rb +68 -61
  68. data/lib/picky/indexes_indexed.rb +16 -12
  69. data/lib/picky/indexes_indexing.rb +41 -37
  70. data/lib/picky/indexing/bundle/base.rb +216 -205
  71. data/lib/picky/indexing/bundle/memory.rb +16 -11
  72. data/lib/picky/indexing/bundle/redis.rb +14 -12
  73. data/lib/picky/indexing/wrappers/category/location.rb +17 -13
  74. data/lib/picky/interfaces/live_parameters.rb +159 -154
  75. data/lib/picky/loader.rb +267 -304
  76. data/lib/picky/loggers/search.rb +20 -13
  77. data/lib/picky/no_source_specified_exception.rb +7 -3
  78. data/lib/picky/performant.rb +6 -2
  79. data/lib/picky/query/allocation.rb +71 -67
  80. data/lib/picky/query/allocations.rb +99 -94
  81. data/lib/picky/query/combination.rb +70 -66
  82. data/lib/picky/query/combinations/base.rb +56 -52
  83. data/lib/picky/query/combinations/memory.rb +36 -32
  84. data/lib/picky/query/combinations/redis.rb +66 -62
  85. data/lib/picky/query/indexes.rb +175 -160
  86. data/lib/picky/query/qualifier_category_mapper.rb +43 -0
  87. data/lib/picky/query/token.rb +165 -172
  88. data/lib/picky/query/tokens.rb +86 -82
  89. data/lib/picky/query/weights.rb +44 -48
  90. data/lib/picky/query.rb +5 -1
  91. data/lib/picky/rack/harakiri.rb +51 -47
  92. data/lib/picky/results.rb +81 -77
  93. data/lib/picky/search.rb +169 -158
  94. data/lib/picky/sinatra.rb +34 -0
  95. data/lib/picky/sources/base.rb +73 -70
  96. data/lib/picky/sources/couch.rb +61 -57
  97. data/lib/picky/sources/csv.rb +68 -64
  98. data/lib/picky/sources/db.rb +139 -135
  99. data/lib/picky/sources/delicious.rb +52 -48
  100. data/lib/picky/sources/mongo.rb +68 -63
  101. data/lib/picky/sources/wrappers/base.rb +20 -16
  102. data/lib/picky/sources/wrappers/location.rb +37 -33
  103. data/lib/picky/statistics.rb +46 -43
  104. data/lib/picky/tasks.rb +3 -0
  105. data/lib/picky/tokenizers/base.rb +192 -187
  106. data/lib/picky/tokenizers/index.rb +25 -21
  107. data/lib/picky/tokenizers/location.rb +33 -29
  108. data/lib/picky/tokenizers/query.rb +49 -43
  109. data/lib/picky.rb +21 -13
  110. data/lib/tasks/application.rake +1 -1
  111. data/lib/tasks/index.rake +3 -3
  112. data/lib/tasks/routes.rake +1 -1
  113. data/lib/tasks/server.rake +1 -1
  114. data/spec/lib/adapters/rack/base_spec.rb +1 -1
  115. data/spec/lib/adapters/rack/live_parameters_spec.rb +1 -1
  116. data/spec/lib/adapters/rack/query_spec.rb +1 -1
  117. data/spec/lib/application_spec.rb +39 -32
  118. data/spec/lib/backend/file/basic_spec.rb +2 -2
  119. data/spec/lib/backend/file/json_spec.rb +2 -2
  120. data/spec/lib/backend/file/marshal_spec.rb +2 -2
  121. data/spec/lib/backend/file/text_spec.rb +1 -1
  122. data/spec/lib/backend/files_spec.rb +14 -24
  123. data/spec/lib/backend/redis/basic_spec.rb +2 -2
  124. data/spec/lib/backend/redis/list_hash_spec.rb +3 -3
  125. data/spec/lib/backend/redis/string_hash_spec.rb +3 -3
  126. data/spec/lib/backend/redis_spec.rb +20 -13
  127. data/spec/lib/calculations/location_spec.rb +1 -1
  128. data/spec/lib/categories_indexed_spec.rb +16 -34
  129. data/spec/lib/category_indexed_spec.rb +9 -27
  130. data/spec/lib/category_indexing_spec.rb +2 -3
  131. data/spec/lib/category_spec.rb +10 -10
  132. data/spec/lib/character_substituters/west_european_spec.rb +6 -5
  133. data/spec/lib/cores_spec.rb +17 -17
  134. data/spec/lib/extensions/symbol_spec.rb +15 -1
  135. data/spec/lib/frontend_adapters/rack_spec.rb +20 -20
  136. data/spec/lib/generators/aliases_spec.rb +3 -3
  137. data/spec/lib/generators/cacher_strategy_spec.rb +1 -1
  138. data/spec/lib/generators/partial/default_spec.rb +3 -3
  139. data/spec/lib/generators/partial/none_spec.rb +2 -2
  140. data/spec/lib/generators/partial/substring_spec.rb +1 -1
  141. data/spec/lib/generators/partial_generator_spec.rb +3 -3
  142. data/spec/lib/generators/similarity/double_metaphone_spec.rb +1 -1
  143. data/spec/lib/generators/similarity/metaphone_spec.rb +1 -1
  144. data/spec/lib/generators/similarity/none_spec.rb +1 -1
  145. data/spec/lib/generators/similarity/phonetic_spec.rb +1 -1
  146. data/spec/lib/generators/similarity/soundex_spec.rb +1 -1
  147. data/spec/lib/generators/similarity_generator_spec.rb +2 -2
  148. data/spec/lib/generators/weights/logarithmic_spec.rb +1 -1
  149. data/spec/lib/generators/weights_generator_spec.rb +1 -1
  150. data/spec/lib/helpers/measuring_spec.rb +2 -2
  151. data/spec/lib/indexed/bundle/memory_spec.rb +6 -6
  152. data/spec/lib/indexed/bundle/redis_spec.rb +4 -4
  153. data/spec/lib/indexed/wrappers/bundle/calculation_spec.rb +2 -3
  154. data/spec/lib/indexed/wrappers/bundle/wrapper_spec.rb +2 -2
  155. data/spec/lib/indexed/wrappers/exact_first_spec.rb +5 -5
  156. data/spec/lib/indexers/base_spec.rb +1 -1
  157. data/spec/lib/indexers/parallel_spec.rb +1 -1
  158. data/spec/lib/indexers/serial_spec.rb +1 -1
  159. data/spec/lib/{index/base_indexed_spec.rb → indexes/index_indexed_spec.rb} +3 -3
  160. data/spec/lib/{index/base_indexing_spec.rb → indexes/index_indexing_spec.rb} +19 -2
  161. data/spec/lib/{index/base_spec.rb → indexes/index_spec.rb} +6 -25
  162. data/spec/lib/{index → indexes}/redis_spec.rb +1 -1
  163. data/spec/lib/indexes_class_spec.rb +2 -2
  164. data/spec/lib/indexes_indexed_spec.rb +1 -1
  165. data/spec/lib/indexes_indexing_spec.rb +1 -1
  166. data/spec/lib/indexes_spec.rb +1 -1
  167. data/spec/lib/indexing/bundle/base_spec.rb +7 -5
  168. data/spec/lib/indexing/bundle/memory_partial_generation_speed_spec.rb +4 -4
  169. data/spec/lib/indexing/bundle/memory_spec.rb +15 -15
  170. data/spec/lib/indexing/bundle/redis_spec.rb +9 -9
  171. data/spec/lib/interfaces/live_parameters_spec.rb +5 -5
  172. data/spec/lib/loader_spec.rb +17 -19
  173. data/spec/lib/loggers/search_spec.rb +2 -2
  174. data/spec/lib/query/allocation_spec.rb +1 -1
  175. data/spec/lib/query/allocations_spec.rb +1 -1
  176. data/spec/lib/query/combination_spec.rb +4 -4
  177. data/spec/lib/query/combinations/base_spec.rb +1 -1
  178. data/spec/lib/query/combinations/memory_spec.rb +1 -1
  179. data/spec/lib/query/combinations/redis_spec.rb +1 -1
  180. data/spec/lib/query/indexes_spec.rb +7 -2
  181. data/spec/lib/query/qualifier_category_mapper_spec.rb +34 -0
  182. data/spec/lib/query/token_spec.rb +32 -53
  183. data/spec/lib/query/tokens_spec.rb +30 -35
  184. data/spec/lib/query/weights_spec.rb +16 -16
  185. data/spec/lib/rack/harakiri_spec.rb +5 -5
  186. data/spec/lib/results_spec.rb +1 -1
  187. data/spec/lib/search_spec.rb +24 -22
  188. data/spec/lib/sinatra_spec.rb +36 -0
  189. data/spec/lib/sources/base_spec.rb +1 -1
  190. data/spec/lib/sources/couch_spec.rb +9 -9
  191. data/spec/lib/sources/csv_spec.rb +7 -7
  192. data/spec/lib/sources/db_spec.rb +2 -2
  193. data/spec/lib/sources/delicious_spec.rb +5 -5
  194. data/spec/lib/sources/mongo_spec.rb +7 -7
  195. data/spec/lib/sources/wrappers/base_spec.rb +2 -2
  196. data/spec/lib/sources/wrappers/location_spec.rb +1 -1
  197. data/spec/lib/statistics_spec.rb +1 -1
  198. data/spec/lib/tokenizers/base_spec.rb +2 -2
  199. data/spec/lib/tokenizers/index_spec.rb +1 -1
  200. data/spec/lib/tokenizers/query_spec.rb +1 -1
  201. metadata +30 -30
  202. data/lib/picky/adapters/rack/query.rb +0 -65
  203. data/lib/picky/index/base.rb +0 -409
  204. data/lib/picky/index/base_indexed.rb +0 -29
  205. data/lib/picky/index/base_indexing.rb +0 -127
  206. data/lib/picky/index/memory.rb +0 -16
  207. data/lib/picky/index/redis.rb +0 -16
  208. data/lib/picky/query/qualifiers.rb +0 -76
  209. data/lib/picky/query/solr.rb +0 -60
  210. data/lib/picky/signals.rb +0 -8
  211. data/lib/picky-tasks.rb +0 -6
  212. data/lib/tasks/spec.rake +0 -11
  213. data/spec/lib/query/qualifiers_spec.rb +0 -31
@@ -1,20 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Query::Tokens do
4
-
5
- before(:all) do
6
- Query::Qualifiers.instance << Query::Qualifier.new(:specific, [:sp, :spec])
7
- Query::Qualifiers.instance.prepare
8
- end
3
+ describe Picky::Query::Tokens do
9
4
 
10
5
  describe '.processed' do
11
6
  it 'generates processed tokens from all words' do
12
7
  expected = [
13
- Query::Token.processed('this~'),
14
- Query::Token.processed('is'),
15
- Query::Token.processed('a'),
16
- Query::Token.processed('sp:solr'),
17
- Query::Token.processed('query"')
8
+ Picky::Query::Token.processed('this~'),
9
+ Picky::Query::Token.processed('is'),
10
+ Picky::Query::Token.processed('a'),
11
+ Picky::Query::Token.processed('sp:solr'),
12
+ Picky::Query::Token.processed('query"')
18
13
  ]
19
14
 
20
15
  described_class.should_receive(:new).once.with expected
@@ -23,11 +18,11 @@ describe Query::Tokens do
23
18
  end
24
19
  it 'generates processed tokens from all words' do
25
20
  expected = [
26
- Query::Token.processed('this~', false),
27
- Query::Token.processed('is', false),
28
- Query::Token.processed('a', false),
29
- Query::Token.processed('sp:solr', false),
30
- Query::Token.processed('query"', false)
21
+ Picky::Query::Token.processed('this~', false),
22
+ Picky::Query::Token.processed('is', false),
23
+ Picky::Query::Token.processed('a', false),
24
+ Picky::Query::Token.processed('sp:solr', false),
25
+ Picky::Query::Token.processed('query"', false)
31
26
  ]
32
27
 
33
28
  described_class.should_receive(:new).once.with expected
@@ -52,7 +47,7 @@ describe Query::Tokens do
52
47
  describe 'cap' do
53
48
  context 'one token' do
54
49
  before(:each) do
55
- @token = Query::Token.processed 'Token'
50
+ @token = Picky::Query::Token.processed 'Token'
56
51
  @tokens = described_class.new [@token]
57
52
  end
58
53
  it 'does not cut it down' do
@@ -68,15 +63,15 @@ describe Query::Tokens do
68
63
  end
69
64
  context 'many tokens' do
70
65
  before(:each) do
71
- @first = Query::Token.processed 'Hello'
72
- @second = Query::Token.processed 'I'
73
- @third = Query::Token.processed 'Am'
74
- @tokens = Query::Tokens.new [
66
+ @first = Picky::Query::Token.processed 'Hello'
67
+ @second = Picky::Query::Token.processed 'I'
68
+ @third = Picky::Query::Token.processed 'Am'
69
+ @tokens = described_class.new [
75
70
  @first,
76
71
  @second,
77
72
  @third,
78
- Query::Token.processed('A'),
79
- Query::Token.processed('Token')
73
+ Picky::Query::Token.processed('A'),
74
+ Picky::Query::Token.processed('Token')
80
75
  ]
81
76
  end
82
77
  it 'should cap the number of tokens' do
@@ -90,7 +85,7 @@ describe Query::Tokens do
90
85
  describe 'partialize_last' do
91
86
  context 'special case' do
92
87
  before(:each) do
93
- @token = Query::Token.processed 'a*'
88
+ @token = Picky::Query::Token.processed 'a*'
94
89
  @tokens = described_class.new [@token]
95
90
  end
96
91
  it 'should have a last partialized token' do
@@ -104,7 +99,7 @@ describe Query::Tokens do
104
99
  end
105
100
  context 'one token' do
106
101
  before(:each) do
107
- @token = Query::Token.processed 'Token'
102
+ @token = Picky::Query::Token.processed 'Token'
108
103
  @tokens = described_class.new [@token]
109
104
  end
110
105
  it 'should not have a last partialized token' do
@@ -118,13 +113,13 @@ describe Query::Tokens do
118
113
  end
119
114
  context 'many tokens' do
120
115
  before(:each) do
121
- @first = Query::Token.processed 'Hello'
122
- @last = Query::Token.processed 'Token'
116
+ @first = Picky::Query::Token.processed 'Hello'
117
+ @last = Picky::Query::Token.processed 'Token'
123
118
  @tokens = described_class.new [
124
119
  @first,
125
- Query::Token.processed('I'),
126
- Query::Token.processed('Am'),
127
- Query::Token.processed('A'),
120
+ Picky::Query::Token.processed('I'),
121
+ Picky::Query::Token.processed('Am'),
122
+ Picky::Query::Token.processed('A'),
128
123
  @last
129
124
  ]
130
125
  end
@@ -178,11 +173,11 @@ describe Query::Tokens do
178
173
  describe 'to_s' do
179
174
  before(:each) do
180
175
  @tokens = described_class.new [
181
- Query::Token.processed('Hello~'),
182
- Query::Token.processed('I~'),
183
- Query::Token.processed('Am'),
184
- Query::Token.processed('A*'),
185
- Query::Token.processed('Token~')
176
+ Picky::Query::Token.processed('Hello~'),
177
+ Picky::Query::Token.processed('I~'),
178
+ Picky::Query::Token.processed('Am'),
179
+ Picky::Query::Token.processed('A*'),
180
+ Picky::Query::Token.processed('Token~')
186
181
  ]
187
182
  end
188
183
  it 'should work correctly' do
@@ -1,22 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Query::Weights do
3
+ describe Picky::Query::Weights do
4
4
 
5
5
  context 'with weights' do
6
6
  before(:each) do
7
- @weights = Query::Weights.new [:test1, :test2] => 6,
8
- [:test1] => 5,
9
- [:test3] => 3,
10
- [:test3, :test2] => 4,
11
- [:test1, :test4] => 5,
12
- [:test4, :test1] => 5,
13
- [:test4, :test1, :test2] => 4,
14
- [:test1, :test4, :test2] => 4,
15
- [:test4, :test5] => 3,
16
- [:test5, :test1] => 2,
17
- [:test1, :test5] => 2,
18
- [:test3, :test1] => 2,
19
- [:test1, :test3] => 2
7
+ @weights = described_class.new [:test1, :test2] => 6,
8
+ [:test1] => 5,
9
+ [:test3] => 3,
10
+ [:test3, :test2] => 4,
11
+ [:test1, :test4] => 5,
12
+ [:test4, :test1] => 5,
13
+ [:test4, :test1, :test2] => 4,
14
+ [:test1, :test4, :test2] => 4,
15
+ [:test4, :test5] => 3,
16
+ [:test5, :test1] => 2,
17
+ [:test1, :test5] => 2,
18
+ [:test3, :test1] => 2,
19
+ [:test1, :test3] => 2
20
20
  end
21
21
 
22
22
  describe "weight_for" do
@@ -47,7 +47,7 @@ describe Query::Weights do
47
47
 
48
48
  describe 'to_s' do
49
49
  it 'is correct' do
50
- @weights.to_s.should == "{[:test1, :test2]=>6, [:test1]=>5, [:test3]=>3, [:test3, :test2]=>4, [:test1, :test4]=>5, [:test4, :test1]=>5, [:test4, :test1, :test2]=>4, [:test1, :test4, :test2]=>4, [:test4, :test5]=>3, [:test5, :test1]=>2, [:test1, :test5]=>2, [:test3, :test1]=>2, [:test1, :test3]=>2}"
50
+ @weights.to_s.should == "Picky::Query::Weights({[:test1, :test2]=>6, [:test1]=>5, [:test3]=>3, [:test3, :test2]=>4, [:test1, :test4]=>5, [:test4, :test1]=>5, [:test4, :test1, :test2]=>4, [:test1, :test4, :test2]=>4, [:test4, :test5]=>3, [:test5, :test1]=>2, [:test1, :test5]=>2, [:test3, :test1]=>2, [:test1, :test3]=>2})"
51
51
  end
52
52
  end
53
53
  describe 'empty?' do
@@ -58,7 +58,7 @@ describe Query::Weights do
58
58
  end
59
59
  context 'without weights' do
60
60
  before(:each) do
61
- @weights = Query::Weights.new
61
+ @weights = described_class.new
62
62
  end
63
63
  describe 'empty?' do
64
64
  it 'is correct' do
@@ -1,14 +1,14 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe Rack::Harakiri do
4
+ describe Picky::Rack::Harakiri do
5
5
  before(:each) do
6
6
  @app = stub :app
7
7
  Process.stub! :kill # not taking any chances
8
8
  end
9
9
  context "defaults" do
10
10
  before(:each) do
11
- @ronin = Rack::Harakiri.new @app
11
+ @ronin = described_class.new @app
12
12
  end
13
13
  it "should quit after a default amount of requests" do
14
14
  @ronin.instance_variable_get(:@quit_after_requests).should == 50
@@ -56,11 +56,11 @@ describe Rack::Harakiri do
56
56
  end
57
57
  context "with harakiri set" do
58
58
  before(:each) do
59
- Rack::Harakiri.after = 100
60
- @ronin = Rack::Harakiri.new @app
59
+ described_class.after = 100
60
+ @ronin = described_class.new @app
61
61
  end
62
62
  after(:each) do
63
- Rack::Harakiri.after = nil
63
+ described_class.after = nil
64
64
  end
65
65
  it "should quit after an amount of requests" do
66
66
  @ronin.instance_variable_get(:@quit_after_requests).should == 100
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Results do
3
+ describe Picky::Results do
4
4
 
5
5
  describe "from" do
6
6
  before(:each) do
@@ -2,11 +2,11 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe Search do
5
+ describe Picky::Search do
6
6
 
7
7
  before(:each) do
8
8
  @type = stub :type
9
- @index = stub :some_index, :internal_indexed => @type
9
+ @index = stub :some_index, :internal_indexed => @type, :each_category => []
10
10
  end
11
11
 
12
12
  describe 'tokenized' do
@@ -29,7 +29,7 @@ describe Search do
29
29
  end
30
30
  end
31
31
  it 'works' do
32
- search.weights.should == Query::Weights.new([:a, :b] => 3, [:c, :d] => -1)
32
+ search.weights.should == Picky::Query::Weights.new([:a, :b] => 3, [:c, :d] => -1)
33
33
  end
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ describe Search do
37
37
  context 'no tokenizer predefined' do
38
38
  let(:search) { described_class.new }
39
39
  it 'returns the default tokenizer' do
40
- search.tokenizer.should == Tokenizers::Query.default
40
+ search.tokenizer.should == Picky::Tokenizers::Query.default
41
41
  end
42
42
  end
43
43
  context 'tokenizer predefined' do
@@ -62,18 +62,18 @@ describe Search do
62
62
  let(:search) { described_class.new }
63
63
  it 'returns a specific Combination for a specific input' do
64
64
  some_source = stub(:source, :harvest => nil)
65
- search.combinations_type_for([Index::Memory.new(:gu, source: some_source)]).should == Query::Combinations::Memory
65
+ search.combinations_type_for([Picky::Indexes::Memory.new(:gu, source: some_source)]).should == Picky::Query::Combinations::Memory
66
66
  end
67
67
  it 'just works on the same types' do
68
- search.combinations_type_for([:blorf, :blarf]).should == Query::Combinations::Memory
68
+ search.combinations_type_for([:blorf, :blarf]).should == Picky::Query::Combinations::Memory
69
69
  end
70
70
  it 'just uses standard combinations' do
71
- search.combinations_type_for([:blorf]).should == Query::Combinations::Memory
71
+ search.combinations_type_for([:blorf]).should == Picky::Query::Combinations::Memory
72
72
  end
73
73
  it 'raises on multiple types' do
74
74
  expect do
75
75
  search.combinations_type_for [:blorf, "blarf"]
76
- end.to raise_error(Search::DifferentTypesError)
76
+ end.to raise_error(Picky::Search::DifferentTypesError)
77
77
  end
78
78
  it 'raises with the right message on multiple types' do
79
79
  expect do
@@ -86,35 +86,37 @@ describe Search do
86
86
  it "creates a default weight when no weights are given" do
87
87
  search = described_class.new
88
88
 
89
- search.weights.should be_kind_of(Query::Weights)
89
+ search.weights.should be_kind_of(Picky::Query::Weights)
90
90
  end
91
91
  it "handles :weights options when not yet wrapped" do
92
92
  search = described_class.new :weights => { [:a, :b] => +3 }
93
93
 
94
- search.weights.should be_kind_of(Query::Weights)
94
+ search.weights.should be_kind_of(Picky::Query::Weights)
95
95
  end
96
96
  it "handles :weights options when already wrapped" do
97
- search = described_class.new :weights => Query::Weights.new([:a, :b] => +3)
97
+ search = described_class.new :weights => Picky::Query::Weights.new([:a, :b] => +3)
98
98
 
99
- search.weights.should be_kind_of(Query::Weights)
99
+ search.weights.should be_kind_of(Picky::Query::Weights)
100
100
  end
101
101
  end
102
102
 
103
103
  describe "search_with_text" do
104
104
  before(:each) do
105
- @search = Search.new
105
+ @search = described_class.new
106
106
  end
107
107
  it "delegates to search" do
108
108
  @search.stub! :tokenized => :tokens
109
109
 
110
- @search.should_receive(:search).once.with :tokens, :results, :offset
110
+ @search.should_receive(:search).once.with :tokens, 20, 0
111
111
 
112
- @search.search_with_text :text, :results, :offset
112
+ @search.search_with_text :text, 20, 0
113
113
  end
114
114
  it "uses the tokenizer" do
115
+ @search.stub! :search
116
+
115
117
  @search.should_receive(:tokenized).once.with :text
116
118
 
117
- @search.search_with_text :text, :anything
119
+ @search.search_with_text :text, 20 # (unimportant)
118
120
  end
119
121
  end
120
122
 
@@ -122,7 +124,7 @@ describe Search do
122
124
  context 'with tokenizer' do
123
125
  before(:each) do
124
126
  @tokenizer = stub :tokenizer, :tokenize => :some_tokenized_text
125
- @search = Search.new @index, tokenizer: @tokenizer
127
+ @search = described_class.new @index, tokenizer: @tokenizer
126
128
  end
127
129
  it 'should tokenize using the tokenizer' do
128
130
  @search.tokenized('some text').should == :some_tokenized_text
@@ -132,22 +134,22 @@ describe Search do
132
134
 
133
135
  describe 'to_s' do
134
136
  before(:each) do
135
- @index.stub! :name => :some_index
137
+ @index.stub! :name => :some_index, :each_category => []
136
138
  end
137
139
  context 'with weights' do
138
140
  before(:each) do
139
- @search = Search.new @index, weights: :some_weights
141
+ @search = described_class.new @index, weights: :some_weights
140
142
  end
141
143
  it 'works correctly' do
142
- @search.to_s.should == 'Search(some_index, weights: some_weights)'
144
+ @search.to_s.should == 'Picky::Search(some_index, weights: some_weights)'
143
145
  end
144
146
  end
145
147
  context 'without weights' do
146
148
  before(:each) do
147
- @search = Search.new @index
149
+ @search = described_class.new @index
148
150
  end
149
151
  it 'works correctly' do
150
- @search.to_s.should == 'Search(some_index)'
152
+ @search.to_s.should == 'Picky::Search(some_index)'
151
153
  end
152
154
  end
153
155
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Picky::Sinatra do
4
+
5
+ let(:extendee) { Class.new {} }
6
+
7
+ it 'has no Picky specific methods' do
8
+ lambda { extendee.indexing }.should raise_error
9
+ end
10
+ it 'has no Picky specific methods' do
11
+ lambda { extendee.searching }.should raise_error
12
+ end
13
+
14
+ context 'after extending' do
15
+ before(:each) do
16
+ extendee.extend Picky::Sinatra
17
+ end
18
+ it 'has Picky specific methods' do
19
+ extendee.send :indexing, some: 'option'
20
+ end
21
+ it 'has Picky specific methods' do
22
+ extendee.send :searching, some: 'option'
23
+ end
24
+ it 'gets delegated correctly' do
25
+ Picky::Application.should_receive(:indexing).once.with some: 'option'
26
+
27
+ extendee.send :indexing, some: 'option'
28
+ end
29
+ it 'gets delegated correctly' do
30
+ Picky::Application.should_receive(:searching).once.with some: 'option'
31
+
32
+ extendee.send :searching, some: 'option'
33
+ end
34
+ end
35
+
36
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Base do
3
+ describe Picky::Sources::Base do
4
4
  context 'with the base class' do
5
5
  let(:source) { described_class.new }
6
6
 
@@ -1,16 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Couch do
3
+ describe Picky::Sources::Couch do
4
4
 
5
5
  describe 'key_format' do
6
6
  context 'default' do
7
- let(:source) { Sources::Couch.new(:a, :b, url: 'bla') }
7
+ let(:source) { described_class.new(:a, :b, url: 'bla') }
8
8
  it 'is correct' do
9
9
  source.key_format.should == :to_sym
10
10
  end
11
11
  end
12
12
  context 'non-default' do
13
- let(:source) { Sources::Couch.new(:a, :b, url: 'bla', key_format: 'some_key_method') }
13
+ let(:source) { described_class.new(:a, :b, url: 'bla', key_format: 'some_key_method') }
14
14
  it 'is correct' do
15
15
  source.key_format.should == :some_key_method
16
16
  end
@@ -18,9 +18,9 @@ describe Sources::Couch do
18
18
  end
19
19
 
20
20
  describe 'to_s' do
21
- let(:source) { Sources::Couch.new(:a, :b, :url => 'bla') }
21
+ let(:source) { described_class.new(:a, :b, :url => 'bla') }
22
22
  it 'is correct' do
23
- source.to_s.should == 'Sources::Couch'
23
+ source.to_s.should == 'Picky::Sources::Couch'
24
24
  end
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ describe Sources::Couch do
28
28
  context 'uuid keys' do
29
29
  context "with database" do
30
30
  before(:each) do
31
- @source = Sources::Couch.new :a, :b, :c, url: 'http://localhost:5984/picky'
31
+ @source = described_class.new :a, :b, :c, url: 'http://localhost:5984/picky'
32
32
  RestClient::Request.should_receive(:execute).any_number_of_times.and_return %{{"rows":[{"doc":{"_id":"550e8400-e29b-41d4-a716-446655440000","a":"a data","b":"b data","c":"c data"}}]}}
33
33
  end
34
34
 
@@ -54,7 +54,7 @@ describe Sources::Couch do
54
54
  context 'integer keys' do
55
55
  context "with database" do
56
56
  before(:each) do
57
- @source = Sources::Couch.new :a, :b, :c, url: 'http://localhost:5984/picky'
57
+ @source = described_class.new :a, :b, :c, url: 'http://localhost:5984/picky'
58
58
  RestClient::Request.should_receive(:execute).any_number_of_times.and_return %{{"rows":[{"doc":{"_id":"123","a":"a data","b":"b data","c":"c data"}}]}}
59
59
  end
60
60
 
@@ -82,13 +82,13 @@ describe Sources::Couch do
82
82
  context 'default keys' do
83
83
  context "without database" do
84
84
  it "should fail correctly" do
85
- lambda { @source = Sources::Couch.new(:a, :b, :c) }.should raise_error(Sources::NoCouchDBGiven)
85
+ lambda { described_class.new(:a, :b, :c) }.should raise_error(described_class::NoDBGiven)
86
86
  end
87
87
  end
88
88
 
89
89
  context "with database" do
90
90
  before(:each) do
91
- @source = Sources::Couch.new :a, :b, :c, url: 'http://localhost:5984/picky'
91
+ @source = described_class.new :a, :b, :c, url: 'http://localhost:5984/picky'
92
92
  RestClient::Request.should_receive(:execute).any_number_of_times.and_return %{{"rows":[{"doc":{"_id":"7f","a":"a data","b":"b data","c":"c data"}}]}}
93
93
  end
94
94
 
@@ -1,18 +1,18 @@
1
1
  require 'spec_helper'
2
2
  require 'csv'
3
3
 
4
- describe Sources::CSV do
4
+ describe Picky::Sources::CSV do
5
5
 
6
6
  describe 'to_s' do
7
7
  let(:source) { described_class.new :a, :b, :c, file:'some/file.csv' }
8
8
  it 'outputs the correct string' do
9
- source.to_s.should == 'Sources::CSV(a, b, c, {:file=>"some/file.csv"})'
9
+ source.to_s.should == 'Picky::Sources::CSV(a, b, c, {:file=>"some/file.csv"})'
10
10
  end
11
11
  end
12
12
 
13
13
  describe 'without separator' do
14
14
  before(:each) do
15
- @source = Sources::CSV.new :a, :b, :c, :file => :some_file
15
+ @source = described_class.new :a, :b, :c, :file => :some_file
16
16
  end
17
17
  it 'calls foreach correctly' do
18
18
  block = lambda { |*args| }
@@ -24,7 +24,7 @@ describe Sources::CSV do
24
24
  end
25
25
  describe 'with separator' do
26
26
  before(:each) do
27
- @source = Sources::CSV.new :a, :b, :c, :file => :some_file, :col_sep => 'some_separator'
27
+ @source = described_class.new :a, :b, :c, :file => :some_file, :col_sep => 'some_separator'
28
28
  end
29
29
  it 'calls foreach correctly' do
30
30
  block = lambda { |*args| }
@@ -37,7 +37,7 @@ describe Sources::CSV do
37
37
 
38
38
  context "without file" do
39
39
  it "should fail correctly" do
40
- lambda { @source = Sources::CSV.new(:a, :b, :c) }.should raise_error(Sources::NoCSVFileGiven)
40
+ lambda { @source = described_class.new(:a, :b, :c) }.should raise_error(described_class::NoFileGiven)
41
41
  end
42
42
  end
43
43
  context "with file" do
@@ -46,7 +46,7 @@ describe Sources::CSV do
46
46
  end
47
47
  context 'without separator' do
48
48
  before(:each) do
49
- @source = Sources::CSV.new :a, :b, :c, :file => :some_file
49
+ @source = described_class.new :a, :b, :c, :file => :some_file
50
50
  end
51
51
  describe "harvest" do
52
52
  it "should yield the right data" do
@@ -66,7 +66,7 @@ describe Sources::CSV do
66
66
  end
67
67
  context 'with key_format method' do
68
68
  before(:each) do
69
- @source = Sources::CSV.new :a, :b, :c, :file => :some_file, :key_format => :strip
69
+ @source = described_class.new :a, :b, :c, :file => :some_file, :key_format => :strip
70
70
  end
71
71
  describe "harvest" do
72
72
  it "should yield the right data" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::DB do
3
+ describe Picky::Sources::DB do
4
4
 
5
5
  before(:each) do
6
6
  @connection = stub :connection
@@ -16,7 +16,7 @@ describe Sources::DB do
16
16
 
17
17
  describe 'to_s' do
18
18
  it 'does something' do
19
- @source.to_s.should == 'Sources::DB("some statement", {:option=>:some_options})'
19
+ @source.to_s.should == 'Picky::Sources::DB("some statement", {:option=>:some_options})'
20
20
  end
21
21
  end
22
22
 
@@ -1,18 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Delicious do
3
+ describe Picky::Sources::Delicious do
4
4
 
5
5
  context "with file" do
6
6
 
7
7
  describe 'to_s' do
8
8
  it 'outputs correctly' do
9
- described_class.new(:username, :password).to_s.should == 'Sources::Delicious(username)'
9
+ described_class.new(:username, :password).to_s.should == 'Picky::Sources::Delicious(username)'
10
10
  end
11
11
  end
12
12
 
13
13
  describe "check_gem" do
14
14
  before(:each) do
15
- @source = Sources::Delicious.allocate
15
+ @source = described_class.allocate
16
16
  end
17
17
  context "doesn't find www/delicious" do
18
18
  before(:each) do
@@ -37,7 +37,7 @@ describe Sources::Delicious do
37
37
 
38
38
  describe "harvest" do
39
39
  before(:each) do
40
- @source = Sources::Delicious.new(:username, :password)
40
+ @source = described_class.new(:username, :password)
41
41
 
42
42
  post1 = WWW::Delicious::Post.new
43
43
  post1.uid = "5045d67b3f251e4ae966dffe71501763"
@@ -70,7 +70,7 @@ describe Sources::Delicious do
70
70
  end
71
71
  describe "get_data" do
72
72
  before(:each) do
73
- @source = Sources::Delicious.new(:username, :password)
73
+ @source = described_class.new(:username, :password)
74
74
 
75
75
  post1 = WWW::Delicious::Post.new
76
76
  post1.uid = "5045d67b3f251e4ae966dffe71501763"
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Mongo do
3
+ describe Picky::Sources::Mongo do
4
4
 
5
5
  describe 'key_format' do
6
6
  context 'default' do
7
- let(:source) { Sources::Mongo.new(:a, :b, :url => 'someurl', :db => 'somedb') }
7
+ let(:source) { described_class.new(:a, :b, :url => 'someurl', :db => 'somedb') }
8
8
  it 'is correct' do
9
9
  source.key_format.should == :to_sym
10
10
  end
11
11
  end
12
12
 
13
13
  context 'non-default' do
14
- let(:source) { Sources::Mongo.new(:a, :b, :url => 'bla', :db => 'somedb', :key_format => 'some_key_method') }
14
+ let(:source) { described_class.new(:a, :b, :url => 'bla', :db => 'somedb', :key_format => 'some_key_method') }
15
15
  it 'is correct' do
16
16
  source.key_format.should == :some_key_method
17
17
  end
@@ -19,21 +19,21 @@ describe Sources::Mongo do
19
19
  end
20
20
 
21
21
  describe 'to_s' do
22
- let(:source) { Sources::Mongo.new(:a, :b, :url => 'someurl', :db => 'somedb') }
22
+ let(:source) { described_class.new(:a, :b, :url => 'someurl', :db => 'somedb') }
23
23
  it 'is correct' do
24
- source.to_s.should == 'Sources::Mongo'
24
+ source.to_s.should == 'Picky::Sources::Mongo'
25
25
  end
26
26
  end
27
27
 
28
28
  context "without database" do
29
29
  it "should fail correctly" do
30
- lambda { @source = Sources::Mongo.new(:a, :b, :url => 'someurl') }.should raise_error(Sources::NoMongoDBGiven)
30
+ lambda { @source = described_class.new(:a, :b, :url => 'someurl') }.should raise_error(described_class::NoDBGiven)
31
31
  end
32
32
  end
33
33
 
34
34
  context "with database" do
35
35
  before(:each) do
36
- @source = Sources::Mongo.new :a, :b, :url => 'someurl', :db => 'somedb'
36
+ @source = described_class.new :a, :b, :url => 'someurl', :db => 'somedb'
37
37
  RestClient::Request.should_receive(:execute).any_number_of_times.and_return %{{"rows":[{"_id":"7f","a":"a data","b":"b data","c":"c data"}]}}
38
38
  end
39
39
 
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Wrappers::Base do
3
+ describe Picky::Sources::Wrappers::Base do
4
4
 
5
5
  before(:each) do
6
- @source = stub :source
6
+ @source = stub :source
7
7
  end
8
8
 
9
9
  context "with backend" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sources::Wrappers::Location do
3
+ describe Picky::Sources::Wrappers::Location do
4
4
 
5
5
  context "with backend" do
6
6
  before(:each) do
@@ -7,7 +7,7 @@ require 'spec_helper'
7
7
  #
8
8
  require File.expand_path '../../../lib/picky/statistics', __FILE__
9
9
 
10
- describe Statistics do
10
+ describe Picky::Statistics do
11
11
 
12
12
  let(:stats) { described_class.new }
13
13