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
data/lib/tasks/index.rake CHANGED
@@ -16,11 +16,11 @@ namespace :index do
16
16
  Indexes.take_snapshot
17
17
  end
18
18
 
19
- desc "Generates a specific index from index snapshots."
19
+ desc "Generates a specific index from index snapshots (category optional)."
20
20
  task :specific, [:index, :category] => :application do |_, options|
21
21
  index, category = options.index, options.category
22
- Indexes.generate_index_only index.to_sym, category.to_sym
23
- Indexes.generate_cache_only index.to_sym, category.to_sym
22
+ Indexes.generate_index_only index.to_sym, category && category.to_sym
23
+ Indexes.generate_cache_only index.to_sym, category && category.to_sym
24
24
  end
25
25
 
26
26
  desc 'Checks the index files for files that are suspiciously small or missing.'
data/lib/tasks/try.rake CHANGED
@@ -6,7 +6,7 @@ namespace :try do
6
6
  task :index, [:text, :index_and_category] => :application do |_, options|
7
7
  text, index_and_category = options.text, options.index_and_category
8
8
 
9
- tokenizer = index_and_category ? Indexes.find(*index_and_category.split(':')).tokenizer : Tokenizers::Index.default
9
+ tokenizer = index_and_category ? Indexes.find(*index_and_category.split(':')).tokenizer : Internals::Tokenizers::Index.default
10
10
 
11
11
  puts "\"#{text}\" is saved in the index as #{tokenizer.tokenize(text.dup).to_a}"
12
12
  end
@@ -15,7 +15,7 @@ namespace :try do
15
15
  task :query, [:text] => :application do |_, options|
16
16
  text = options.text
17
17
 
18
- puts "\"#{text}\" as a query will be preprocessed into #{Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
18
+ puts "\"#{text}\" as a query will be preprocessed into #{Internals::Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
19
19
  end
20
20
 
21
21
  # desc "Try the given text with both the index and the query (type:category optional)."
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'spec_helper'
4
+
5
+ describe 'aliases' do
6
+ it 'exists an Indexes class that is an instance of API::Indexes' do
7
+ Indexes.class.should == IndexBundle
8
+ end
9
+ end
@@ -19,8 +19,8 @@ describe Application do
19
19
  route %r{^/books/full} => full
20
20
  route %r{^/books/live} => live
21
21
  end
22
- Tokenizers::Index.default.tokenize 'some text'
23
- Tokenizers::Query.default.tokenize 'some text'
22
+ Internals::Tokenizers::Index.default.tokenize 'some text'
23
+ Internals::Tokenizers::Query.default.tokenize 'some text'
24
24
  }.should_not raise_error
25
25
  end
26
26
  it "should run ok" do
@@ -97,7 +97,7 @@ describe Application do
97
97
  lambda { Application.rack_adapter }.should_not raise_error
98
98
  end
99
99
  it "should return a new FrontendAdapters::Rack instance" do
100
- Application.rack_adapter.should be_kind_of(FrontendAdapters::Rack)
100
+ Application.rack_adapter.should be_kind_of(Internals::FrontendAdapters::Rack)
101
101
  end
102
102
  it "should cache the instance" do
103
103
  Application.rack_adapter.should == Application.rack_adapter
@@ -0,0 +1 @@
1
+ # TODO aliases spec.
@@ -2,16 +2,16 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe IndexAPI do
5
+ describe Index::Base do
6
6
 
7
7
  context 'initializer' do
8
8
  it 'works' do
9
- lambda { IndexAPI.new :some_index_name, :some_source }.should_not raise_error
9
+ lambda { described_class.new :some_index_name, :some_source }.should_not raise_error
10
10
  end
11
11
  it 'registers with the indexes' do
12
- @api = IndexAPI.allocate
12
+ @api = described_class.allocate
13
13
 
14
- Indexes.should_receive(:register).once.with @api
14
+ ::Indexes.should_receive(:register).once.with @api
15
15
 
16
16
  @api.send :initialize, :some_index_name, :some_source
17
17
  end
@@ -19,7 +19,7 @@ describe IndexAPI do
19
19
 
20
20
  context 'unit' do
21
21
  before(:each) do
22
- @api = IndexAPI.new :some_index_name, :some_source
22
+ @api = described_class.new :some_index_name, :some_source
23
23
  end
24
24
 
25
25
  describe 'define_category' do
