picky 2.7.0 → 3.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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,80 +1,84 @@
1
1
  # encoding: utf-8
2
2
  #
3
- module Indexed # :nodoc:all
3
+ module Picky
4
4
 
5
- #
6
- #
7
- module Bundle
5
+ module Indexed # :nodoc:all
8
6
 
9
- # This is the _actual_ index (based on memory).
10
7
  #
11
- # Handles exact/partial index, weights index, and similarity index.
12
8
  #
13
- # Delegates file handling and checking to an *Indexed*::*Files* object.
14
- #
15
- class Memory < Base
9
+ module Bundle
16
10
 
17
- delegate :[], :to => :configuration
11
+ # This is the _actual_ index (based on memory).
12
+ #
13
+ # Handles exact/partial index, weights index, and similarity index.
14
+ #
15
+ # Delegates file handling and checking to an *Indexed*::*Files* object.
16
+ #
17
+ class Memory < Base
18
18
 
19
- def initialize name, configuration, *args
20
- super name, configuration, *args
19
+ delegate :[], :to => :configuration
21
20
 
22
- @configuration = {} # A hash with config options.
21
+ def initialize name, category, *args
22
+ super name, category, *args
23
23
 
24
- @backend = Backend::Files.new name, configuration
25
- end
24
+ @configuration = {} # A hash with config options.
26
25
 
27
- # Get the ids for the given symbol.
28
- #
29
- def ids sym
30
- @inverted[sym] || []
31
- end
32
- # Get a weight for the given symbol.
33
- #
34
- def weight sym
35
- @weights[sym]
36
- end
26
+ @backend = Backend::Files.new self
27
+ end
37
28
 
38
- # Loads the core index.
39
- #
40
- def load_inverted
41
- self.inverted = @backend.load_inverted
42
- end
43
- # Loads the weights index.
44
- #
45
- def load_weights
46
- self.weights = @backend.load_weights
47
- end
48
- # Loads the similarity index.
49
- #
50
- def load_similarity
51
- self.similarity = @backend.load_similarity
52
- end
53
- # Loads the configuration.
54
- #
55
- def load_configuration
56
- self.configuration = @backend.load_configuration
57
- end
29
+ # Get the ids for the given symbol.
30
+ #
31
+ def ids sym
32
+ @inverted[sym] || []
33
+ end
34
+ # Get a weight for the given symbol.
35
+ #
36
+ def weight sym
37
+ @weights[sym]
38
+ end
39
+
40
+ # Loads the core index.
41
+ #
42
+ def load_inverted
43
+ self.inverted = @backend.load_inverted
44
+ end
45
+ # Loads the weights index.
46
+ #
47
+ def load_weights
48
+ self.weights = @backend.load_weights
49
+ end
50
+ # Loads the similarity index.
51
+ #
52
+ def load_similarity
53
+ self.similarity = @backend.load_similarity
54
+ end
55
+ # Loads the configuration.
56
+ #
57
+ def load_configuration
58
+ self.configuration = @backend.load_configuration
59
+ end
60
+
61
+ # Loads the core index.
62
+ #
63
+ def clear_inverted
64
+ self.inverted = {}
65
+ end
66
+ # Loads the weights index.
67
+ #
68
+ def clear_weights
69
+ self.weights = {}
70
+ end
71
+ # Loads the similarity index.
72
+ #
73
+ def clear_similarity
74
+ self.similarity = {}
75
+ end
76
+ # Loads the configuration.
77
+ #
78
+ def clear_configuration
79
+ self.configuration = {}
80
+ end
58
81
 
59
- # Loads the core index.
60
- #
61
- def clear_inverted
62
- self.inverted = {}
63
- end
64
- # Loads the weights index.
65
- #
66
- def clear_weights
67
- self.weights = {}
68
- end
69
- # Loads the similarity index.
70
- #
71
- def clear_similarity
72
- self.similarity = {}
73
- end
74
- # Loads the configuration.
75
- #
76
- def clear_configuration
77
- self.configuration = {}
78
82
  end
79
83
 
80
84
  end
@@ -1,83 +1,87 @@
1
1
  # encoding: utf-8
2
2
  #
3
- module Indexed # :nodoc:all
3
+ module Picky
4
4
 
5
- #
6
- #
7
- module Bundle
5
+ module Indexed # :nodoc:all
8
6
 
9
- # This is the _actual_ index (based on Redis).
10
7
  #
11
- # Handles exact/partial index, weights index, and similarity index.
12
8
  #
