picky 1.4.1 → 1.4.2

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 (229) hide show
  1. data/lib/picky/{alias_instances.rb → aliases.rb} +1 -3
  2. data/lib/picky/application.rb +18 -19
  3. data/lib/picky/cores.rb +1 -1
  4. data/lib/picky/generators/aliases.rb +3 -0
  5. data/lib/picky/index/base.rb +179 -0
  6. data/lib/picky/index/memory.rb +28 -0
  7. data/lib/picky/index/redis.rb +28 -0
  8. data/lib/picky/{indexes_api.rb → index_bundle.rb} +16 -16
  9. data/lib/picky/indexed/indexes.rb +11 -7
  10. data/lib/picky/indexing/indexes.rb +14 -8
  11. data/lib/picky/internals/adapters/rack/base.rb +27 -0
  12. data/lib/picky/internals/adapters/rack/live_parameters.rb +37 -0
  13. data/lib/picky/internals/adapters/rack/query.rb +63 -0
  14. data/lib/picky/internals/adapters/rack.rb +34 -0
  15. data/lib/picky/{calculations → internals/calculations}/location.rb +0 -0
  16. data/lib/picky/{cli.rb → internals/cli.rb} +0 -0
  17. data/lib/picky/{configuration → internals/configuration}/index.rb +8 -2
  18. data/lib/picky/{ext → internals/ext}/maybe_compile.rb +0 -0
  19. data/lib/picky/{ext → internals/ext}/ruby19/extconf.rb +0 -0
  20. data/lib/picky/{ext → internals/ext}/ruby19/performant.c +0 -0
  21. data/lib/picky/{extensions → internals/extensions}/array.rb +0 -0
  22. data/lib/picky/{extensions → internals/extensions}/hash.rb +0 -0
  23. data/lib/picky/{extensions → internals/extensions}/module.rb +0 -0
  24. data/lib/picky/{extensions → internals/extensions}/object.rb +0 -0
  25. data/lib/picky/{extensions → internals/extensions}/symbol.rb +0 -0
  26. data/lib/picky/internals/frontend_adapters/rack.rb +154 -0
  27. data/lib/picky/internals/generators/base.rb +19 -0
  28. data/lib/picky/internals/generators/partial/default.rb +7 -0
  29. data/lib/picky/internals/generators/partial/none.rb +35 -0
  30. data/lib/picky/internals/generators/partial/strategy.rb +29 -0
  31. data/lib/picky/internals/generators/partial/substring.rb +122 -0
  32. data/lib/picky/internals/generators/partial_generator.rb +19 -0
  33. data/lib/picky/internals/generators/similarity/default.rb +9 -0
  34. data/lib/picky/internals/generators/similarity/double_levenshtone.rb +81 -0
  35. data/lib/picky/internals/generators/similarity/none.rb +35 -0
  36. data/lib/picky/internals/generators/similarity/strategy.rb +11 -0
  37. data/lib/picky/internals/generators/similarity_generator.rb +19 -0
  38. data/lib/picky/internals/generators/strategy.rb +18 -0
  39. data/lib/picky/internals/generators/weights/default.rb +9 -0
  40. data/lib/picky/internals/generators/weights/logarithmic.rb +43 -0
  41. data/lib/picky/internals/generators/weights/strategy.rb +11 -0
  42. data/lib/picky/internals/generators/weights_generator.rb +19 -0
  43. data/lib/picky/{helpers → internals/helpers}/measuring.rb +0 -0
  44. data/lib/picky/internals/index/backend.rb +113 -0
  45. data/lib/picky/internals/index/file/basic.rb +101 -0
  46. data/lib/picky/internals/index/file/json.rb +38 -0
  47. data/lib/picky/internals/index/file/marshal.rb +38 -0
  48. data/lib/picky/internals/index/file/text.rb +60 -0
  49. data/lib/picky/internals/index/files.rb +24 -0
  50. data/lib/picky/internals/index/redis/basic.rb +77 -0
  51. data/lib/picky/internals/index/redis/list_hash.rb +46 -0
  52. data/lib/picky/internals/index/redis/string_hash.rb +35 -0
  53. data/lib/picky/internals/index/redis.rb +44 -0
  54. data/lib/picky/internals/indexed/bundle/base.rb +72 -0
  55. data/lib/picky/internals/indexed/bundle/memory.rb +69 -0
  56. data/lib/picky/internals/indexed/bundle/redis.rb +70 -0
  57. data/lib/picky/internals/indexed/categories.rb +135 -0
  58. data/lib/picky/internals/indexed/category.rb +90 -0
  59. data/lib/picky/internals/indexed/index.rb +57 -0
  60. data/lib/picky/{indexed → internals/indexed}/wrappers/bundle/calculation.rb +0 -0
  61. data/lib/picky/{indexed → internals/indexed}/wrappers/bundle/location.rb +4 -2
  62. data/lib/picky/{indexed → internals/indexed}/wrappers/bundle/wrapper.rb +1 -1
  63. data/lib/picky/internals/indexed/wrappers/exact_first.rb +65 -0
  64. data/lib/picky/{indexers → internals/indexers}/no_source_specified_error.rb +0 -0
  65. data/lib/picky/{indexers → internals/indexers}/serial.rb +2 -2
  66. data/lib/picky/{indexers → internals/indexers}/solr.rb +0 -0
  67. data/lib/picky/internals/indexing/bundle/base.rb +219 -0
  68. data/lib/picky/internals/indexing/bundle/memory.rb +25 -0
  69. data/lib/picky/internals/indexing/bundle/redis.rb +28 -0
  70. data/lib/picky/internals/indexing/bundle/super_base.rb +65 -0
  71. data/lib/picky/internals/indexing/categories.rb +42 -0
  72. data/lib/picky/internals/indexing/category.rb +120 -0
  73. data/lib/picky/internals/indexing/index.rb +67 -0
  74. data/lib/picky/{performant.rb → internals/performant.rb} +0 -0
  75. data/lib/picky/internals/query/allocation.rb +88 -0
  76. data/lib/picky/internals/query/allocations.rb +137 -0
  77. data/lib/picky/internals/query/combination.rb +80 -0
  78. data/lib/picky/internals/query/combinations/base.rb +84 -0
  79. data/lib/picky/internals/query/combinations/memory.rb +58 -0
  80. data/lib/picky/internals/query/combinations/redis.rb +59 -0
  81. data/lib/picky/internals/query/indexes.rb +180 -0
  82. data/lib/picky/internals/query/qualifiers.rb +81 -0
  83. data/lib/picky/internals/query/token.rb +215 -0
  84. data/lib/picky/internals/query/tokens.rb +89 -0
  85. data/lib/picky/{query → internals/query}/weights.rb +0 -0
  86. data/lib/picky/internals/results/base.rb +106 -0
  87. data/lib/picky/internals/results/full.rb +17 -0
  88. data/lib/picky/internals/results/live.rb +17 -0
  89. data/lib/picky/{solr → internals/solr}/schema_generator.rb +0 -0
  90. data/lib/picky/internals/tokenizers/base.rb +166 -0
  91. data/lib/picky/internals/tokenizers/index.rb +63 -0
  92. data/lib/picky/internals/tokenizers/query.rb +79 -0
  93. data/lib/picky/loader.rb +148 -112
  94. data/lib/picky/query/base.rb +57 -26
  95. data/lib/picky/query/full.rb +1 -1
  96. data/lib/picky/query/live.rb +1 -1
  97. data/lib/picky/sources/db.rb +27 -6
  98. data/lib/tasks/index.rake +3 -3
  99. data/lib/tasks/try.rake +2 -2
  100. data/spec/lib/aliases_spec.rb +9 -0
  101. data/spec/lib/application_spec.rb +3 -3
  102. data/spec/lib/generators/aliases_spec.rb +1 -0
  103. data/spec/lib/{index_api_spec.rb → index/base_spec.rb} +7 -7
  104. data/spec/lib/index_bundle_spec.rb +71 -0
  105. data/spec/lib/indexed/indexes_spec.rb +61 -0
  106. data/spec/lib/indexing/indexes_spec.rb +94 -24
  107. data/spec/lib/{adapters → internals/adapters}/rack/base_spec.rb +2 -2
  108. data/spec/lib/{adapters → internals/adapters}/rack/live_parameters_spec.rb +2 -2
  109. data/spec/lib/{adapters → internals/adapters}/rack/query_spec.rb +2 -2
  110. data/spec/lib/{calculations → internals/calculations}/location_spec.rb +0 -0
  111. data/spec/lib/{cli_spec.rb → internals/cli_spec.rb} +4 -1
  112. data/spec/lib/{configuration → internals/configuration}/index_spec.rb +1 -1
  113. data/spec/lib/{cores_spec.rb → internals/cores_spec.rb} +0 -0
  114. data/spec/lib/{extensions → internals/extensions}/array_spec.rb +0 -0
  115. data/spec/lib/{extensions → internals/extensions}/hash_spec.rb +0 -0
  116. data/spec/lib/{extensions → internals/extensions}/module_spec.rb +0 -0
  117. data/spec/lib/{extensions → internals/extensions}/object_spec.rb +0 -0
  118. data/spec/lib/{extensions → internals/extensions}/symbol_spec.rb +0 -0
  119. data/spec/lib/{frontend_adapters → internals/frontend_adapters}/rack_spec.rb +11 -11
  120. data/spec/lib/{cacher → internals/generators}/cacher_strategy_spec.rb +2 -2
  121. data/spec/lib/internals/generators/partial/default_spec.rb +17 -0
  122. data/spec/lib/internals/generators/partial/none_spec.rb +17 -0
  123. data/spec/lib/{cacher → internals/generators}/partial/substring_spec.rb +26 -27
  124. data/spec/lib/{cacher → internals/generators}/partial_generator_spec.rb +5 -5
  125. data/spec/lib/{cacher → internals/generators}/similarity/double_levenshtone_spec.rb +4 -4
  126. data/spec/lib/{cacher → internals/generators}/similarity/none_spec.rb +2 -2
  127. data/spec/lib/{cacher → internals/generators}/similarity_generator_spec.rb +4 -4
  128. data/spec/lib/{cacher → internals/generators}/weights/logarithmic_spec.rb +2 -2
  129. data/spec/lib/internals/generators/weights_generator_spec.rb +21 -0
  130. data/spec/lib/{helpers → internals/helpers}/measuring_spec.rb +0 -0
  131. data/spec/lib/{index → internals/index}/file/basic_spec.rb +2 -2
  132. data/spec/lib/{index → internals/index}/file/json_spec.rb +2 -2
  133. data/spec/lib/{index → internals/index}/file/marshal_spec.rb +2 -2
  134. data/spec/lib/{index → internals/index}/file/text_spec.rb +2 -2
  135. data/spec/lib/{index → internals/index}/files_spec.rb +2 -2
  136. data/spec/lib/{indexed/bundle_spec.rb → internals/indexed/bundle/memory_spec.rb} +4 -5
  137. data/spec/lib/{indexed → internals/indexed}/categories_spec.rb +13 -13
  138. data/spec/lib/{indexed → internals/indexed}/category_spec.rb +59 -32
  139. data/spec/lib/{indexed → internals/indexed}/index_spec.rb +5 -5
  140. data/spec/lib/{indexed → internals/indexed}/wrappers/bundle/calculation_spec.rb +0 -0
  141. data/spec/lib/{indexed → internals/indexed}/wrappers/bundle/wrapper_spec.rb +0 -0
  142. data/spec/lib/{indexed → internals/indexed}/wrappers/exact_first_spec.rb +5 -5
  143. data/spec/lib/{indexers → internals/indexers}/serial_spec.rb +0 -0
  144. data/spec/lib/{indexing/bundle_partial_generation_speed_spec.rb → internals/indexing/bundle/memory_partial_generation_speed_spec.rb} +3 -3
  145. data/spec/lib/{indexing/bundle_spec.rb → internals/indexing/bundle/memory_spec.rb} +3 -3
  146. data/spec/lib/{index/bundle_spec.rb → internals/indexing/bundle/super_base_spec.rb} +9 -3
  147. data/spec/lib/{indexing → internals/indexing}/category_spec.rb +3 -3
  148. data/spec/lib/{indexing → internals/indexing}/index_spec.rb +3 -3
  149. data/spec/lib/internals/indexing/indexes_spec.rb +36 -0
  150. data/spec/lib/{interfaces → internals/interfaces}/live_parameters_spec.rb +0 -0
  151. data/spec/lib/internals/results/base_spec.rb +105 -0
  152. data/spec/lib/internals/results/full_spec.rb +78 -0
  153. data/spec/lib/internals/results/live_spec.rb +88 -0
  154. data/spec/lib/{solr → internals/solr}/schema_generator_spec.rb +0 -0
  155. data/spec/lib/{tokenizers → internals/tokenizers}/base_spec.rb +3 -3
  156. data/spec/lib/{tokenizers → internals/tokenizers}/index_spec.rb +9 -9
  157. data/spec/lib/{tokenizers → internals/tokenizers}/query_spec.rb +11 -11
  158. data/spec/lib/query/allocation_spec.rb +12 -12
  159. data/spec/lib/query/allocations_spec.rb +19 -19
  160. data/spec/lib/query/base_spec.rb +28 -4
  161. data/spec/lib/query/combination_spec.rb +8 -9
  162. data/spec/lib/query/combinations/base_spec.rb +116 -0
  163. data/spec/lib/query/{combinations_spec.rb → combinations/memory_spec.rb} +14 -14
  164. data/spec/lib/query/combinations/redis_spec.rb +132 -0
  165. data/spec/lib/query/full_spec.rb +2 -2
  166. data/spec/lib/query/indexes_spec.rb +81 -0
  167. data/spec/lib/query/live_spec.rb +3 -3
  168. data/spec/lib/query/qualifiers_spec.rb +6 -6
  169. data/spec/lib/query/token_spec.rb +38 -38
  170. data/spec/lib/query/tokens_spec.rb +35 -35
  171. data/spec/lib/sources/db_spec.rb +23 -18
  172. metadata +212 -181
  173. data/lib/picky/adapters/rack/base.rb +0 -23
  174. data/lib/picky/adapters/rack/live_parameters.rb +0 -33
  175. data/lib/picky/adapters/rack/query.rb +0 -59
  176. data/lib/picky/adapters/rack.rb +0 -28
  177. data/lib/picky/cacher/convenience.rb +0 -3
  178. data/lib/picky/cacher/generator.rb +0 -15
  179. data/lib/picky/cacher/partial/default.rb +0 -5
  180. data/lib/picky/cacher/partial/none.rb +0 -31
  181. data/lib/picky/cacher/partial/strategy.rb +0 -21
  182. data/lib/picky/cacher/partial/substring.rb +0 -118
  183. data/lib/picky/cacher/partial_generator.rb +0 -15
  184. data/lib/picky/cacher/similarity/default.rb +0 -7
  185. data/lib/picky/cacher/similarity/double_levenshtone.rb +0 -77
  186. data/lib/picky/cacher/similarity/none.rb +0 -31
  187. data/lib/picky/cacher/similarity/strategy.rb +0 -9
  188. data/lib/picky/cacher/similarity_generator.rb +0 -15
  189. data/lib/picky/cacher/strategy.rb +0 -12
  190. data/lib/picky/cacher/weights/default.rb +0 -7
  191. data/lib/picky/cacher/weights/logarithmic.rb +0 -39
  192. data/lib/picky/cacher/weights/strategy.rb +0 -9
  193. data/lib/picky/cacher/weights_generator.rb +0 -15
  194. data/lib/picky/frontend_adapters/rack.rb +0 -150
  195. data/lib/picky/index/bundle.rb +0 -54
  196. data/lib/picky/index/file/basic.rb +0 -97
  197. data/lib/picky/index/file/json.rb +0 -34
  198. data/lib/picky/index/file/marshal.rb +0 -34
  199. data/lib/picky/index/file/text.rb +0 -56
  200. data/lib/picky/index/files.rb +0 -118
  201. data/lib/picky/index_api.rb +0 -175
  202. data/lib/picky/indexed/bundle.rb +0 -54
  203. data/lib/picky/indexed/categories.rb +0 -131
  204. data/lib/picky/indexed/category.rb +0 -85
  205. data/lib/picky/indexed/index.rb +0 -39
  206. data/lib/picky/indexed/wrappers/exact_first.rb +0 -61
  207. data/lib/picky/indexing/bundle.rb +0 -213
  208. data/lib/picky/indexing/categories.rb +0 -38
  209. data/lib/picky/indexing/category.rb +0 -117
  210. data/lib/picky/indexing/index.rb +0 -55
  211. data/lib/picky/query/allocation.rb +0 -82
  212. data/lib/picky/query/allocations.rb +0 -130
  213. data/lib/picky/query/combination.rb +0 -74
  214. data/lib/picky/query/combinations.rb +0 -105
  215. data/lib/picky/query/qualifiers.rb +0 -77
  216. data/lib/picky/query/token.rb +0 -202
  217. data/lib/picky/query/tokens.rb +0 -86
  218. data/lib/picky/query/weigher.rb +0 -165
  219. data/lib/picky/results/base.rb +0 -102
  220. data/lib/picky/results/full.rb +0 -13
  221. data/lib/picky/results/live.rb +0 -13
  222. data/lib/picky/tokenizers/base.rb +0 -161
  223. data/lib/picky/tokenizers/index.rb +0 -58
  224. data/lib/picky/tokenizers/query.rb +0 -74
  225. data/spec/lib/cacher/partial/default_spec.rb +0 -15
  226. data/spec/lib/cacher/partial/none_spec.rb +0 -17
  227. data/spec/lib/cacher/weights_generator_spec.rb +0 -21
  228. data/spec/lib/results/base_spec.rb +0 -257
  229. data/spec/lib/results/live_spec.rb +0 -15
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe Internals::Query::Indexes do
4
+
5
+ 3.times do |i|
6
+ n = i + 1
7
+ name = :"index#{n}"
8
+ indexed = :"indexed#{n}"
9
+ let(name) { stub name, :indexed => stub(indexed) }
10
+ end
11
+
12
+ let(:indexes) { described_class.new index1, index2, index3 }
13
+
14
+ describe 'expand_combinations_from' do
15
+ it 'generates all possible combinations from the given ones' do
16
+ combinations = [[1,2,3], [:a, :b, :c], [:k, :l]]
17
+
18
+ indexes.expand_combinations_from(combinations).should == [
19
+ [1, :a, :k],
20
+ [1, :a, :l],
21
+ [1, :b, :k],
22
+ [1, :b, :l],
23
+ [1, :c, :k],
24
+ [1, :c, :l],
25
+ [2, :a, :k],
26
+ [2, :a, :l],
27
+ [2, :b, :k],
28
+ [2, :b, :l],
29
+ [2, :c, :k],
30
+ [2, :c, :l],
31
+ [3, :a, :k],
32
+ [3, :a, :l],
33
+ [3, :b, :k],
34
+ [3, :b, :l],
35
+ [3, :c, :k],
36
+ [3, :c, :l]
37
+ ]
38
+ end
39
+ it 'can handle small combinations' do
40
+ combinations = [[1], [2], [3]]
41
+
42
+ indexes.expand_combinations_from(combinations).should == [[1, 2, 3]]
43
+ end
44
+ it 'can handle empty combinations' do
45
+ combinations = [[1,2,3], [:a, :b, :c], []]
46
+
47
+ indexes.expand_combinations_from(combinations).should == nil
48
+ end
49
+ it 'can handle empty combinations' do
50
+ combinations = [[], [:a, :b, :c], []]
51
+
52
+ indexes.expand_combinations_from(combinations).should == nil
53
+ end
54
+ it 'can handle totally empty combinations' do
55
+ combinations = [[], [], []]
56
+
57
+ indexes.expand_combinations_from(combinations).should == nil
58
+ end
59
+ it 'is fast in a complicated case' do
60
+ combinations = [[1,2,3], [:a, :b, :c], [:k, :l]]
61
+
62
+ performance_of { indexes.expand_combinations_from(combinations) }.should < 0.00055
63
+ end
64
+ it 'is fast in a simple case' do
65
+ combinations = [[1], [2], [3]]
66
+
67
+ performance_of { indexes.expand_combinations_from(combinations) }.should < 0.00055
68
+ end
69
+ it 'is very fast in a 1-empty case' do
70
+ combinations = [[], [2], [3]]
71
+
72
+ performance_of { indexes.expand_combinations_from(combinations) }.should < 0.00045
73
+ end
74
+ it 'is very fast in a all-empty case' do
75
+ combinations = [[], [], []]
76
+
77
+ performance_of { indexes.expand_combinations_from(combinations) }.should < 0.00045
78
+ end
79
+ end
80
+
81
+ end
@@ -9,16 +9,16 @@ describe Query::Live do
9
9
 
