thinking-sphinx 2.1.0 → 3.0.0.pre

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 (352) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +13 -0
  3. data/Appraisals +7 -0
  4. data/Gemfile +10 -0
  5. data/HISTORY +2 -267
  6. data/LICENCE +1 -1
  7. data/README.textile +194 -226
  8. data/Rakefile +24 -0
  9. data/gemfiles/.gitignore +1 -0
  10. data/gemfiles/rails_3_1.gemfile +11 -0
  11. data/gemfiles/rails_3_2.gemfile +11 -0
  12. data/lib/thinking-sphinx.rb +1 -1
  13. data/lib/thinking_sphinx.rb +34 -292
  14. data/lib/thinking_sphinx/active_record.rb +22 -383
  15. data/lib/thinking_sphinx/active_record/association.rb +9 -0
  16. data/lib/thinking_sphinx/active_record/association_proxy.rb +68 -0
  17. data/lib/thinking_sphinx/active_record/associations.rb +68 -0
  18. data/lib/thinking_sphinx/active_record/attribute.rb +20 -0
  19. data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +32 -0
  20. data/lib/thinking_sphinx/active_record/attribute/type.rb +79 -0
  21. data/lib/thinking_sphinx/active_record/attribute/values.rb +18 -0
  22. data/lib/thinking_sphinx/active_record/base.rb +36 -0
  23. data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +31 -0
  24. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +55 -0
  25. data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +59 -0
  26. data/lib/thinking_sphinx/active_record/column.rb +30 -0
  27. data/lib/thinking_sphinx/active_record/database_adapters.rb +51 -0
  28. data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +13 -0
  29. data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +23 -0
  30. data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +25 -0
  31. data/lib/thinking_sphinx/active_record/field.rb +11 -0
  32. data/lib/thinking_sphinx/active_record/index.rb +55 -0
  33. data/lib/thinking_sphinx/active_record/interpreter.rb +47 -0
  34. data/lib/thinking_sphinx/active_record/log_subscriber.rb +10 -58
  35. data/lib/thinking_sphinx/active_record/property.rb +28 -0
  36. data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +60 -0
  37. data/lib/thinking_sphinx/active_record/sql_builder.rb +159 -0
  38. data/lib/thinking_sphinx/active_record/sql_source.rb +138 -0
  39. data/lib/thinking_sphinx/active_record/sql_source/template.rb +46 -0
  40. data/lib/thinking_sphinx/batched_search.rb +26 -0
  41. data/lib/thinking_sphinx/callbacks.rb +15 -0
  42. data/lib/thinking_sphinx/configuration.rb +80 -331
  43. data/lib/thinking_sphinx/configuration/consistent_ids.rb +31 -0
  44. data/lib/thinking_sphinx/configuration/defaults.rb +5 -0
  45. data/lib/thinking_sphinx/core.rb +6 -0
  46. data/lib/thinking_sphinx/core/index.rb +68 -0
  47. data/lib/thinking_sphinx/core/interpreter.rb +19 -0
  48. data/lib/thinking_sphinx/deltas.rb +35 -26
  49. data/lib/thinking_sphinx/deltas/default_delta.rb +56 -56
  50. data/lib/thinking_sphinx/excerpter.rb +23 -21
  51. data/lib/thinking_sphinx/facet.rb +22 -127
  52. data/lib/thinking_sphinx/facet_search.rb +95 -162
  53. data/lib/thinking_sphinx/index.rb +39 -143
  54. data/lib/thinking_sphinx/index_set.rb +51 -0
  55. data/lib/thinking_sphinx/masks.rb +8 -0
  56. data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +23 -0
  57. data/lib/thinking_sphinx/masks/pagination_mask.rb +60 -0
  58. data/lib/thinking_sphinx/masks/scopes_mask.rb +35 -0
  59. data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +11 -0
  60. data/lib/thinking_sphinx/middlewares.rb +36 -0
  61. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +73 -0
  62. data/lib/thinking_sphinx/middlewares/geographer.rb +53 -0
  63. data/lib/thinking_sphinx/middlewares/glazier.rb +39 -0
  64. data/lib/thinking_sphinx/middlewares/ids_only.rb +13 -0
  65. data/lib/thinking_sphinx/middlewares/inquirer.rb +62 -0
  66. data/lib/thinking_sphinx/middlewares/middleware.rb +9 -0
  67. data/lib/thinking_sphinx/middlewares/sphinxql.rb +149 -0
  68. data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +45 -0
  69. data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +46 -0
  70. data/lib/thinking_sphinx/panes.rb +8 -0
  71. data/lib/thinking_sphinx/panes/attributes_pane.rb +9 -0
  72. data/lib/thinking_sphinx/panes/distance_pane.rb +13 -0
  73. data/lib/thinking_sphinx/panes/excerpts_pane.rb +37 -0
  74. data/lib/thinking_sphinx/panes/weight_pane.rb +9 -0
  75. data/lib/thinking_sphinx/railtie.rb +6 -40
  76. data/lib/thinking_sphinx/rake_interface.rb +47 -0
  77. data/lib/thinking_sphinx/real_time.rb +11 -0
  78. data/lib/thinking_sphinx/real_time/attribute.rb +5 -0
  79. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +48 -0
  80. data/lib/thinking_sphinx/real_time/field.rb +3 -0
  81. data/lib/thinking_sphinx/real_time/index.rb +47 -0
  82. data/lib/thinking_sphinx/real_time/index/template.rb +33 -0
  83. data/lib/thinking_sphinx/real_time/interpreter.rb +23 -0
  84. data/lib/thinking_sphinx/real_time/property.rb +16 -0
  85. data/lib/thinking_sphinx/scopes.rb +22 -0
  86. data/lib/thinking_sphinx/search.rb +90 -1028
  87. data/lib/thinking_sphinx/search/batch_inquirer.rb +27 -0
  88. data/lib/thinking_sphinx/search/context.rb +26 -0
  89. data/lib/thinking_sphinx/search/glaze.rb +32 -0
  90. data/lib/thinking_sphinx/search/merger.rb +24 -0
  91. data/lib/thinking_sphinx/search/query.rb +43 -0
  92. data/lib/thinking_sphinx/search/stale_ids_exception.rb +11 -0
  93. data/lib/thinking_sphinx/search/translator.rb +50 -0
  94. data/lib/thinking_sphinx/tasks.rb +22 -125
  95. data/lib/thinking_sphinx/test.rb +9 -19
  96. data/sketchpad.rb +58 -0
  97. data/spec/acceptance/association_scoping_spec.rb +23 -0
  98. data/spec/acceptance/attribute_access_spec.rb +39 -0
  99. data/spec/acceptance/attribute_updates_spec.rb +16 -0
  100. data/spec/acceptance/batch_searching_spec.rb +21 -0
  101. data/spec/acceptance/big_integers_spec.rb +27 -0
  102. data/spec/acceptance/excerpts_spec.rb +14 -0
  103. data/spec/acceptance/facets_spec.rb +122 -0
  104. data/spec/acceptance/geosearching_spec.rb +39 -0
  105. data/spec/acceptance/grouping_by_attributes_spec.rb +77 -0
  106. data/spec/acceptance/paginating_search_results_spec.rb +24 -0
  107. data/spec/acceptance/remove_deleted_records_spec.rb +23 -0
  108. data/spec/acceptance/search_counts_spec.rb +18 -0
  109. data/spec/acceptance/search_for_just_ids_spec.rb +19 -0
  110. data/spec/acceptance/searching_across_models_spec.rb +28 -0
  111. data/spec/acceptance/searching_on_fields_spec.rb +56 -0
  112. data/spec/acceptance/searching_with_filters_spec.rb +109 -0
  113. data/spec/acceptance/searching_with_sti_spec.rb +55 -0
  114. data/spec/acceptance/searching_within_a_model_spec.rb +52 -0
  115. data/spec/acceptance/sorting_search_results_spec.rb +41 -0
  116. data/spec/acceptance/spec_helper.rb +4 -0
  117. data/spec/acceptance/specifying_sql_spec.rb +62 -0
  118. data/spec/acceptance/sphinx_scopes_spec.rb +49 -0
  119. data/spec/acceptance/sql_deltas_spec.rb +43 -0
  120. data/spec/acceptance/support/database_cleaner.rb +11 -0
  121. data/spec/acceptance/support/sphinx_controller.rb +39 -0
  122. data/spec/acceptance/support/sphinx_helpers.rb +24 -0
  123. data/spec/acceptance/suspended_deltas_spec.rb +20 -0
  124. data/spec/internal/.gitignore +1 -0
  125. data/spec/internal/app/indices/animal_index.rb +3 -0
  126. data/spec/internal/app/indices/article_index.rb +24 -0
  127. data/spec/internal/app/indices/book_index.rb +8 -0
  128. data/spec/internal/app/indices/city_index.rb +6 -0
  129. data/spec/internal/app/indices/product_index.rb +3 -0
  130. data/spec/internal/app/indices/tee_index.rb +4 -0
  131. data/spec/internal/app/indices/user_index.rb +5 -0
  132. data/spec/internal/app/models/animal.rb +2 -0
  133. data/spec/internal/app/models/article.rb +5 -0
  134. data/spec/internal/app/models/bird.rb +2 -0
  135. data/spec/internal/app/models/book.rb +11 -0
  136. data/spec/internal/app/models/city.rb +2 -0
  137. data/spec/internal/app/models/colour.rb +3 -0
  138. data/spec/internal/app/models/flightless_bird.rb +2 -0
  139. data/spec/internal/app/models/mammal.rb +2 -0
  140. data/spec/internal/app/models/product.rb +3 -0
  141. data/spec/internal/app/models/tag.rb +4 -0
  142. data/{features/thinking_sphinx → spec/internal/app}/models/tagging.rb +1 -1
  143. data/spec/internal/app/models/tee.rb +3 -0
  144. data/spec/internal/app/models/tweet.rb +3 -0
  145. data/spec/internal/app/models/user.rb +3 -0
  146. data/spec/internal/config/database.yml +5 -0
  147. data/spec/internal/db/schema.rb +65 -0
  148. data/spec/internal/log/.gitignore +1 -0
  149. data/spec/spec_helper.rb +8 -49
  150. data/spec/support/sphinx_yaml_helpers.rb +9 -0
  151. data/spec/thinking_sphinx/active_record/association_spec.rb +12 -0
  152. data/spec/thinking_sphinx/active_record/associations_spec.rb +184 -0
  153. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +147 -0
  154. data/spec/thinking_sphinx/active_record/base_spec.rb +61 -0
  155. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +80 -0
  156. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +147 -0
  157. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +69 -0
  158. data/spec/thinking_sphinx/active_record/column_spec.rb +47 -0
  159. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +31 -0
  160. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +43 -0
  161. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +45 -0
  162. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +108 -0
  163. data/spec/thinking_sphinx/active_record/field_spec.rb +36 -0
  164. data/spec/thinking_sphinx/active_record/index_spec.rb +208 -0
  165. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +293 -0
  166. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +162 -0
  167. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +666 -0
  168. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +401 -0
  169. data/spec/thinking_sphinx/configuration_spec.rb +264 -171
  170. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +116 -0
  171. data/spec/thinking_sphinx/deltas_spec.rb +58 -0
  172. data/spec/thinking_sphinx/excerpter_spec.rb +40 -38
  173. data/spec/thinking_sphinx/facet_search_spec.rb +49 -151
  174. data/spec/thinking_sphinx/index_set_spec.rb +68 -0
  175. data/spec/thinking_sphinx/index_spec.rb +91 -155
  176. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +121 -0
  177. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +68 -0
  178. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +132 -0
  179. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +89 -0
  180. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +62 -0
  181. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +55 -0
  182. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +271 -0
  183. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +47 -0
  184. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +91 -0
  185. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +21 -0
  186. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +41 -0
  187. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
  188. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +20 -0
  189. data/spec/thinking_sphinx/rake_interface_spec.rb +147 -0
  190. data/spec/thinking_sphinx/real_time/attribute_spec.rb +62 -0
  191. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +76 -0
  192. data/spec/thinking_sphinx/real_time/field_spec.rb +54 -0
  193. data/spec/thinking_sphinx/real_time/index_spec.rb +154 -0
  194. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +147 -0
  195. data/spec/thinking_sphinx/scopes_spec.rb +38 -0
  196. data/spec/thinking_sphinx/search/glaze_spec.rb +55 -0
  197. data/spec/thinking_sphinx/search/query_spec.rb +46 -0
  198. data/spec/thinking_sphinx/search_spec.rb +65 -1357
  199. data/spec/thinking_sphinx_spec.rb +19 -182
  200. data/thinking-sphinx.gemspec +33 -0
  201. metadata +318 -431
  202. data/features/abstract_inheritance.feature +0 -10
  203. data/features/alternate_primary_key.feature +0 -27
  204. data/features/attribute_transformation.feature +0 -22
  205. data/features/attribute_updates.feature +0 -79
  206. data/features/deleting_instances.feature +0 -70
  207. data/features/direct_attributes.feature +0 -11
  208. data/features/excerpts.feature +0 -21
  209. data/features/extensible_delta_indexing.feature +0 -9
  210. data/features/facets.feature +0 -88
  211. data/features/facets_across_model.feature +0 -29
  212. data/features/field_sorting.feature +0 -18
  213. data/features/handling_edits.feature +0 -97
  214. data/features/retry_stale_indexes.feature +0 -24
  215. data/features/searching_across_models.feature +0 -20
  216. data/features/searching_by_index.feature +0 -41
  217. data/features/searching_by_model.feature +0 -175
  218. data/features/searching_with_find_arguments.feature +0 -56
  219. data/features/sphinx_detection.feature +0 -25
  220. data/features/sphinx_scopes.feature +0 -68
  221. data/features/step_definitions/alpha_steps.rb +0 -16
  222. data/features/step_definitions/beta_steps.rb +0 -7
  223. data/features/step_definitions/common_steps.rb +0 -205
  224. data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
  225. data/features/step_definitions/facet_steps.rb +0 -96
  226. data/features/step_definitions/find_arguments_steps.rb +0 -36
  227. data/features/step_definitions/gamma_steps.rb +0 -15
  228. data/features/step_definitions/scope_steps.rb +0 -19
  229. data/features/step_definitions/search_steps.rb +0 -94
  230. data/features/step_definitions/sphinx_steps.rb +0 -35
  231. data/features/sti_searching.feature +0 -19
  232. data/features/support/env.rb +0 -24
  233. data/features/support/lib/generic_delta_handler.rb +0 -8
  234. data/features/thinking_sphinx/database.example.yml +0 -3
  235. data/features/thinking_sphinx/db/.gitignore +0 -1
  236. data/features/thinking_sphinx/db/fixtures/alphas.rb +0 -8
  237. data/features/thinking_sphinx/db/fixtures/authors.rb +0 -1
  238. data/features/thinking_sphinx/db/fixtures/betas.rb +0 -11
  239. data/features/thinking_sphinx/db/fixtures/boxes.rb +0 -9
  240. data/features/thinking_sphinx/db/fixtures/categories.rb +0 -1
  241. data/features/thinking_sphinx/db/fixtures/cats.rb +0 -3
  242. data/features/thinking_sphinx/db/fixtures/comments.rb +0 -24
  243. data/features/thinking_sphinx/db/fixtures/developers.rb +0 -31
  244. data/features/thinking_sphinx/db/fixtures/dogs.rb +0 -3
  245. data/features/thinking_sphinx/db/fixtures/extensible_betas.rb +0 -10
  246. data/features/thinking_sphinx/db/fixtures/foxes.rb +0 -3
  247. data/features/thinking_sphinx/db/fixtures/gammas.rb +0 -10
  248. data/features/thinking_sphinx/db/fixtures/music.rb +0 -4
  249. data/features/thinking_sphinx/db/fixtures/people.rb +0 -1001
  250. data/features/thinking_sphinx/db/fixtures/post_keywords.txt +0 -1
  251. data/features/thinking_sphinx/db/fixtures/posts.rb +0 -10
  252. data/features/thinking_sphinx/db/fixtures/robots.rb +0 -8
  253. data/features/thinking_sphinx/db/fixtures/tags.rb +0 -27
  254. data/features/thinking_sphinx/db/migrations/create_alphas.rb +0 -8
  255. data/features/thinking_sphinx/db/migrations/create_animals.rb +0 -5
  256. data/features/thinking_sphinx/db/migrations/create_authors.rb +0 -3
  257. data/features/thinking_sphinx/db/migrations/create_authors_posts.rb +0 -6
  258. data/features/thinking_sphinx/db/migrations/create_betas.rb +0 -5
  259. data/features/thinking_sphinx/db/migrations/create_boxes.rb +0 -5
  260. data/features/thinking_sphinx/db/migrations/create_categories.rb +0 -3
  261. data/features/thinking_sphinx/db/migrations/create_comments.rb +0 -10
  262. data/features/thinking_sphinx/db/migrations/create_developers.rb +0 -7
  263. data/features/thinking_sphinx/db/migrations/create_extensible_betas.rb +0 -5
  264. data/features/thinking_sphinx/db/migrations/create_gammas.rb +0 -3
  265. data/features/thinking_sphinx/db/migrations/create_genres.rb +0 -3
  266. data/features/thinking_sphinx/db/migrations/create_music.rb +0 -6
  267. data/features/thinking_sphinx/db/migrations/create_people.rb +0 -13
  268. data/features/thinking_sphinx/db/migrations/create_posts.rb +0 -6
  269. data/features/thinking_sphinx/db/migrations/create_robots.rb +0 -4
  270. data/features/thinking_sphinx/db/migrations/create_taggings.rb +0 -5
  271. data/features/thinking_sphinx/db/migrations/create_tags.rb +0 -4
  272. data/features/thinking_sphinx/models/alpha.rb +0 -23
  273. data/features/thinking_sphinx/models/andrew.rb +0 -17
  274. data/features/thinking_sphinx/models/animal.rb +0 -5
  275. data/features/thinking_sphinx/models/author.rb +0 -3
  276. data/features/thinking_sphinx/models/beta.rb +0 -13
  277. data/features/thinking_sphinx/models/box.rb +0 -8
  278. data/features/thinking_sphinx/models/cat.rb +0 -3
  279. data/features/thinking_sphinx/models/category.rb +0 -4
  280. data/features/thinking_sphinx/models/comment.rb +0 -10
  281. data/features/thinking_sphinx/models/developer.rb +0 -21
  282. data/features/thinking_sphinx/models/dog.rb +0 -3
  283. data/features/thinking_sphinx/models/extensible_beta.rb +0 -9
  284. data/features/thinking_sphinx/models/fox.rb +0 -5
  285. data/features/thinking_sphinx/models/gamma.rb +0 -5
  286. data/features/thinking_sphinx/models/genre.rb +0 -3
  287. data/features/thinking_sphinx/models/medium.rb +0 -5
  288. data/features/thinking_sphinx/models/music.rb +0 -10
  289. data/features/thinking_sphinx/models/person.rb +0 -24
  290. data/features/thinking_sphinx/models/post.rb +0 -22
  291. data/features/thinking_sphinx/models/robot.rb +0 -12
  292. data/features/thinking_sphinx/models/tag.rb +0 -3
  293. data/lib/cucumber/thinking_sphinx/external_world.rb +0 -12
  294. data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -137
  295. data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -28
  296. data/lib/thinking_sphinx/action_controller.rb +0 -31
  297. data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -54
  298. data/lib/thinking_sphinx/active_record/collection_proxy.rb +0 -47
  299. data/lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb +0 -27
  300. data/lib/thinking_sphinx/active_record/delta.rb +0 -67
  301. data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -44
  302. data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
  303. data/lib/thinking_sphinx/active_record/scopes.rb +0 -110
  304. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -94
  305. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -62
  306. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -188
  307. data/lib/thinking_sphinx/association.rb +0 -230
  308. data/lib/thinking_sphinx/attribute.rb +0 -405
  309. data/lib/thinking_sphinx/auto_version.rb +0 -40
  310. data/lib/thinking_sphinx/bundled_search.rb +0 -40
  311. data/lib/thinking_sphinx/class_facet.rb +0 -20
  312. data/lib/thinking_sphinx/connection.rb +0 -71
  313. data/lib/thinking_sphinx/context.rb +0 -81
  314. data/lib/thinking_sphinx/core/string.rb +0 -15
  315. data/lib/thinking_sphinx/deltas/delete_job.rb +0 -16
  316. data/lib/thinking_sphinx/deltas/index_job.rb +0 -17
  317. data/lib/thinking_sphinx/deploy/capistrano.rb +0 -99
  318. data/lib/thinking_sphinx/field.rb +0 -98
  319. data/lib/thinking_sphinx/index/builder.rb +0 -315
  320. data/lib/thinking_sphinx/index/faux_column.rb +0 -118
  321. data/lib/thinking_sphinx/join.rb +0 -37
  322. data/lib/thinking_sphinx/property.rb +0 -187
  323. data/lib/thinking_sphinx/search_methods.rb +0 -439
  324. data/lib/thinking_sphinx/sinatra.rb +0 -7
  325. data/lib/thinking_sphinx/source.rb +0 -194
  326. data/lib/thinking_sphinx/source/internal_properties.rb +0 -51
  327. data/lib/thinking_sphinx/source/sql.rb +0 -174
  328. data/spec/fixtures/data.sql +0 -32
  329. data/spec/fixtures/database.yml.default +0 -3
  330. data/spec/fixtures/models.rb +0 -164
  331. data/spec/fixtures/structure.sql +0 -146
  332. data/spec/sphinx_helper.rb +0 -60
  333. data/spec/support/rails.rb +0 -25
  334. data/spec/thinking_sphinx/active_record/delta_spec.rb +0 -123
  335. data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +0 -173
  336. data/spec/thinking_sphinx/active_record/scopes_spec.rb +0 -177
  337. data/spec/thinking_sphinx/active_record_spec.rb +0 -573
  338. data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +0 -163
  339. data/spec/thinking_sphinx/association_spec.rb +0 -250
  340. data/spec/thinking_sphinx/attribute_spec.rb +0 -552
  341. data/spec/thinking_sphinx/auto_version_spec.rb +0 -103
  342. data/spec/thinking_sphinx/connection_spec.rb +0 -77
  343. data/spec/thinking_sphinx/context_spec.rb +0 -127
  344. data/spec/thinking_sphinx/core/array_spec.rb +0 -9
  345. data/spec/thinking_sphinx/core/string_spec.rb +0 -9
  346. data/spec/thinking_sphinx/facet_spec.rb +0 -359
  347. data/spec/thinking_sphinx/field_spec.rb +0 -127
  348. data/spec/thinking_sphinx/index/builder_spec.rb +0 -532
  349. data/spec/thinking_sphinx/index/faux_column_spec.rb +0 -36
  350. data/spec/thinking_sphinx/search_methods_spec.rb +0 -156
  351. data/spec/thinking_sphinx/source_spec.rb +0 -267
  352. data/spec/thinking_sphinx/test_spec.rb +0 -20
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ThinkingSphinx::Index::FauxColumn do
4
- describe "coerce class method" do
5
- before :each do
6
- @column = stub('column')
7
- ThinkingSphinx::Index::FauxColumn.stub!(:new => @column)
8
- end
9
-
10
- it "should return a single faux column if passed a string" do
11
- ThinkingSphinx::Index::FauxColumn.coerce("string").should == @column
12
- end
13
-
14
- it "should return a single faux column if passed a symbol" do
15
- ThinkingSphinx::Index::FauxColumn.coerce(:string).should == @column
16
- end
17
-
18
- it "should return an array of faux columns if passed an array of strings" do
19
- ThinkingSphinx::Index::FauxColumn.coerce(["one", "two"]).should == [
20
- @column, @column
21
- ]
22
- end
23
-
24
- it "should return an array of faux columns if passed an array of symbols" do
25
- ThinkingSphinx::Index::FauxColumn.coerce([:one, :two]).should == [
26
- @column, @column
27
- ]
28
- end
29
- end
30
-
31
- describe '#to_ary' do
32
- it "should return an array with the instance inside it" do
33
- subject.to_ary.should == [subject]
34
- end
35
- end
36
- end
@@ -1,156 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ThinkingSphinx::SearchMethods do
4
- it "should be included into models with indexes" do
5
- Alpha.included_modules.should include(ThinkingSphinx::SearchMethods)
6
- end
7
-
8
- it "should not be included into models that don't have indexes" do
9
- Gamma.included_modules.should_not include(ThinkingSphinx::SearchMethods)
10
- end
11
-
12
- describe '.search_context' do
13
- it "should return nil if not within a model" do
14
- ThinkingSphinx.search_context.should be_nil
15
- end
16
-
17
- it "should return the model if within one" do
18
- Alpha.search_context.should == Alpha
19
- end
20
- end
21
-
22
- describe '.search' do
23
- it "should return an instance of ThinkingSphinx::Search" do
24
- Alpha.search.class.should == ThinkingSphinx::Search
25
- end
26
-
27
- it "should set the classes option if not already set" do
28
- search = Alpha.search
29
- search.options[:classes].should == [Alpha]
30
- end
31
-
32
- it "shouldn't set the classes option if already defined" do
33
- search = Alpha.search :classes => [Beta]
34
- search.options[:classes].should == [Beta]
35
- end
36
-
37
- it "should default to nil for the classes options" do
38
- ThinkingSphinx.search.options[:classes].should be_nil
39
- end
40
- end
41
-
42
- describe '.search_for_ids' do
43
- it "should return an instance of ThinkingSphinx::Search" do
44
- Alpha.search.class.should == ThinkingSphinx::Search
45
- end
46
-
47
- it "should set the classes option if not already set" do
48
- search = Alpha.search_for_ids
49
- search.options[:classes].should == [Alpha]
50
- end
51
-
52
- it "shouldn't set the classes option if already defined" do
53
- search = Alpha.search_for_ids :classes => [Beta]
54
- search.options[:classes].should == [Beta]
55
- end
56
-
57
- it "should set ids_only to true" do
58
- search = Alpha.search_for_ids
59
- search.options[:ids_only].should be_true
60
- end
61
- end
62
-
63
- describe '.search_for_id' do
64
- before :each do
65
- @config = ThinkingSphinx::Configuration.instance
66
- @client = Riddle::Client.new
67
-
68
- ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
69
- @client.stub!(:query => {:matches => [], :total_found => 0})
70
- end
71
-
72
- it "should set the id range to the given id value" do
73
- ThinkingSphinx.search_for_id(101, 'alpha_core')
74
-
75
- @client.id_range.should == (101..101)
76
- end
77
-
78
- it "should not make any calls to the database" do
79
- Alpha.should_not_receive(:find)
80
-
81
- ThinkingSphinx.search_for_id(101, 'alpha_core', :classes => [Alpha])
82
- end
83
-
84
- it "should return true if there is a record" do
85
- @client.stub!(:query => {:matches => [
86
- {:attributes => {'sphinx_internal_id' => 100}}
87
- ], :total_found => 1})
88
-
89
- ThinkingSphinx.search_for_id(101, 'alpha_core').should be_true
90
- end
91
-
92
- it "should return false if there isn't a record" do
93
- ThinkingSphinx.search_for_id(101, 'alpha_core').should be_false
94
- end
95
- end
96
-
97
- describe '.count' do
98
- before :each do
99
- @config = ThinkingSphinx::Configuration.instance
100
- @client = Riddle::Client.new
101
-
102
- ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
103
- @client.stub!(:query => {:matches => [], :total_found => 42})
104
- end
105
-
106
- it "should fall through to ActiveRecord if called on a class" do
107
- @client.should_not_receive(:query)
108
-
109
- Alpha.count
110
- end
111
-
112
- it "should return the total number of results if called globally" do
113
- ThinkingSphinx.count.should == 42
114
- end
115
- end
116
-
117
- describe '.search_count' do
118
- before :each do
119
- @config = ThinkingSphinx::Configuration.instance
120
- @client = Riddle::Client.new
121
-
122
- ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
123
- @client.stub!(:query => {:matches => [], :total_found => 42})
124
- end
125
-
126
- it "should return the total number of results" do
127
- Alpha.search_count.should == 42
128
- end
129
-
130
- it "should not make any calls to the database" do
131
- Alpha.should_not_receive(:find)
132
-
133
- Alpha.search_count
134
- end
135
- end
136
-
137
- describe '.facets' do
138
- before :each do
139
- ThinkingSphinx::Search.stub!(:bundle_searches => [])
140
- end
141
-
142
- it "should return a FacetSearch instance" do
143
- Alpha.facets.should be_a(ThinkingSphinx::FacetSearch)
144
- end
145
-
146
- it "should set the classes option if not already set" do
147
- facets = Alpha.facets
148
- facets.options[:classes].should == [Alpha]
149
- end
150
-
151
- it "shouldn't set the classes option if already defined" do
152
- facets = Alpha.facets :classes => [Beta]
153
- facets.options[:classes].should == [Beta]
154
- end
155
- end
156
- end
@@ -1,267 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ThinkingSphinx::Source do
4
- before :each do
5
- @index = ThinkingSphinx::Index.new(Person)
6
- @source = ThinkingSphinx::Source.new(@index, :sql_range_step => 1000)
7
- end
8
-
9
- describe '#initialize' do
10
- it "should store the current connection details" do
11
- config = Person.connection.instance_variable_get(:@config)
12
- @source.database_configuration.should == config
13
- end
14
- end
15
-
16
- it "should generate the name from the model" do
17
- @source.name.should == "person"
18
- end
19
-
20
- it "should handle namespaced models for name generation" do
21
- index = ThinkingSphinx::Index.new(Admin::Person)
22
- source = ThinkingSphinx::Source.new(index)
23
- source.name.should == "admin_person"
24
- end
25
-
26
- describe "#to_riddle_for_core" do
27
- before :each do
28
- config = ThinkingSphinx::Configuration.instance
29
- config.source_options[:sql_ranged_throttle] = 100
30
-
31
- ThinkingSphinx::Field.new(
32
- @source, ThinkingSphinx::Index::FauxColumn.new(:first_name)
33
- )
34
- ThinkingSphinx::Field.new(
35
- @source, ThinkingSphinx::Index::FauxColumn.new(:last_name)
36
- )
37
-
38
- ThinkingSphinx::Attribute.new(
39
- @source, ThinkingSphinx::Index::FauxColumn.new(:id), :as => :internal_id
40
- )
41
- ThinkingSphinx::Attribute.new(
42
- @source, ThinkingSphinx::Index::FauxColumn.new(:birthday)
43
- )
44
- ThinkingSphinx::Attribute.new(
45
- @source, ThinkingSphinx::Index::FauxColumn.new(:tags, :id), :as => :tag_ids
46
- )
47
- ThinkingSphinx::Attribute.new(
48
- @source, ThinkingSphinx::Index::FauxColumn.new(:contacts, :id),
49
- :as => :contact_ids, :source => :query
50
- )
51
- ThinkingSphinx::Attribute.new(
52
- @source, ThinkingSphinx::Index::FauxColumn.new(:source, :id),
53
- :as => :source_id, :type => :integer
54
- )
55
-
56
- ThinkingSphinx::Join.new(
57
- @source, ThinkingSphinx::Index::FauxColumn.new(:links)
58
- )
59
-
60
- @source.conditions << "`birthday` <= NOW()"
61
- @source.groupings << "`first_name`"
62
-
63
- @index.local_options[:group_concat_max_len] = 1024
64
-
65
- @riddle = @source.to_riddle_for_core(1, 0)
66
- end
67
-
68
- it "should generate a Riddle Source object" do
69
- @riddle.should be_a_kind_of(Riddle::Configuration::SQLSource)
70
- end
71
-
72
- it "should use the index and name its own name" do
73
- @riddle.name.should == "person_core_0"
74
- end
75
-
76
- it "should use the model's database connection to determine type" do
77
- @riddle.type.should == "mysql"
78
- end
79
-
80
- it "should match the model's database settings" do
81
- config = Person.connection.instance_variable_get(:@config)
82
- @riddle.sql_db.should == config[:database]
83
- @riddle.sql_user.should == config[:username]
84
- @riddle.sql_pass.should == config[:password].to_s
85
- @riddle.sql_host.should == config[:host]
86
- @riddle.sql_port.should == config[:port]
87
- @riddle.sql_sock.should == config[:socket]
88
-
89
- @riddle.mysql_ssl_ca.should == config[:sslca]
90
- @riddle.mysql_ssl_cert.should == config[:sslcert]
91
- @riddle.mysql_ssl_key.should == config[:sslkey]
92
- end
93
-
94
- it "should use a environment user if nothing else is provided" do
95
- Person.connection.stub!(:instance_variable_get => {
96
- :user => nil,
97
- :username => nil
98
- })
99
- @source = ThinkingSphinx::Source.new(@index)
100
-
101
- riddle = @source.to_riddle_for_core(1, 0)
102
- riddle.sql_user.should == ENV['USER']
103
- end
104
-
105
- it "should assign attributes" do
106
- # 3 internal attributes plus the one requested
107
- @riddle.sql_attr_uint.length.should == 4
108
- @riddle.sql_attr_uint.last.should == :internal_id
109
-
110
- @riddle.sql_attr_timestamp.length.should == 1
111
- @riddle.sql_attr_timestamp.first.should == :birthday
112
- end
113
-
114
- it "should not include an attribute definition for polymorphic references without data" do
115
- @riddle.sql_attr_uint.select { |uint|
116
- uint == :source_id
117
- }.should be_empty
118
- end
119
-
120
- it "should set Sphinx Source options" do
121
- @riddle.sql_range_step.should == 1000
122
- @riddle.sql_ranged_throttle.should == 100
123
- end
124
-
125
- describe "#sql_query" do
126
- before :each do
127
- @query = @riddle.sql_query
128
- end
129
-
130
- it "should select data from the model table" do
131
- @query.should match(/FROM\s+`people`/)
132
- end
133
-
134
- it "should select each of the fields" do
135
- @query.should match(/`first_name`.+FROM/)
136
- @query.should match(/`last_name`.+FROM/)
137
- end
138
-
139
- it "should select each of the attributes" do
140
- @query.should match(/`id` AS `internal_id`.+FROM/)
141
- @query.should match(/`birthday`.+FROM/)
142
- @query.should match(/`tags`.`id`.+ AS `tag_ids`.+FROM/)
143
- end
144
-
145
- it "should not match the sourced MVA attribute" do
146
- @query.should_not match(/contact_ids/)
147
- end
148
-
149
- it "should include joins for required associations" do
150
- @query.should match(/LEFT OUTER JOIN `tags`/)
151
- end
152
-
153
- it "should not include joins for the sourced MVA attribute" do
154
- @query.should_not match(/LEFT OUTER JOIN `contacts`/)
155
- end
156
-
157
- it "should include explicitly requested joins" do
158
- @query.should match(/LEFT OUTER JOIN `links`/)
159
- end
160
-
161
- it "should include any defined conditions" do
162
- @query.should match(/WHERE.+`birthday` <= NOW()/)
163
- end
164
-
165
- it "should include any defined groupings" do
166
- @query.should match(/GROUP BY.+`first_name`/)
167
- end
168
-
169
- it "should include descendants" do
170
- index = ThinkingSphinx::Index.new(Child)
171
- source = ThinkingSphinx::Source.new(index, :sql_range_step => 1000)
172
- riddle = source.to_riddle_for_core(1, 0)
173
- query = riddle.sql_query
174
-
175
- query.should match(/WHERE.+`people`\.`type`.+'Child'.+ 'Teenager'\)/)
176
- query.should_not match(/WHERE.+"users"."type" = 'Employee'/)
177
- end
178
- end
179
-
180
- describe "#sql_query_range" do
181
- before :each do
182
- @query = @riddle.sql_query_range
183
- end
184
-
185
- it "should select data from the model table" do
186
- @query.should match(/FROM `people`/)
187
- end
188
-
189
- it "should select the minimum and the maximum ids" do
190
- @query.should match(/SELECT.+MIN.+MAX.+FROM/)
191
- end
192
- end
193
-
194
- describe "#sql_query_info" do
195
- before :each do
196
- @query = @riddle.sql_query_info
197
- end
198
-
199
- it "should select all fields from the model table" do
200
- @query.should match(/SELECT \* FROM `people`/)
201
- end
202
-
203
- it "should filter the primary key with the offset" do
204
- model_count = ThinkingSphinx.context.indexed_models.size
205
- @query.should match(/WHERE `id` = \(\(\$id - 1\) \/ #{model_count}\)/)
206
- end
207
- end
208
-
209
- describe "#sql_query_pre" do
210
- before :each do
211
- @queries = @riddle.sql_query_pre
212
- end
213
-
214
- it "should default to just the UTF8 statement" do
215
- @queries.detect { |query|
216
- query == "SET NAMES utf8"
217
- }.should_not be_nil
218
- end
219
-
220
- it "should set the group_concat_max_len session value for MySQL if requested" do
221
- @queries.detect { |query|
222
- query == "SET SESSION group_concat_max_len = 1024"
223
- }.should_not be_nil
224
- end
225
- end
226
- end
227
-
228
- describe "#to_riddle_for_core with range disabled" do
229
- before :each do
230
- ThinkingSphinx::Field.new(
231
- @source, ThinkingSphinx::Index::FauxColumn.new(:first_name)
232
- )
233
- end
234
-
235
- describe "set per-index" do
236
- before :each do
237
- @index.local_options[:disable_range] = true
238
- @riddle = @source.to_riddle_for_core(1, 0)
239
- end
240
-
241
- it "should not have the range in the sql_query" do
242
- @riddle.sql_query.should_not match(/`people`.`id` >= \$start/)
243
- @riddle.sql_query.should_not match(/`people`.`id` <= \$end/)
244
- end
245
-
246
- it "should not have a sql_query_range" do
247
- @riddle.sql_query_range.should be_nil
248
- end
249
- end
250
-
251
- describe "set globally" do
252
- before :each do
253
- ThinkingSphinx::Configuration.instance.index_options[:disable_range] = true
254
- @riddle = @source.to_riddle_for_core(1, 0)
255
- end
256
-
257
- it "should not have the range in the sql_query" do
258
- @riddle.sql_query.should_not match(/`people`.`id` >= \$start/)
259
- @riddle.sql_query.should_not match(/`people`.`id` <= \$end/)
260
- end
261
-
262
- it "should not have a sql_query_range" do
263
- @riddle.sql_query_range.should be_nil
264
- end
265
- end
266
- end
267
- end