@@ -32,8 +32,8 @@ describe IndexAPI do
32
32
  end
33
33
  it 'yields both the indexing category and the indexed category' do
34
34
  @api.define_category(:some_name) do |indexing, indexed|
35
- indexing.should be_kind_of(Indexing::Category)
36
- indexed.should be_kind_of(Indexed::Category)
35
+ indexing.should be_kind_of(Internals::Indexing::Category)
36
+ indexed.should be_kind_of(Internals::Indexed::Category)
37
37
  end
38
38
  end
39
39
  it 'yields the indexing category which has the given name' do
@@ -0,0 +1,71 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'spec_helper'
4
+
5
+ describe IndexBundle do
6
+
7
+ let(:some_index) { stub :index, :name => :some_index, :indexed => :indexed_index, :indexing => :indexing_index }
8
+ let(:indexes) { described_class.new }
9
+ let(:indexed) { stub :indexed, :register => nil }
10
+ let(:indexing) { stub :indexing, :register => nil }
11
+
12
+ before(:each) do
13
+ indexes.stub! :indexing => indexing
14
+ indexes.stub! :indexed => indexed
15
+ end
16
+
17
+ def self.it_delegates method, receiver
18
+ it "delegates #{method} to #{receiver}" do
19
+ indexes.send(receiver).should_receive(method.to_sym).once
20
+
21
+ indexes.send method
22
+ end
23
+ end
24
+
25
+ describe 'delegation' do
26
+ it_delegates :reload, :indexed
27
+ it_delegates :load_from_cache, :indexed
28
+
29
+ it_delegates :check_caches, :indexing
30
+ it_delegates :find, :indexing
31
+ it_delegates :generate_cache_only, :indexing
32
+ it_delegates :generate_index_only, :indexing
33
+ it_delegates :index, :indexing
34
+ it_delegates :index_for_tests, :indexing
35
+ end
36
+
37
+ describe '[]' do
38
+ before(:each) do
39
+ indexes.register some_index
40
+ end
41
+ it 'takes strings' do
42
+ indexes['some_index'].should == some_index
43
+ end
44
+ it 'takes symbols' do
45
+ indexes[:some_index].should == some_index
46
+ end
47
+ end
48
+
49
+ describe 'register' do
50
+ it 'registers with the indexes' do
51
+ indexes.register some_index
52
+
53
+ indexes.indexes.should == [some_index]
54
+ end
55
+ it 'registers with the index map' do
56
+ indexes.register some_index
57
+
58
+ indexes[some_index.name].should == some_index
59
+ end
60
+ it 'registers with the indexing' do
61
+ indexing.should_receive(:register).once.with :indexing_index
62
+
63
+ indexes.register some_index
64
+ end
65
+ it 'registers with the indexed' do
66
+ indexed.should_receive(:register).once.with :indexed_index
67
+
68
+ indexes.register some_index
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Indexed::Indexes do
4
+
5
+ context 'after initialize' do
6
+ let(:indexes) { described_class.new }
7
+ it 'has an empty mapping' do
8
+ indexes.index_mapping.should == {}
9
+ end
10
+ it 'has no indexes' do
11
+ indexes.indexes.should == []
12
+ end
13
+ end
14
+
15
+ describe 'methods' do
16
+ let(:indexes) { described_class.new }
17
+ before(:each) do
18
+ @index1 = stub :index1, :name => :index1
19
+ @index2 = stub :index2, :name => :index2
20
+ indexes.register @index1
21
+ indexes.register @index2
22
+ end
23
+ describe '[]' do
24
+ it 'should use the mapping' do
25
+ indexes[:index2].should == @index2
26
+ end
27
+ it 'should allow strings' do
28
+ indexes['index1'].should == @index1
29
+ end
30
+ end
31
+ describe 'register' do
32
+ it 'should have indexes' do
33
+ indexes.indexes.should == [@index1, @index2]
34
+ end
35
+ it 'should have a mapping' do
36
+ indexes.index_mapping.should == { :index1 => @index1, :index2 => @index2 }
37
+ end
38
+ end
39
+ describe 'clear' do
40
+ it 'clears the indexes' do
41
+ indexes.clear
42
+
43
+ indexes.indexes.should == []
44
+ end
45
+ it 'clears the mapping' do
46
+ indexes.clear
47
+
48
+ indexes.index_mapping.should == {}
49
+ end
50
+ end
51
+ describe 'reload' do
52
+ it 'calls load_from_cache on each in order' do
53
+ @index1.should_receive(:load_from_cache).once.with.ordered
54
+ @index2.should_receive(:load_from_cache).once.with.ordered
55
+
56
+ indexes.reload
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -1,36 +1,106 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Indexing::Indexes do
4
-
5
- before(:each) do
6
- @indexes = Indexing::Indexes.new
4
+
5
+ context 'after initialize' do
6
+ let(:indexes) { described_class.new }
7
+ it 'has no indexes' do
8
+ indexes.indexes.should == []
9
+ end
7
10
  end