10
10
  describe 'result_type' do
11
11
  before(:each) do
12
- @query = Query::Live.new @index
12
+ @query = described_class.new @index
13
13
  end
14
14
  it "should return a specific type" do
15
- @query.result_type.should == Results::Live
15
+ @query.result_type.should == Internals::Results::Live
16
16
  end
17
17
  end
18
18
 
19
19
  describe "execute" do
20
20
  before(:each) do
21
- @query = Query::Live.new @index
21
+ @query = described_class.new @index
22
22
  end
23
23
  it "should get allocations" do
24
24
  @query.result_type.should_receive :from
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Query::Qualifiers do
3
+ describe Internals::Query::Qualifiers do
4
4
 
5
5
  before(:each) do
6
- Query::Qualifiers.instance << Query::Qualifier.new(:test1, ['t1', 'tt1', 'ttt1'])
7
- Query::Qualifiers.instance << Query::Qualifier.new(:test2, [:t2, :tt2, :ttt2])
8
- Query::Qualifiers.instance << Query::Qualifier.new(:test3, [:t3, :tt3, :ttt3])
9
- Query::Qualifiers.instance.prepare
6
+ described_class.instance << Internals::Query::Qualifier.new(:test1, ['t1', 'tt1', 'ttt1'])
7
+ described_class.instance << Internals::Query::Qualifier.new(:test2, [:t2, :tt2, :ttt2])
8
+ described_class.instance << Internals::Query::Qualifier.new(:test3, [:t3, :tt3, :ttt3])
9
+ described_class.instance.prepare
10
10
  end