13
- class Redis < Base
9
+ module Bundle
14
10
 
15
- def initialize name, category, *args
16
- super name, category, *args
17
-
18
- @backend = Backend::Redis.new name, category
19
- end
20
-
21
- # Get the ids for the given symbol.
22
- #
23
- # Ids are an array of string values in Redis.
24
- #
25
- def ids sym
26
- @backend.ids sym
27
- end
28
- # Get a weight for the given symbol.
29
- #
30
- # A weight is a string value in Redis. TODO Convert?
11
+ # This is the _actual_ index (based on Redis).
31
12
  #
32
- def weight sym
33
- @backend.weight sym
34
- end
35
- # Settings of this bundle can be accessed via [].
13
+ # Handles exact/partial index, weights index, and similarity index.
36
14
  #
37
- def [] sym
38
- @backend.setting sym
39
- end
15
+ class Redis < Base
40
16
 
41
- # Loads the inverted index.
42
- #
43
- def load_inverted
44
- # No loading needed.
45
- end
46
- # Loads the weights index.
47
- #
48
- def load_weights
49
- # No loading needed.
50
- end
51
- # Loads the similarity index.
52
- #
53
- def load_similarity
54
- # No loading needed.
55
- end
56
- # Loads the configuration.
57
- #
58
- def load_configuration
59
- # No loading needed.
60
- end
17
+ def initialize name, category, *args
18
+ super name, category, *args
19
+
20
+ @backend = Backend::Redis.new self
21
+ end
22
+
23
+ # Get the ids for the given symbol.
24
+ #
25
+ # Ids are an array of string values in Redis.
26
+ #
27
+ def ids sym
28
+ @backend.ids sym
29
+ end
30
+ # Get a weight for the given symbol.
31
+ #
32
+ # A weight is a string value in Redis.
33
+ #
34
+ def weight sym
35
+ @backend.weight sym
36
+ end
37
+ # Settings of this bundle can be accessed via [].
38
+ #
39
+ def [] sym
40
+ @backend.setting sym
41
+ end
42
+
43
+ # Loads the inverted index.
44
+ #
45
+ def load_inverted
46
+ # No loading needed.
47
+ end
48
+ # Loads the weights index.
49
+ #
50
+ def load_weights
51
+ # No loading needed.
52
+ end
53
+ # Loads the similarity index.
54
+ #
55
+ def load_similarity
56
+ # No loading needed.
57
+ end
58
+ # Loads the configuration.
59
+ #
60
+ def load_configuration
61
+ # No loading needed.
62
+ end
63
+
64
+ # Loads the inverted index.
65
+ #
66
+ def clear_inverted
67
+ # No clearing possible, currently.
68
+ end
69
+ # Loads the weights index.
70
+ #
71
+ def clear_weights
72
+ # No clearing possible, currently.
73
+ end
74
+ # Loads the similarity index.
75
+ #
76
+ def clear_similarity
77
+ # No clearing possible, currently.
78
+ end
79
+ # Loads the configuration.
80
+ #
81
+ def clear_configuration
82
+ # No clearing possible, currently.
83
+ end
61
84
 
62
- # Loads the inverted index.
63
- #
64
- def clear_inverted
65
- # No clearing possible, currently.
66
- end
67
- # Loads the weights index.
68
- #
69
- def clear_weights
70
- # No clearing possible, currently.
71
- end
72
- # Loads the similarity index.
73
- #
74
- def clear_similarity
75
- # No clearing possible, currently.
76
- end
77
- # Loads the configuration.
78
- #
79
- def clear_configuration
80
- # No clearing possible, currently.
81
85
  end
82
86
 
83
87
  end
@@ -1,35 +1,39 @@
1
- module Indexed
2
- module Wrappers
1
+ module Picky
3
2
 
4
- module Bundle
3
+ module Indexed
4
+ module Wrappers
5
5
 
6
- # A calculation rewrites the symbol into a float.
7
- #
8
- # TODO I really need to allow integers as keys. The code below is just not up to the needed quality.
9
- #
10
- class Calculation < Wrapper
6
+ module Bundle
11
7
 
8
+ # A calculation rewrites the symbol into a float.
12
9
  #
10
+ # TODO I really need to allow integers as keys. The code below is just not up to the needed quality.
13
11
  #