8
11
 
9
- describe 'indexes' do
10
- it 'exists' do
11
- lambda { @indexes.indexes }.should_not raise_error
12
+ describe 'methods' do
13
+ let(:indexes) { described_class.new }
14
+ before(:each) do
15
+ @index1 = stub :index1, :name => :index1
16
+ @index2 = stub :index2, :name => :index2
17
+ indexes.register @index1
18
+ indexes.register @index2
12
19
  end
13
- it 'is empty by default' do
14
- @indexes.indexes.should be_empty
20
+ describe 'generate_index_only' do
21
+ context 'with index:category found' do
22
+ before(:each) do
23
+ indexes.should_receive(:find).once.with(:index, :category).and_return @index1
24
+ end
25
+ it 'indexes' do
26
+ @index1.should_receive(:index).once.with
27
+
28
+ indexes.generate_index_only :index, :category
29
+ end
30
+ end
31
+ context 'with index not found' do
32
+ before(:each) do
33
+ indexes.should_receive(:find).once.with(:index, :category).and_return nil
34
+ end
35
+ it 'indexes' do
36
+ @index1.should_receive(:index).never
37
+
38
+ indexes.generate_index_only :index, :category
39
+ end
40
+ end
15
41
  end
16
- end
17
-
18
- describe 'clear' do
19
- it 'clears the indexes' do
20
- @indexes.register :some_index
21
-
22
- @indexes.clear
23
-
24
- @indexes.indexes.should == []
42
+ describe 'generate_cache_only' do
43
+ context 'with index:category found' do
44
+ before(:each) do
45
+ indexes.should_receive(:find).once.with(:index, :category).and_return @index1
46
+ end
47
+ it 'indexes' do
48
+ @index1.should_receive(:index).once.with
49
+
50
+ indexes.generate_index_only :index, :category
51
+ end
52
+ end
53
+ context 'with index not found' do
54
+ before(:each) do
55
+ indexes.should_receive(:find).once.with(:index, :category).and_return nil
56
+ end
57
+ it 'indexes' do
58
+ @index1.should_receive(:index).never
59
+
60
+ indexes.generate_index_only :index, :category
61
+ end
62
+ end
25
63
  end
26
- end
27
-
28
- describe 'register' do
29
- it 'adds the given index to the indexes' do
30
- @indexes.register :some_index
31
-
32
- @indexes.indexes.should == [:some_index]
64
+ describe 'index_for_tests' do
65
+ it 'takes a snapshot, then indexes and caches each' do
66
+ indexes.should_receive(:take_snapshot).once.with.ordered
67
+ @index1.should_receive(:index).once.with.ordered
68
+ @index1.should_receive(:cache).once.with.ordered
69
+ @index2.should_receive(:index).once.with.ordered
70
+ @index2.should_receive(:cache).once.with.ordered
71
+
72
+ indexes.index_for_tests
73
+ end
74
+ end
75
+ describe 'register' do
76
+ it 'should have indexes' do
77
+ indexes.indexes.should == [@index1, @index2]
78
+ end
79
+ end
80
+ describe 'clear' do
81
+ it 'clears the indexes' do
82
+ indexes.clear
83
+
84
+ indexes.indexes.should == []
85
+ end
86
+ end
87
+ def self.it_delegates_each name
88
+ describe name do
89
+ it 'calls load_from_cache on each in order' do
90
+ @index1.should_receive(name).once.with.ordered
91
+ @index2.should_receive(name).once.with.ordered
92
+
93
+ indexes.send name
94
+ end
95
+ end
33
96
  end
97
+ it_delegates_each :take_snapshot
98
+ it_delegates_each :generate_caches
99
+ it_delegates_each :backup_caches
100
+ it_delegates_each :restore_caches
101
+ it_delegates_each :check_caches
102
+ it_delegates_each :clear_caches
103
+ it_delegates_each :create_directory_structure
34
104
  end