11
11
 
12
12
  def self.it_should_normalize(qualifier, expected)
13
13
  it "should map #{qualifier} to #{expected}" do
14
- Query::Qualifiers.instance.normalize(qualifier).should == expected
14
+ described_class.instance.normalize(qualifier).should == expected
15
15
  end
16
16
  end
17
17
 
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe Query::Token do
4
+ describe Internals::Query::Token do
5
5
 
6
6
  before(:all) do
7
- Query::Qualifiers.instance << Query::Qualifier.new(:specific, [:sp, :spec])
8
- Query::Qualifiers.instance.prepare
7
+ Internals::Query::Qualifiers.instance << Internals::Query::Qualifier.new(:specific, [:sp, :spec])
8
+ Internals::Query::Qualifiers.instance.prepare
9
9
  end
10
10
 
11
11
  describe 'next_similar_token' do
@@ -13,7 +13,7 @@ describe Query::Token do
13
13
  @bundle = stub :bundle, :similar => [:array, :of, :similar]
14
14
  @category = stub :category, :bundle_for => @bundle
15
15
 
16
- @token = Query::Token.processed 'similar~'
16
+ @token = described_class.processed 'similar~'
17
17
  end
18
18
  it 'returns the right next tokens' do
19
19
  next_token = @token.next_similar_token @category