14
- def recalculate float
15
- float
16
- end
12
+ class Calculation < Wrapper
13
+
14
+ #
15
+ #
16
+ def recalculate float
17
+ float
18
+ end
19
+
20
+ #
21
+ #
22
+ def ids sym
23
+ @bundle.ids recalculate(sym.to_s.to_f).to_s.to_sym
24
+ end
25
+
26
+ #
27
+ #
28
+ def weight sym
29
+ @bundle.weight recalculate(sym.to_s.to_f).to_s.to_sym
30
+ end
17
31
 
18
- #
19
- #
20
- def ids sym
21
- @bundle.ids recalculate(sym.to_s.to_f).to_s.to_sym
22
- end
23
-
24
- #
25
- #
26
- def weight sym
27
- @bundle.weight recalculate(sym.to_s.to_f).to_s.to_sym
28
32
  end
29
33
 
30
34
  end
31
35
 
32
36
  end
33
-
34
37
  end
38
+
35
39
  end
@@ -1,42 +1,46 @@
1
- module Indexed
2
- module Wrappers
1
+ module Picky
3
2
 
4
- module Bundle
3
+ module Indexed
4
+ module Wrappers
5
5
 
6
- # A location calculation recalculates a location to the Picky internal location.
7
- #
8
- class Location < Calculation
6
+ module Bundle
9
7
 
10
- def initialize bundle, options = {}
11
- super bundle
8
+ # A location calculation recalculates a location to the Picky internal location.
9
+ #
10
+ class Location < Calculation
12
11
 
13
- precision = options[:precision] || 1
14
- user_grid = options[:grid] || raise("Gridsize needs to be given for location #{bundle.identifier}.")
12
+ def initialize bundle, options = {}
13
+ super bundle
15
14
 
16
- @calculation = Calculations::Location.new user_grid, precision
17
- end
15
+ precision = options[:precision] || 1
16
+ user_grid = options[:grid] || raise("Gridsize needs to be given for location #{bundle.identifier}.")
18
17
 
19
- #
20
- #
21
- def recalculate float
22
- @calculation.recalculate float
23
- end
18
+ @calculation = Calculations::Location.new user_grid, precision
19
+ end
24
20
 
25
- #
26
- #
27
- def load
28
- # Load first the bundle, then extract the config.
29
21
  #
30
- bundle.load
31
- # TODO Move the to_f to the backend.
32
22
  #
33
- minimum = bundle[:location_minimum] && bundle[:location_minimum].to_f || raise("Configuration :location_minimum for #{bundle.identifier} missing. Did you run rake index already?")
34
- @calculation.minimum = minimum
23
+ def recalculate float
24
+ @calculation.recalculate float
25
+ end
26
+
27
+ #
28
+ #
29
+ def load
30
+ # Load first the bundle, then extract the config.
31
+ #
32
+ bundle.load
33
+ # TODO Move the to_f to the backend.
34
+ #
35
+ minimum = bundle[:location_minimum] && bundle[:location_minimum].to_f || raise("Configuration :location_minimum for #{bundle.identifier} missing. Did you run rake index already?")
36
+ @calculation.minimum = minimum
37
+ end
38
+
35
39
  end
36
40
 
37
41
  end
38
42
 
39
43
  end
40
-
41
44
  end
45
+
42
46
  end
@@ -1,43 +1,47 @@
1
- module Indexed
2
- module Wrappers
1
+ module Picky
3
2
 
4
- # Per Bundle wrappers.
5
- #
6
- module Bundle
3
+ module Indexed
4
+ module Wrappers
7
5
 
8
- # Base wrapper. Just delegates all methods to the bundle.
6
+ # Per Bundle wrappers.
9
7
  #
10
- class Wrapper
8
+ module Bundle
9
+
10
+ # Base wrapper. Just delegates all methods to the bundle.
11
+ #
12
+ class Wrapper
13
+
14
+ attr_reader :bundle
15
+
16
+ def initialize bundle
17
+ @bundle = bundle
18
+ end
19
+
20
+ delegate :load,
21
+ :load_inverted,
22
+ :load_weights,
23
+ :load_similarity,
24
+ :load_configuration,
25
+ :clear_inverted,
26
+ :clear_weights,
27
+ :clear_similarity,
28
+ :clear_configuration,
29
+ :ids,
30
+ :weight,
31
+ :identifier,
32
+ :analyze,
33
+ :size,
34
+ :inverted,
35
+ :weights,
36
+ :similarity,
37
+ :configuration,
38
+ :to => :@bundle
11
39
 
12
- attr_reader :bundle
13
-
14
- def initialize bundle
15
- @bundle = bundle
16
40
  end
17
41
 