35
105
 
36
106
  end
@@ -2,10 +2,10 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe Adapters::Rack::Base do
5
+ describe Internals::Adapters::Rack::Base do
6
6
 
7
7
  before(:each) do
8
- @adapter = Adapters::Rack::Base.new
8
+ @adapter = described_class.new
9
9
  end
10
10
 
11
11
  describe 'respond_with' do
@@ -2,11 +2,11 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe Adapters::Rack::LiveParameters do
5
+ describe Internals::Adapters::Rack::LiveParameters do
6
6
 
7
7
  before(:each) do
8
8
  @live_parameters = stub :live_parameters
9
- @adapter = Adapters::Rack::LiveParameters.new @live_parameters
9
+ @adapter = described_class.new @live_parameters
10
10
  end
11
11
 
12
12
  describe 'to_app' do
@@ -2,11 +2,11 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe Adapters::Rack::Query do
5
+ describe Internals::Adapters::Rack::Query do
6
6
 
7
7
  before(:each) do
8
8
  @query = stub :query
9
- @adapter = Adapters::Rack::Query.new @query
9
+ @adapter = described_class.new @query
10
10
  end
11
11
 
12
12
  describe 'to_app' do
@@ -4,7 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  # We need to load the CLI file explicitly as the CLI is not loaded with the Loader (not needed in the server, only for script runs).
6
6
  #
7
- require File.expand_path '../../../lib/picky/cli', __FILE__
7
+ require File.expand_path '../../../../lib/picky/internals/cli', __FILE__
8
8
 
9
9
  # TODO Finish this prototype Spec, redesign.
10
10
  #
@@ -30,6 +30,9 @@ describe Picky::CLI do
30
30
  it 'returns Live for live' do
31
31
  @cli.executor_class_for(:live).should == [Picky::CLI::Live, "host:port/path (default: localhost:8080/admin)", "port (default: 4568)"]
32
32
  end
33
+ it 'returns Help for silly input' do
34
+ @cli.executor_class_for(:gagagagagagaga).should == [Picky::CLI::Help]
35
+ end
33
36
  end
34
37
  end
35
38
 
@@ -42,7 +42,7 @@ describe 'Configuration::Index' do
42
42
  @config.identifier.should equal(@config.identifier)
43
43
  end
44
44
  it "returns the right thing" do
45
- @config.identifier.should == 'some_index some_category'
45
+ @config.identifier.should == 'some_index:some_category'
46
46
  end
47
47
  end
48
48
  describe "index_root" do
File without changes
@@ -2,10 +2,10 @@
2
2
  #
3
3
  require 'spec_helper'
4
4
 
5
- describe FrontendAdapters::Rack do
5
+ describe Internals::FrontendAdapters::Rack do
6
6
 
7
7
  before(:each) do
8
- @rack_adapter = FrontendAdapters::Rack.new
8
+ @rack_adapter = described_class.new
9
9
  @rack_adapter.stub! :exclaim
10
10
  end
11
11
 
@@ -102,7 +102,7 @@ describe FrontendAdapters::Rack do
102
102
  env = rack_defaults_for '/searches/some_route?query=some_query'
103
103
 
104
104
  full = stub :full
105
- full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
105
+ full.should_receive(:search_with_text).once.with(anything, 0).and_return(Internals::Results::Full.new)
106
106
  Query::Full.stub! :new => full
107
107
 
108
108
  @rack_adapter.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index)
@@ -114,7 +114,7 @@ describe FrontendAdapters::Rack do
114
114
  env = rack_defaults_for '/searches/some_route?query=some_query&type=some_type'
115
115
 
116
116
  full = stub :full
117
- full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
117
+ full.should_receive(:search_with_text).once.with(anything, 0).and_return(Internals::Results::Full.new)
118
118
  Query::Full.stub! :new => full
119
119
 
120
120
  @rack_adapter.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index), :query => { :type => :some_type }
@@ -175,7 +175,7 @@ describe FrontendAdapters::Rack do
175
175
  @rack_adapter.route %r{regexp1} => :query1, %r{regexp2} => :query2, :some => :option
176
176
  end
177
177
  it 'does not accept nil queries' do