@@ -36,7 +36,7 @@ describe Query::Token do
36
36
  before(:each) do
37
37
  @bundle.stub! :similar => [:array, :of, :similar]
38
38
 
39
- @token = Query::Token.processed 'similar~'
39
+ @token = described_class.processed 'similar~'
40
40
  end
41
41
  it 'should have a certain original text' do
42
42
  @token.next_similar @bundle
@@ -50,7 +50,7 @@ describe Query::Token do
50
50
  before(:each) do
51
51
  @bundle.stub! :similar => [:array, :of, :similar]
52
52
 
53
- @token = Query::Token.processed 'similar~'
53
+ @token = described_class.processed 'similar~'
54
54
  end
55
55
  it 'generates all similar' do
56
56
  @token.next_similar(@bundle).should == :array
@@ -73,7 +73,7 @@ describe Query::Token do
73
73
  before(:each) do
74
74
  @bundle.stub! :similar => [:array, :of, :similar]
75
75
 
76
- @token = Query::Token.processed 'nonsimilar'
76
+ @token = described_class.processed 'nonsimilar'
77
77
  end
78
78
  it 'generates all similar' do
79
79
  @token.next_similar(@bundle).should == nil
@@ -93,7 +93,7 @@ describe Query::Token do
93
93
  before(:each) do