18
- delegate :load,
19
- :load_inverted,
20
- :load_weights,
21
- :load_similarity,
22
- :load_configuration,
23
- :clear_inverted,
24
- :clear_weights,
25
- :clear_similarity,
26
- :clear_configuration,
27
- :ids,
28
- :weight,
29
- :identifier,
30
- :analyze,
31
- :size,
32
- :inverted,
33
- :weights,
34
- :similarity,
35
- :configuration,
36
- :to => :@bundle
37
-
38
42
  end
39
43
 
40
44
  end
41
-
42
45
  end
46
+
43
47
  end
@@ -1,25 +1,29 @@
1
- module Indexed
2
- module Wrappers
3
- module Category
1
+ module Picky
4
2
 
5
- module Location
3
+ module Indexed
4
+ module Wrappers
5
+ module Category
6
6
 
7
- def self.install_on category, grid, precision = 1
8
- wrapped_exact = Indexed::Wrappers::Bundle::Location.new category.indexed_exact, grid: grid, precision: precision
7
+ module Location
9
8
 
10
- category.class_eval do
11
- define_method :indexed_exact do
12
- wrapped_exact
13
- end
14
- define_method :indexed_partial do
15
- wrapped_exact
9
+ def self.install_on category, grid, precision = 1
10
+ wrapped_exact = Indexed::Wrappers::Bundle::Location.new category.indexed_exact, grid: grid, precision: precision
11
+
12
+ category.class_eval do
13
+ define_method :indexed_exact do
14
+ wrapped_exact
15
+ end
16
+ define_method :indexed_partial do
17
+ wrapped_exact
18
+ end
16
19
  end
20
+
17
21
  end
18
22
 
19
23
  end
20
24
 
21
25
  end
22
-
23
26
  end
24
27
  end
28
+
25
29
  end
@@ -1,51 +1,55 @@
1
1
  # encoding: utf-8
2
2
  #
3
- module Indexed
4
-
5
- module Wrappers
6
-
7
- # This index combines an exact and partial index.
8
- # It serves to order the results such that exact hits are found first.
9
- #
10
- class ExactFirst < Indexed::Bundle::Base
11
-
12
- delegate :similar,
13
- :identifier,
14
- :name,
15
- :to => :@exact
16
- delegate :index,
17
- :category,
18
- :weight,
19
- :generate_partial_from,
20
- :generate_caches_from_memory,
21
- :generate_derived,
22
- :dump,
23
- :load,
24
- :to => :@partial
25
-
26
- def initialize category
27
- @exact = category.indexed_exact
28
- @partial = category.indexed_partial
29
- end
3
+ module Picky
4
+
5
+ module Indexed
6
+
7
+ module Wrappers
8
+
9
+ # This index combines an exact and partial index.
10
+ # It serves to order the results such that exact hits are found first.
11
+ #
12
+ class ExactFirst < Indexed::Bundle::Base
13
+
14
+ delegate :similar,
15
+ :identifier,
16
+ :name,
17
+ :to => :@exact
18
+ delegate :index,
19
+ :category,
20
+ :weight,
21
+ :generate_partial_from,
22
+ :generate_caches_from_memory,
23
+ :generate_derived,
24
+ :dump,
25
+ :load,
26
+ :to => :@partial
27
+
28
+ def initialize category
29
+ @exact = category.indexed_exact
30
+ @partial = category.indexed_partial
31
+ end
30
32
 
31
- def self.wrap index_or_category
32
- if index_or_category.respond_to? :categories
33
- wrap_each_of index_or_category.categories
34
- index_or_category
35
- else
36
- new index_or_category
33
+ def self.wrap index_or_category
34
+ if index_or_category.respond_to? :categories
35
+ wrap_each_of index_or_category.categories
36
+ index_or_category
37
+ else
38
+ new index_or_category
39
+ end
40
+ end
41
+ def self.wrap_each_of categories
42
+ categories.categories.collect! { |category| new(category) }
37
43
  end
38
- end
39
- def self.wrap_each_of categories
40
- categories.categories.collect! { |category| new(category) }
41
- end
42
44
 
43
- def ids text
44
- @exact.ids(text) + @partial.ids(text)
45
- end
45
+ def ids text
46
+ @exact.ids(text) + @partial.ids(text)
47
+ end
48
+
49
+ def weight text
50
+ [@exact.weight(text) || 0, @partial.weight(text) || 0].max
51
+ end
46
52
 
47
- def weight text
48
- [@exact.weight(text) || 0, @partial.weight(text) || 0].max
49
53
  end
50
54
 
51
55
  end