178
- lambda { @rack_adapter.route %r{some/regexp} => nil }.should raise_error(FrontendAdapters::Rack::RouteTargetNilError, /Routing for \/some\\\/regexp\/ was defined with a nil target object, i.e. \/some\\\/regexp\/ => nil./)
178
+ lambda { @rack_adapter.route %r{some/regexp} => nil }.should raise_error(Internals::FrontendAdapters::Rack::RouteTargetNilError, /Routing for \/some\\\/regexp\/ was defined with a nil target object, i.e. \/some\\\/regexp\/ => nil./)
179
179
  end
180
180
  end
181
181
 
@@ -189,7 +189,7 @@ describe FrontendAdapters::Rack do
189
189
 
190
190
  describe 'route_one' do
191
191
  before(:each) do
192
- Adapters::Rack.stub! :app_for => :some_query_app
192
+ Internals::Adapters::Rack.stub! :app_for => :some_query_app
193
193
  end
194
194
  it 'should add the right route' do
195
195
  @routes.should_receive(:add_route).once.with :some_query_app, { :request_method => "GET", :path_info => /some_url/ }
@@ -210,7 +210,7 @@ describe FrontendAdapters::Rack do
210
210
 
211
211
  describe 'default' do
212
212
  it 'should call answer' do
213
- @rack_adapter.should_receive(:answer).once.with nil, FrontendAdapters::Rack::STATUSES[200]
213
+ @rack_adapter.should_receive(:answer).once.with nil, Internals::FrontendAdapters::Rack::STATUSES[200]
214
214
 
215
215
  @rack_adapter.default 200
216
216
  end
@@ -218,12 +218,12 @@ describe FrontendAdapters::Rack do
218
218
 
219
219
  describe 'root' do
220
220
  it 'should call answer' do
221
- @rack_adapter.should_receive(:answer).once.with %r{^/$}, FrontendAdapters::Rack::STATUSES[200]
221
+ @rack_adapter.should_receive(:answer).once.with %r{^/$}, Internals::FrontendAdapters::Rack::STATUSES[200]
222
222
 
223
223
  @rack_adapter.root 200
224
224
  end
225
225
  it 'should call answer' do
226
- @rack_adapter.should_receive(:answer).once.with %r{^/$}, FrontendAdapters::Rack::STATUSES[404]
226
+ @rack_adapter.should_receive(:answer).once.with %r{^/$}, Internals::FrontendAdapters::Rack::STATUSES[404]
227
227
 
228
228
  @rack_adapter.root 404
229
229
  end
@@ -252,14 +252,14 @@ describe FrontendAdapters::Rack do
252
252
  context 'without app' do
253
253
  context 'with url' do
254
254
  it 'should use the 404 with default_options from the url' do
255
- @routes.should_receive(:add_route).once.with FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET", :path_info => /some_url/ }
255
+ @routes.should_receive(:add_route).once.with Internals::FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET", :path_info => /some_url/ }
256
256
 
257
257
  @rack_adapter.answer 'some_url'
258
258
  end
259
259
  end
260
260
  context 'without url' do
261
261
  it 'should use the 404 with default_options' do
262
- @routes.should_receive(:add_route).once.with FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET" }
262
+ @routes.should_receive(:add_route).once.with Internals::FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET" }
263
263
 
264
264
  @rack_adapter.answer
265
265
  end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Cacher::Strategy do
3
+ describe Internals::Generators::Strategy do
4
4
 
5
5
  describe "saved?" do
6
6
  it "returns the right answer" do
7
- Cacher::Strategy.new.saved?.should == true
7
+ described_class.new.saved?.should == true
8
8
  end
9
9
  end
10
10
 
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Internals::Generators::Partial::Default do
4
+
5
+ let(:default) { Internals::Generators::Partial::Default }
6
+
7
+ it "should be a subtoken" do
8
+ default.should be_kind_of(Internals::Generators::Partial::Substring)
9
+ end
10
+ it "should be a the right down to" do
11
+ default.from.should == -3
12
+ end
13
+ it "should be a the right starting at" do
14
+ default.to.should == -1
15
+ end
16
+
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Internals::Generators::Partial::None do
4
+
5
+ it "has the right superclass" do
6
+ described_class.should < Internals::Generators::Partial::Strategy
7
+ end
8
+ it "returns an empty index" do
9
+ described_class.new.generate_from(:unimportant).should == {}
10
+ end
11
+ describe 'use_exact_for_partial?' do
12
+ it 'returns true' do
13
+ described_class.new.use_exact_for_partial?.should == true
14
+ end
15
+ end
16
+
17
+ end