94
94
  @bundle = stub :bundle
95
95
 
96
- @token = Query::Token.processed 'flarb~'
96
+ @token = described_class.processed 'flarb~'
97
97
  end
98
98
  context "with similar" do
99
99
  before(:each) do
@@ -116,7 +116,7 @@ describe Query::Token do
116
116
  describe 'to_solr' do
117
117
  def self.it_should_solr text, expected_result
118
118
  it "should solrify into #{expected_result} from #{text}" do
119
- Query::Token.processed(text).to_solr.should == expected_result
119
+ described_class.processed(text).to_solr.should == expected_result
120
120
  end
121
121
  end
122
122
  it_should_solr 's', 's'
@@ -144,7 +144,7 @@ describe Query::Token do
144
144
  describe 'qualify' do
145
145
  def self.it_should_qualify text, expected_result
146
146
  it "should extract the qualifier #{expected_result} from #{text}" do
147
- Query::Token.new(text).qualify.should == expected_result
147
+ described_class.new(text).qualify.should == expected_result
148
148
  end
149
149
  end
150
150
  it_should_qualify 'spec:qualifier', :specific
@@ -159,7 +159,7 @@ describe Query::Token do
159
159
  describe 'processed' do
160
160
  it 'should have an order' do
161
161
  token = stub :token
162
- Query::Token.should_receive(:new).once.and_return token
162
+ described_class.should_receive(:new).once.and_return token
163
163
 
164
164
  token.should_receive(:qualify).once.ordered
165
165
  token.should_receive(:extract_original).once.ordered
@@ -167,17 +167,17 @@ describe Query::Token do
167
167
  token.should_receive(:similarize).once.ordered
168
168
  token.should_receive(:remove_illegals).once.ordered
169
169
 
170
- Query::Token.processed :any_text
170
+ described_class.processed :any_text
171
171
  end
172
172
  it 'should return a new token' do
173
- Query::Token.processed('some text').should be_kind_of(Query::Token)
173
+ described_class.processed('some text').should be_kind_of(described_class)
174
174
  end
175
175
  end
176
176
 
177
177
  describe 'partial?' do
178
178
  context 'similar, partial' do
179
179
  before(:each) do
