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
data/lib/picky/indexes.rb CHANGED
@@ -1,75 +1,82 @@
1
- # Holds all indexes and provides operations
2
- # for extracting and working on them.
3
- #
4
- # Delegates a number of operations to the
5
- # indexes.
6
- #
7
- class Indexes
1
+ module Picky
8
2
 
9
- attr_reader :indexes,
10
- :index_mapping
3
+ # Holds all indexes and provides operations
4
+ # for extracting and working on them.
5
+ #
6
+ # Delegates a number of operations to the
7
+ # indexes.
8
+ #
9
+ class Indexes
11
10
 
12
- delegate :size,
13
- :each,
14
- :to => :indexes
11
+ attr_reader :indexes,
12
+ :index_mapping
15
13
 
16
- each_delegate :reindex,
17
- :each_category,
18
- :to => :indexes
14
+ delegate :size,
15
+ :each,
16
+ :to => :indexes
19
17
 
20
- def initialize
21
- clear_indexes
22
- end
18
+ each_delegate :reindex,
19
+ :each_category,
20
+ :to => :indexes
23
21
 
24
- # Return the Indexes instance.
25
- #
26
- def self.instance
27
- @instance ||= new
28
- end
22
+ def initialize
23
+ clear_indexes
24
+ end
29
25
 
30
- instance_delegate :clear,
31
- :register,
32
- :reindex,
33
- :[],
34
- :to_s,
35
- :size,
36
- :each,
37
- :each_category
26
+ # Return the Indexes instance.
27
+ #
28
+ def self.instance
29
+ @instance ||= new
30
+ end
31
+ def self.identifier
32
+ name
33
+ end
38
34
 
39
- # Clears the indexes and the mapping.
40
- #
41
- def clear_indexes
42
- @indexes = []
43
- @index_mapping = {}
44
- end
35
+ instance_delegate :clear,
36
+ :register,
37
+ :reindex,
38
+ :[],
39
+ :to_s,
40
+ :size,
41
+ :each,
42
+ :each_category
45
43
 
46
- # Registers an index with the indexes.
47
- #
48
- def register index
49
- self.indexes << index
50
- self.index_mapping[index.name] = index
51
- end
52
- def self.register index
53
- self.instance.register index
54
- end
44
+ # Clears the indexes and the mapping.
45
+ #
46
+ def clear_indexes
47
+ @indexes = []
48
+ @index_mapping = {}
49
+ end
55
50
 
56
- # Extracts an index, given its identifier.
57
- #
58
- def [] identifier
59
- index_name = identifier.to_sym
60
- index_mapping[index_name] || raise_not_found(index_name)
61
- end
51
+ # Registers an index with the indexes.
52
+ #
53
+ def register index
54
+ self.indexes << index
55
+ self.index_mapping[index.name] = index
56
+ end
57
+ def self.register index
58
+ self.instance.register index
59
+ end
62
60
 
63
- # Raises a not found for the index.
64
- #
65
- def raise_not_found index_name
66
- raise %Q{Index "#{index_name}" not found. Possible indexes: "#{indexes.map(&:name).join('", "')}".}
67
- end
61
+ # Extracts an index, given its identifier.
62
+ #
63
+ def [] identifier
64
+ index_name = identifier.to_sym
65
+ index_mapping[index_name] || raise_not_found(index_name)
66
+ end
67
+
68
+ # Raises a not found for the index.
69
+ #
70
+ def raise_not_found index_name
71
+ raise %Q{Index "#{index_name}" not found. Possible indexes: "#{indexes.map(&:name).join('", "')}".}
72
+ end
73
+
74
+ #
75
+ #
76
+ def to_s
77
+ indexes.indented_to_s
78
+ end
68
79
 
69
- #
70
- #
71
- def to_s
72
- indexes.indented_to_s
73
80
  end
74
81
 
75
82
  end
@@ -1,17 +1,21 @@
1
- # Registers the indexes held at runtime, for queries.
2
- #
3
- class Indexes
1
+ module Picky
4
2
 
5
- instance_delegate :load_from_cache,
6
- :reload,
7
- :analyze
3
+ # Registers the indexes held at runtime, for queries.
4
+ #
5
+ class Indexes
8
6
 
9
- each_delegate :load_from_cache,
10
- :to => :indexes
7
+ instance_delegate :load_from_cache,
8
+ :reload,
9
+ :analyze
11
10
 
12
- # Reloads all indexes, one after another,
13
- # in the order they were added.
14
- #
15
- alias reload load_from_cache
11
+ each_delegate :load_from_cache,
12
+ :to => :indexes
13
+
14
+ # Reloads all indexes, one after another,
15
+ # in the order they were added.
16
+ #
17
+ alias reload load_from_cache
18
+
19
+ end
16
20
 
17
21
  end
@@ -1,46 +1,50 @@
1
- # Indexes indexing.
2
- #
3
- class Indexes
4
-
5
- instance_delegate :index,
6
- :check,
7
- :clear,
8
- :backup,
9
- :restore,
10
- :index_for_tests,
11
- :tokenizer
12
-
13
- each_delegate :check,
14
- :clear,
15
- :backup,
16
- :restore,
17
- :to => :indexes
18
-
19
- # Runs the indexers in parallel (prepare + cache).
1
+ module Picky
2
+
3
+ # Indexes indexing.
20
4
  #
21
- def index randomly = true
22
- # Run in parallel.
5
+ class Indexes
6
+
7
+ instance_delegate :index,
8
+ :check,
9
+ :clear,
10
+ :backup,
11
+ :restore,
12
+ :index_for_tests,
13
+ :tokenizer
14
+
15
+ each_delegate :check,
16
+ :clear,
17
+ :backup,
18
+ :restore,
19
+ :to => :indexes
20
+
21
+ # Runs the indexers in parallel (prepare + cache).
23
22
  #
24
- timed_exclaim "Indexing using #{Cores.max_processors} processors, in #{randomly ? 'random' : 'given'} order."
23
+ def index randomly = true
24
+ # Run in parallel.
25
+ #
26
+ timed_exclaim "Indexing using #{Cores.max_processors} processors, in #{randomly ? 'random' : 'given'} order."
25
27
 
26
- # Run indexing/caching forked.
27
- #
28
- Cores.forked self.indexes, { randomly: randomly }, &:index
28
+ # Run indexing/caching forked.
29
+ #
30
+ Cores.forked self.indexes, { randomly: randomly }, &:index
29
31
 
30
- timed_exclaim "Indexing finished."
31
- end
32
+ timed_exclaim "Indexing finished."
33
+ end
32
34
 
33
- # For integration testing – indexes for the tests
34
- # without forking and shouting ;)
35
- #
36
- def index_for_tests
37
- indexes.each(&:index)
38
- end
35
+ # For integration testing – indexes for the tests
36
+ # without forking and shouting ;)
37
+ #
38
+ def index_for_tests
39
+ indexes.each(&:index)
40
+ end
41
+
42
+ #
43
+ #
44
+ def tokenizer
45
+ Tokenizers::Index.default
46
+ end
39
47
 
40
- # TODO Doc. Spec. Split into Query/Index.
41
- #
42
- def tokenizer
43
- Tokenizers::Index.default
44
48
  end
45
49
 
46
50
  end