180
- @token = Query::Token.processed 'similar~'
180
+ @token = described_class.processed 'similar~'
181
181
  @token.partial = true
182
182
  end
183
183
  it 'should be false' do
@@ -186,7 +186,7 @@ describe Query::Token do
186
186
  end
187
187
  context 'similar, not partial' do
188
188
  before(:each) do
189
- @token = Query::Token.processed 'similar~'
189
+ @token = described_class.processed 'similar~'
190
190
  end
191
191
  it 'should be false' do
192
192
  @token.partial?.should == false
@@ -194,7 +194,7 @@ describe Query::Token do
194
194
  end
195
195
  context 'not similar, partial' do
196
196
  before(:each) do
197
- @token = Query::Token.processed 'not similar'
197
+ @token = described_class.processed 'not similar'
198
198
  @token.partial = true
199
199
  end
200
200
  it 'should be true' do
@@ -203,7 +203,7 @@ describe Query::Token do
203
203
  end
204
204
  context 'not similar, not partial' do
205
205
  before(:each) do
206
- @token = Query::Token.processed 'not similar'
206
+ @token = described_class.processed 'not similar'
207
207
  end
208
208
  it 'should be nil' do
209
209
  @token.partial?.should == nil
@@ -213,12 +213,12 @@ describe Query::Token do
213
213
 
214
214
  describe 'similar' do
215
215
  it 'should not change the original with the text' do
216
- token = Query::Token.processed "bla~"
216
+ token = described_class.processed "bla~"
217
217
  token.text.should_not == token.original
218
218
  end
219
219
  def self.it_should_have_similarity text, expected_similarity_value
220
220
  it "should have #{ "no" unless expected_similarity_value } similarity for '#{text}'" do
221
- Query::Token.processed(text).similar?.should == expected_similarity_value
221
+ described_class.processed(text).similar?.should == expected_similarity_value
222
222
  end
223
223
  end
224
224
  it_should_have_similarity 'name:', nil
@@ -238,7 +238,7 @@ describe Query::Token do
238
238
 
239
239
  describe 'special cases' do
240
240
  it 'should be blank on ""' do
241
- token = Query::Token.processed '""'
241
+ token = described_class.processed '""'
242
242
 
243
243
  token.should be_blank
244
244
  end
@@ -247,7 +247,7 @@ describe Query::Token do
247
247
  describe 'split' do
248
248
  def self.it_should_split text, expected_qualifier
249
249
  it "should extract #{expected_qualifier} from #{text}" do
250
- Query::Token.new('any').send(:split, text).should == expected_qualifier
250
+ described_class.new('any').send(:split, text).should == expected_qualifier
251
251
  end
252
252
  end
253
253
  it_should_split '""', [nil, '""']
@@ -261,7 +261,7 @@ describe Query::Token do
261
261
 
262
262
  describe "original" do
263
263
  it "should keep the original text even when processed" do
264
- token = Query::Token.processed "I'm the original token text."
264
+ token = described_class.processed "I'm the original token text."
265
265
 
266
266
  token.original.should == "I'm the original token text."
267
267
  end
@@ -269,12 +269,12 @@ describe Query::Token do
269
269
 
270
270
  describe "blank?" do
271
271
  it "should be blank if the token text itself is blank" do
272
- token = Query::Token.processed ''
272
+ token = described_class.processed ''
273
273
 
274
274
  token.blank?.should be_true
275
275
  end
276
276
  it "should be non-blank if the token text itself is non-blank" do
277
- token = Query::Token.processed 'not empty'
277
+ token = described_class.processed 'not empty'
278
278
 
279
279
  token.blank?.should be_false
280
280
  end
@@ -283,14 +283,14 @@ describe Query::Token do
283
283
  describe "to_s" do
284
284
  describe "with qualifier" do
285
285
  it "should display qualifier and text combined with a ':'" do
286
- token = Query::Token.processed('sp:qualifier')
286
+ token = described_class.processed('sp:qualifier')
287
287
 
288
288
  token.to_s.should == 'specific:qualifier'
289
289
  end
290
290
  end
291
291
  describe "without qualifier" do
292
292
  it "should display just the text" do
293
- token = Query::Token.processed('text')
293
+ token = described_class.processed('text')
294
294
 
295
295
  token.to_s.should == 'text'
296
296
  end
@@ -300,7 +300,7 @@ describe Query::Token do
300
300
  describe 'user_defined_category_name' do
301
301
  context 'with qualifier' do
302
302
  before(:each) do
303
- @token = Query::Token.processed('sp:qualifier')
303
+ @token = described_class.processed('sp:qualifier')
304
304
  end
305
305
  it 'should return the qualifier' do
306
306
  @token.user_defined_category_name.should == :specific
@@ -308,7 +308,7 @@ describe Query::Token do
308
308
  end
309
309
  context 'without qualifier' do
310
310
  before(:each) do
311
- @token = Query::Token.processed('noqualifier')
311
+ @token = described_class.processed('noqualifier')
312
312
  end
313
313
  it 'should return nil' do
314
314
  @token.user_defined_category_name.should == nil
@@ -319,7 +319,7 @@ describe Query::Token do
319
319
  describe "split" do
320
320
  def self.it_should_split text, expected_result
321
321
  it "should split #{expected_result} from #{text}" do
322
- Query::Token.new('any').send(:split, text).should == expected_result
322
+ described_class.new('any').send(:split, text).should == expected_result
323
323
  end
324
324
  end
325
325
  it_should_split ':', [nil, '']
@@ -335,7 +335,7 @@ describe Query::Token do
335
335
  describe 'partial=' do
336
336
  context 'partial nil' do
337
337
  before(:each) do
338
- @token = Query::Token.new 'text'
338
+ @token = described_class.new 'text'
339
339
  end
340
340
  it 'should set partial' do
341
341
  @token.partial = true
@@ -350,7 +350,7 @@ describe Query::Token do
350
350
  end
351
351
  context 'partial not nil' do
352
352
  before(:each) do
353
- @token = Query::Token.processed 'text*'
353
+ @token = described_class.processed 'text*'
354
354
  end
355
355
  it 'should not set partial' do
356
356
  @token.partial = false
@@ -362,17 +362,17 @@ describe Query::Token do
362
362
 
363
363
  describe 'partialize!' do
364
364
  it 'should not partialize a token if the text ends with "' do
365
- token = Query::Token.processed 'text"'
365
+ token = described_class.processed 'text"'
366
366
 
367
367
  token.instance_variable_get(:@partial).should be_false
368
368
  end
369
369
  it 'should partialize a token if the text ends with *' do
370
- token = Query::Token.processed 'text*'
370
+ token = described_class.processed 'text*'
371
371
 
372
372
  token.instance_variable_get(:@partial).should be_true
373
373
  end
374
374
  it 'should not partialize a token if the text ends with ~' do
375
- token = Query::Token.processed 'text~'
375
+ token = described_class.processed 'text~'
376
376
 
377
377
  token.instance_variable_get(:@partial).should be_nil
378
378
  end
@@ -380,22 +380,22 @@ describe Query::Token do
380
380
 
381
381
  describe "processed" do
382
382
  it 'should remove *' do
383
- token = Query::Token.processed 'text*'
383
+ token = described_class.processed 'text*'
384
384
 
385
385
  token.text.should == 'text'
386
386
  end
387
387
  it 'should remove ~' do
388
- token = Query::Token.processed 'text~'
388
+ token = described_class.processed 'text~'
389
389
 
390
390
  token.text.should == 'text'
391
391
  end
392
392
  it 'should remove "' do
393
- token = Query::Token.processed 'text"'
393
+ token = described_class.processed 'text"'
394
394
 
395
395
  token.text.should == 'text'
396
396
  end
397
397
  it "should pass on a processed text" do
398
- Query::Token.processed('text').text.should == 'text'
398
+ described_class.processed('text').text.should == 'text'
399
399
  end
400
400
  end
401
401
 
@@ -1,21 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Query::Tokens do
3
+ describe Internals::Query::Tokens do
4
4
 
5
5
  before(:all) do
6
- Query::Qualifiers.instance << Query::Qualifier.new(:specific, [:sp, :spec])
7
- Query::Qualifiers.instance.prepare
6
+ Internals::Query::Qualifiers.instance << Internals::Query::Qualifier.new(:specific, [:sp, :spec])
7
+ Internals::Query::Qualifiers.instance.prepare
8
8
  end
9
9
 
10
10
  describe 'to_solr_query' do
11
11
  context 'many tokens' do
12
12
  before(:each) do
13
- @tokens = Query::Tokens.new [
14
- Query::Token.processed('this~'),
15
- Query::Token.processed('is'),
16
- Query::Token.processed('a'),
17
- Query::Token.processed('sp:solr'),
18
- Query::Token.processed('query"')
13
+ @tokens = described_class.new [
14
+ Internals::Query::Token.processed('this~'),
15
+ Internals::Query::Token.processed('is'),
16
+ Internals::Query::Token.processed('a'),
17
+ Internals::Query::Token.processed('sp:solr'),
18
+ Internals::Query::Token.processed('query"')
19
19
  ]
20
20
  end
21
21
  it 'should output a correct solr query' do
@@ -28,7 +28,7 @@ describe Query::Tokens do
28
28
  before(:each) do
29
29
  @blank = stub :blank, :blank? => true
30
30
  @nonblank = stub :nonblank, :blank? => false
31
- @tokens = Query::Tokens.new [@blank, @nonblank, @blank, @blank, @nonblank]
31
+ @tokens = described_class.new [@blank, @nonblank, @blank, @blank, @nonblank]
32
32
  end
33
33
  it 'should not cut it down' do
34
34
  @tokens.reject
@@ -40,8 +40,8 @@ describe Query::Tokens do
40
40
  describe 'cap' do
41
41
  context 'one token' do
42
42
  before(:each) do
43
- @token = Query::Token.processed 'Token'
44
- @tokens = Query::Tokens.new [@token]
43
+ @token = Internals::Query::Token.processed 'Token'
44
+ @tokens = described_class.new [@token]
45
45
  end
46
46
  it 'does not cut it down' do
47
47
  @tokens.cap 5
@@ -56,15 +56,15 @@ describe Query::Tokens do
56
56
  end
57
57
  context 'many tokens' do
58
58
  before(:each) do
59
- @first = Query::Token.processed 'Hello'
60
- @second = Query::Token.processed 'I'
61
- @third = Query::Token.processed 'Am'
62
- @tokens = Query::Tokens.new [
59
+ @first = Internals::Query::Token.processed 'Hello'
60
+ @second = Internals::Query::Token.processed 'I'
61
+ @third = Internals::Query::Token.processed 'Am'
62
+ @tokens = Internals::Query::Tokens.new [
63
63
  @first,
64
64
  @second,
65
65
  @third,
66
- Query::Token.processed('A'),
67
- Query::Token.processed('Token')
66
+ Internals::Query::Token.processed('A'),
67
+ Internals::Query::Token.processed('Token')
68
68
  ]
69
69
  end
70
70
  it 'should cap the number of tokens' do
@@ -78,8 +78,8 @@ describe Query::Tokens do
78
78
  describe 'partialize_last' do
79
79
  context 'special case' do
80
80
  before(:each) do
81
- @token = Query::Token.processed 'a*'
82
- @tokens = Query::Tokens.new [@token]
81
+ @token = Internals::Query::Token.processed 'a*'
82
+ @tokens = described_class.new [@token]
83
83
  end
84
84
  it 'should have a last partialized token' do
85
85
  @token.should be_partial
@@ -92,8 +92,8 @@ describe Query::Tokens do
92
92
  end
93
93
  context 'one token' do
94
94
  before(:each) do
95
- @token = Query::Token.processed 'Token'
96
- @tokens = Query::Tokens.new [@token]
95
+ @token = Internals::Query::Token.processed 'Token'
96
+ @tokens = described_class.new [@token]
97
97
  end
98
98
  it 'should not have a last partialized token' do
99
99
  @token.should_not be_partial
@@ -106,13 +106,13 @@ describe Query::Tokens do
106
106
  end
107
107
  context 'many tokens' do
108
108
  before(:each) do
109
- @first = Query::Token.processed 'Hello'
110
- @last = Query::Token.processed 'Token'
111
- @tokens = Query::Tokens.new [
109
+ @first = Internals::Query::Token.processed 'Hello'
110
+ @last = Internals::Query::Token.processed 'Token'
111
+ @tokens = described_class.new [
112
112
  @first,
113
- Query::Token.processed('I'),
114
- Query::Token.processed('Am'),
115
- Query::Token.processed('A'),
113
+ Internals::Query::Token.processed('I'),
114
+ Internals::Query::Token.processed('Am'),
115
+ Internals::Query::Token.processed('A'),
116
116
  @last
117
117
  ]
118
118
  end
@@ -134,12 +134,12 @@ describe Query::Tokens do
134
134
 
135
135
  describe 'to_s' do
136
136
  before(:each) do
137
- @tokens = Query::Tokens.new [
138
- Query::Token.processed('Hello~'),
139
- Query::Token.processed('I~'),
140
- Query::Token.processed('Am'),
141
- Query::Token.processed('A*'),
142
- Query::Token.processed('Token~')
137
+ @tokens = described_class.new [
138
+ Internals::Query::Token.processed('Hello~'),
139
+ Internals::Query::Token.processed('I~'),
140
+ Internals::Query::Token.processed('Am'),
141
+ Internals::Query::Token.processed('A*'),
142
+ Internals::Query::Token.processed('Token~')
143
143
  ]
144
144
  end
145
145
  it 'should work correctly' do
@@ -151,7 +151,7 @@ describe Query::Tokens do
151
151
  describe name do
152
152
  before(:each) do
153
153
  @internal_tokens = mock :internal_tokens
154
- @tokens = Query::Tokens.new @internal_tokens
154
+ @tokens = described_class.new @internal_tokens
155
155
  end
156
156
  it "should delegate #{name} to the internal tokens" do
157
157
  proc_stub = lambda {}
@@ -10,7 +10,7 @@ describe Sources::DB do
10
10
 
11
11
  @select_statement = stub :statement
12
12
 
13
- @source = Sources::DB.new @select_statement, :option => :some_options
13
+ @source = described_class.new @select_statement, :option => :some_options
14
14
 
15
15
  @source.stub! :database => @adapter
16
16
  @source.stub! :connect_backend
@@ -21,27 +21,32 @@ describe Sources::DB do
21
21
  @type = stub :type, :name => :some_type
22
22
  @category = stub :category, :from => :some_category
23
23
  end
24
- context 'no data' do
25
- it "delegates to the connection" do
24
+ context 'mysql' do
25
+ before(:each) do
26
+ @connection.stub! :adapter_name => 'mysql'
27
+ end
28
+ context 'no data' do
29
+ it "delegates to the connection" do
26
30
 
27
- @connection.should_receive(:execute).
28
- once.
29
- with('SELECT indexed_id, some_category FROM some_type_type_index st WHERE st.id > some_offset LIMIT 25000').
30
- and_return []
31
+ @connection.should_receive(:execute).
32
+ once.
33
+ with('SELECT indexed_id, some_category FROM some_type_type_index st WHERE st.id > some_offset LIMIT 25000').
34
+ and_return []
31
35
 
32
- @source.get_data @type, @category, :some_offset
36
+ @source.get_data @type, @category, :some_offset
37
+ end
33
38
  end
34
- end
35
- context 'with data' do
36
- it 'yields to the caller' do
37
- @connection.should_receive(:execute).
38
- any_number_of_times.
39
- with('SELECT indexed_id, some_category FROM some_type_type_index st WHERE st.id > some_offset LIMIT 25000').
40
- and_return [[1, 'text']]
39
+ context 'with data' do
40
+ it 'yields to the caller' do
41
+ @connection.should_receive(:execute).
42
+ any_number_of_times.
43
+ with('SELECT indexed_id, some_category FROM some_type_type_index st WHERE st.id > some_offset LIMIT 25000').
44
+ and_return [[1, 'text']]
41
45
 
42
- @source.get_data @type, @category, :some_offset do |id, text|
43
- id.should == 1
44
- text.should == 'text'
46
+ @source.get_data @type, @category, :some_offset do |id, text|
47
+ id.should == 1
48
+ text.should == 'text'
49
+ end
45
50
  end
46
51
  end
47
52
  end