thinking-sphinx 1.2.13 → 6.0.0

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 (517) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +99 -0
  3. data/.github/actions/test/action.yml +46 -0
  4. data/.github/workflows/ci.yml +75 -0
  5. data/.gitignore +18 -0
  6. data/.travis.yml +36 -0
  7. data/Appraisals +71 -0
  8. data/CHANGELOG.markdown +782 -0
  9. data/Gemfile +18 -0
  10. data/LICENCE +1 -1
  11. data/Procfile.support +2 -0
  12. data/README.textile +91 -136
  13. data/Rakefile +26 -0
  14. data/bin/console +15 -0
  15. data/bin/loadsphinx +99 -0
  16. data/bin/testmatrix +48 -0
  17. data/lib/thinking/sphinx.rb +3 -0
  18. data/lib/thinking-sphinx.rb +3 -0
  19. data/lib/thinking_sphinx/active_record/association.rb +19 -0
  20. data/lib/thinking_sphinx/active_record/association_proxy/attribute_finder.rb +44 -0
  21. data/lib/thinking_sphinx/active_record/association_proxy/attribute_matcher.rb +40 -0
  22. data/lib/thinking_sphinx/active_record/association_proxy.rb +34 -0
  23. data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +52 -0
  24. data/lib/thinking_sphinx/active_record/attribute/type.rb +106 -0
  25. data/lib/thinking_sphinx/active_record/attribute/values.rb +20 -0
  26. data/lib/thinking_sphinx/active_record/attribute.rb +22 -0
  27. data/lib/thinking_sphinx/active_record/base.rb +91 -0
  28. data/lib/thinking_sphinx/active_record/callbacks/association_delta_callbacks.rb +21 -0
  29. data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +27 -0
  30. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +66 -0
  31. data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +78 -0
  32. data/lib/thinking_sphinx/active_record/column.rb +44 -0
  33. data/lib/thinking_sphinx/active_record/column_sql_presenter.rb +54 -0
  34. data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +19 -0
  35. data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +51 -0
  36. data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +47 -0
  37. data/lib/thinking_sphinx/active_record/database_adapters.rb +59 -0
  38. data/lib/thinking_sphinx/active_record/depolymorph/association_reflection.rb +32 -0
  39. data/lib/thinking_sphinx/active_record/depolymorph/base_reflection.rb +32 -0
  40. data/lib/thinking_sphinx/active_record/depolymorph/conditions_reflection.rb +40 -0
  41. data/lib/thinking_sphinx/active_record/depolymorph/overridden_reflection.rb +50 -0
  42. data/lib/thinking_sphinx/active_record/depolymorph/scoped_reflection.rb +26 -0
  43. data/lib/thinking_sphinx/active_record/field.rb +18 -0
  44. data/lib/thinking_sphinx/active_record/filter_reflection.rb +18 -0
  45. data/lib/thinking_sphinx/active_record/index.rb +71 -0
  46. data/lib/thinking_sphinx/active_record/interpreter.rb +77 -0
  47. data/lib/thinking_sphinx/active_record/join_association.rb +17 -0
  48. data/lib/thinking_sphinx/active_record/log_subscriber.rb +37 -0
  49. data/lib/thinking_sphinx/active_record/polymorpher.rb +64 -0
  50. data/lib/thinking_sphinx/active_record/property.rb +30 -0
  51. data/lib/thinking_sphinx/active_record/property_query.rb +149 -0
  52. data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +89 -0
  53. data/lib/thinking_sphinx/active_record/simple_many_query.rb +37 -0
  54. data/lib/thinking_sphinx/active_record/source_joins.rb +68 -0
  55. data/lib/thinking_sphinx/active_record/sql_builder/clause_builder.rb +29 -0
  56. data/lib/thinking_sphinx/active_record/sql_builder/query.rb +59 -0
  57. data/lib/thinking_sphinx/active_record/sql_builder/statement.rb +147 -0
  58. data/lib/thinking_sphinx/active_record/sql_builder.rb +107 -0
  59. data/lib/thinking_sphinx/active_record/sql_source/template.rb +55 -0
  60. data/lib/thinking_sphinx/active_record/sql_source.rb +173 -0
  61. data/lib/thinking_sphinx/active_record.rb +39 -301
  62. data/lib/thinking_sphinx/attribute_types.rb +72 -0
  63. data/lib/thinking_sphinx/batched_search.rb +28 -0
  64. data/lib/thinking_sphinx/callbacks/appender.rb +63 -0
  65. data/lib/thinking_sphinx/callbacks.rb +44 -0
  66. data/lib/thinking_sphinx/capistrano/v2.rb +60 -0
  67. data/lib/thinking_sphinx/capistrano/v3.rb +104 -0
  68. data/lib/thinking_sphinx/capistrano.rb +10 -0
  69. data/lib/thinking_sphinx/commander.rb +27 -0
  70. data/lib/thinking_sphinx/commands/base.rb +53 -0
  71. data/lib/thinking_sphinx/commands/clear_real_time.rb +22 -0
  72. data/lib/thinking_sphinx/commands/clear_sql.rb +18 -0
  73. data/lib/thinking_sphinx/commands/configure.rb +15 -0
  74. data/lib/thinking_sphinx/commands/index_real_time.rb +15 -0
  75. data/lib/thinking_sphinx/commands/index_sql.rb +25 -0
  76. data/lib/thinking_sphinx/commands/merge.rb +27 -0
  77. data/lib/thinking_sphinx/commands/merge_and_update.rb +57 -0
  78. data/lib/thinking_sphinx/commands/prepare.rb +15 -0
  79. data/lib/thinking_sphinx/commands/rotate.rb +13 -0
  80. data/lib/thinking_sphinx/commands/running.rb +15 -0
  81. data/lib/thinking_sphinx/commands/start_attached.rb +22 -0
  82. data/lib/thinking_sphinx/commands/start_detached.rb +21 -0
  83. data/lib/thinking_sphinx/commands/stop.rb +24 -0
  84. data/lib/thinking_sphinx/commands.rb +20 -0
  85. data/lib/thinking_sphinx/configuration/consistent_ids.rb +35 -0
  86. data/lib/thinking_sphinx/configuration/defaults.rb +7 -0
  87. data/lib/thinking_sphinx/configuration/distributed_indices.rb +31 -0
  88. data/lib/thinking_sphinx/configuration/duplicate_names.rb +36 -0
  89. data/lib/thinking_sphinx/configuration/minimum_fields.rb +36 -0
  90. data/lib/thinking_sphinx/configuration.rb +196 -269
  91. data/lib/thinking_sphinx/connection/client.rb +74 -0
  92. data/lib/thinking_sphinx/connection/jruby.rb +58 -0
  93. data/lib/thinking_sphinx/connection/mri.rb +26 -0
  94. data/lib/thinking_sphinx/connection.rb +73 -0
  95. data/lib/thinking_sphinx/core/field.rb +11 -0
  96. data/lib/thinking_sphinx/core/index.rb +110 -0
  97. data/lib/thinking_sphinx/core/interpreter.rb +25 -0
  98. data/lib/thinking_sphinx/core/property.rb +15 -0
  99. data/lib/thinking_sphinx/core/settings.rb +11 -0
  100. data/lib/thinking_sphinx/core.rb +11 -0
  101. data/lib/thinking_sphinx/deletion.rb +70 -0
  102. data/lib/thinking_sphinx/deltas/default_delta.rb +57 -66
  103. data/lib/thinking_sphinx/deltas/delete_job.rb +27 -0
  104. data/lib/thinking_sphinx/deltas/index_job.rb +28 -0
  105. data/lib/thinking_sphinx/deltas.rb +52 -27
  106. data/lib/thinking_sphinx/distributed/index.rb +46 -0
  107. data/lib/thinking_sphinx/distributed.rb +7 -0
  108. data/lib/thinking_sphinx/errors.rb +96 -0
  109. data/lib/thinking_sphinx/excerpter.rb +36 -19
  110. data/lib/thinking_sphinx/facet.rb +29 -122
  111. data/lib/thinking_sphinx/facet_search.rb +132 -125
  112. data/lib/thinking_sphinx/float_formatter.rb +35 -0
  113. data/lib/thinking_sphinx/frameworks/plain.rb +10 -0
  114. data/lib/thinking_sphinx/frameworks/rails.rb +11 -0
  115. data/lib/thinking_sphinx/frameworks.rb +11 -0
  116. data/lib/thinking_sphinx/guard/file.rb +28 -0
  117. data/lib/thinking_sphinx/guard/files.rb +40 -0
  118. data/lib/thinking_sphinx/guard/none.rb +7 -0
  119. data/lib/thinking_sphinx/guard.rb +9 -0
  120. data/lib/thinking_sphinx/hooks/guard_presence.rb +34 -0
  121. data/lib/thinking_sphinx/index.rb +50 -92
  122. data/lib/thinking_sphinx/index_set.rb +96 -0
  123. data/lib/thinking_sphinx/indexing_strategies/all_at_once.rb +9 -0
  124. data/lib/thinking_sphinx/indexing_strategies/one_at_a_time.rb +16 -0
  125. data/lib/thinking_sphinx/interfaces/base.rb +13 -0
  126. data/lib/thinking_sphinx/interfaces/daemon.rb +27 -0
  127. data/lib/thinking_sphinx/interfaces/real_time.rb +46 -0
  128. data/lib/thinking_sphinx/interfaces/sql.rb +53 -0
  129. data/lib/thinking_sphinx/interfaces.rb +10 -0
  130. data/lib/thinking_sphinx/logger.rb +9 -0
  131. data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +30 -0
  132. data/lib/thinking_sphinx/masks/pagination_mask.rb +63 -0
  133. data/lib/thinking_sphinx/masks/scopes_mask.rb +56 -0
  134. data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +17 -0
  135. data/lib/thinking_sphinx/masks.rb +10 -0
  136. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +103 -0
  137. data/lib/thinking_sphinx/middlewares/geographer.rb +94 -0
  138. data/lib/thinking_sphinx/middlewares/glazier.rb +52 -0
  139. data/lib/thinking_sphinx/middlewares/ids_only.rb +15 -0
  140. data/lib/thinking_sphinx/middlewares/inquirer.rb +64 -0
  141. data/lib/thinking_sphinx/middlewares/middleware.rb +11 -0
  142. data/lib/thinking_sphinx/middlewares/sphinxql.rb +256 -0
  143. data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +47 -0
  144. data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +48 -0
  145. data/lib/thinking_sphinx/middlewares/valid_options.rb +25 -0
  146. data/lib/thinking_sphinx/middlewares.rb +35 -0
  147. data/lib/thinking_sphinx/panes/attributes_pane.rb +11 -0
  148. data/lib/thinking_sphinx/panes/distance_pane.rb +15 -0
  149. data/lib/thinking_sphinx/panes/excerpts_pane.rb +43 -0
  150. data/lib/thinking_sphinx/panes/weight_pane.rb +11 -0
  151. data/lib/thinking_sphinx/panes.rb +10 -0
  152. data/lib/thinking_sphinx/processor.rb +71 -0
  153. data/lib/thinking_sphinx/query.rb +11 -0
  154. data/lib/thinking_sphinx/railtie.rb +38 -0
  155. data/lib/thinking_sphinx/rake_interface.rb +34 -0
  156. data/lib/thinking_sphinx/real_time/attribute.rb +27 -0
  157. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +60 -0
  158. data/lib/thinking_sphinx/real_time/field.rb +9 -0
  159. data/lib/thinking_sphinx/real_time/index/template.rb +52 -0
  160. data/lib/thinking_sphinx/real_time/index.rb +102 -0
  161. data/lib/thinking_sphinx/real_time/interpreter.rb +54 -0
  162. data/lib/thinking_sphinx/real_time/populator.rb +46 -0
  163. data/lib/thinking_sphinx/real_time/processor.rb +36 -0
  164. data/lib/thinking_sphinx/real_time/property.rb +21 -0
  165. data/lib/thinking_sphinx/real_time/transcribe_instance.rb +38 -0
  166. data/lib/thinking_sphinx/real_time/transcriber.rb +89 -0
  167. data/lib/thinking_sphinx/real_time/translator.rb +39 -0
  168. data/lib/thinking_sphinx/real_time.rb +40 -0
  169. data/lib/thinking_sphinx/scopes.rb +34 -0
  170. data/lib/thinking_sphinx/search/batch_inquirer.rb +23 -0
  171. data/lib/thinking_sphinx/search/context.rb +31 -0
  172. data/lib/thinking_sphinx/search/glaze.rb +39 -0
  173. data/lib/thinking_sphinx/search/merger.rb +34 -0
  174. data/lib/thinking_sphinx/search/query.rb +33 -0
  175. data/lib/thinking_sphinx/search/stale_ids_exception.rb +15 -0
  176. data/lib/thinking_sphinx/search.rb +166 -704
  177. data/lib/thinking_sphinx/settings.rb +128 -0
  178. data/lib/thinking_sphinx/sinatra.rb +7 -0
  179. data/lib/thinking_sphinx/subscribers/populator_subscriber.rb +48 -0
  180. data/lib/thinking_sphinx/tasks.rb +70 -150
  181. data/lib/thinking_sphinx/test.rb +56 -0
  182. data/lib/thinking_sphinx/utf8.rb +18 -0
  183. data/lib/thinking_sphinx/wildcard.rb +42 -0
  184. data/lib/thinking_sphinx/with_output.rb +13 -0
  185. data/lib/thinking_sphinx.rb +83 -185
  186. data/spec/acceptance/association_scoping_spec.rb +65 -0
  187. data/spec/acceptance/attribute_access_spec.rb +58 -0
  188. data/spec/acceptance/attribute_updates_spec.rb +18 -0
  189. data/spec/acceptance/batch_searching_spec.rb +23 -0
  190. data/spec/acceptance/big_integers_spec.rb +61 -0
  191. data/spec/acceptance/excerpts_spec.rb +50 -0
  192. data/spec/acceptance/facets_spec.rb +141 -0
  193. data/spec/acceptance/geosearching_spec.rb +70 -0
  194. data/spec/acceptance/grouping_by_attributes_spec.rb +79 -0
  195. data/spec/acceptance/index_options_spec.rb +154 -0
  196. data/spec/acceptance/indexing_spec.rb +38 -0
  197. data/spec/acceptance/merging_spec.rb +90 -0
  198. data/spec/acceptance/paginating_search_results_spec.rb +42 -0
  199. data/spec/acceptance/real_time_updates_spec.rb +115 -0
  200. data/spec/acceptance/remove_deleted_records_spec.rb +99 -0
  201. data/spec/acceptance/search_counts_spec.rb +20 -0
  202. data/spec/acceptance/search_for_just_ids_spec.rb +21 -0
  203. data/spec/acceptance/searching_across_models_spec.rb +47 -0
  204. data/spec/acceptance/searching_across_schemas_spec.rb +40 -0
  205. data/spec/acceptance/searching_on_fields_spec.rb +59 -0
  206. data/spec/acceptance/searching_with_filters_spec.rb +159 -0
  207. data/spec/acceptance/searching_with_sti_spec.rb +76 -0
  208. data/spec/acceptance/searching_within_a_model_spec.rb +117 -0
  209. data/spec/acceptance/sorting_search_results_spec.rb +50 -0
  210. data/spec/acceptance/spec_helper.rb +6 -0
  211. data/spec/acceptance/specifying_sql_spec.rb +516 -0
  212. data/spec/acceptance/sphinx_scopes_spec.rb +87 -0
  213. data/spec/acceptance/sql_deltas_spec.rb +78 -0
  214. data/spec/acceptance/support/database_cleaner.rb +13 -0
  215. data/spec/acceptance/support/sphinx_controller.rb +62 -0
  216. data/spec/acceptance/support/sphinx_helpers.rb +45 -0
  217. data/spec/acceptance/suspended_deltas_spec.rb +56 -0
  218. data/spec/fixtures/database.yml +4 -0
  219. data/spec/internal/app/indices/admin_person_index.rb +9 -0
  220. data/spec/internal/app/indices/album_index.rb +9 -0
  221. data/spec/internal/app/indices/animal_index.rb +5 -0
  222. data/spec/internal/app/indices/article_index.rb +31 -0
  223. data/spec/internal/app/indices/bird_index.rb +6 -0
  224. data/spec/internal/app/indices/book_index.rb +11 -0
  225. data/spec/internal/app/indices/car_index.rb +7 -0
  226. data/spec/internal/app/indices/city_index.rb +9 -0
  227. data/spec/internal/app/indices/colour_index.rb +7 -0
  228. data/spec/internal/app/indices/product_index.rb +27 -0
  229. data/spec/internal/app/indices/tee_index.rb +6 -0
  230. data/spec/internal/app/indices/user_index.rb +9 -0
  231. data/spec/internal/app/models/admin/person.rb +9 -0
  232. data/spec/internal/app/models/album.rb +25 -0
  233. data/spec/internal/app/models/animal.rb +5 -0
  234. data/spec/internal/app/models/article.rb +9 -0
  235. data/spec/internal/app/models/bird.rb +5 -0
  236. data/spec/internal/app/models/book.rb +18 -0
  237. data/spec/internal/app/models/car.rb +7 -0
  238. data/spec/internal/app/models/categorisation.rb +15 -0
  239. data/spec/internal/app/models/category.rb +6 -0
  240. data/spec/internal/app/models/city.rb +7 -0
  241. data/spec/internal/app/models/colour.rb +7 -0
  242. data/spec/internal/app/models/event.rb +5 -0
  243. data/spec/internal/app/models/flightless_bird.rb +4 -0
  244. data/spec/internal/app/models/genre.rb +5 -0
  245. data/spec/internal/app/models/hardcover.rb +5 -0
  246. data/spec/internal/app/models/mammal.rb +4 -0
  247. data/spec/internal/app/models/manufacturer.rb +5 -0
  248. data/spec/internal/app/models/product.rb +8 -0
  249. data/spec/internal/app/models/tag.rb +6 -0
  250. data/{features/support → spec/internal/app}/models/tagging.rb +3 -1
  251. data/spec/internal/app/models/tee.rb +10 -0
  252. data/spec/internal/app/models/tweet.rb +5 -0
  253. data/spec/internal/app/models/user.rb +10 -0
  254. data/spec/internal/config/database.yml +17 -0
  255. data/spec/internal/db/schema.rb +115 -0
  256. data/spec/internal/tmp/.gitkeep +0 -0
  257. data/spec/spec_helper.rb +29 -0
  258. data/spec/support/json_column.rb +35 -0
  259. data/spec/support/multi_schema.rb +50 -0
  260. data/spec/support/mysql.rb +25 -0
  261. data/spec/support/sphinx_yaml_helpers.rb +16 -0
  262. data/spec/thinking_sphinx/active_record/association_spec.rb +14 -0
  263. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +165 -0
  264. data/spec/thinking_sphinx/active_record/base_spec.rb +131 -0
  265. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +128 -0
  266. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +176 -0
  267. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +91 -0
  268. data/spec/thinking_sphinx/active_record/column_spec.rb +72 -0
  269. data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +39 -0
  270. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +33 -0
  271. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +70 -0
  272. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +66 -0
  273. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +128 -0
  274. data/spec/thinking_sphinx/active_record/field_spec.rb +51 -0
  275. data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +207 -0
  276. data/spec/thinking_sphinx/active_record/index_spec.rb +220 -0
  277. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +329 -0
  278. data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +87 -0
  279. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +264 -0
  280. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +662 -0
  281. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +507 -0
  282. data/spec/thinking_sphinx/attribute_types_spec.rb +52 -0
  283. data/spec/thinking_sphinx/commands/clear_real_time_spec.rb +46 -0
  284. data/spec/thinking_sphinx/commands/clear_sql_spec.rb +52 -0
  285. data/spec/thinking_sphinx/commands/configure_spec.rb +31 -0
  286. data/spec/thinking_sphinx/commands/index_real_time_spec.rb +33 -0
  287. data/spec/thinking_sphinx/commands/index_sql_spec.rb +86 -0
  288. data/spec/thinking_sphinx/commands/merge_and_update_spec.rb +106 -0
  289. data/spec/thinking_sphinx/commands/merge_spec.rb +48 -0
  290. data/spec/thinking_sphinx/commands/prepare_spec.rb +31 -0
  291. data/spec/thinking_sphinx/commands/running_spec.rb +30 -0
  292. data/spec/thinking_sphinx/commands/start_detached_spec.rb +67 -0
  293. data/spec/thinking_sphinx/commands/stop_spec.rb +63 -0
  294. data/spec/thinking_sphinx/configuration/minimum_fields_spec.rb +60 -0
  295. data/spec/thinking_sphinx/configuration_spec.rb +582 -0
  296. data/spec/thinking_sphinx/connection/mri_spec.rb +49 -0
  297. data/spec/thinking_sphinx/connection_spec.rb +87 -0
  298. data/spec/thinking_sphinx/deletion_spec.rb +57 -0
  299. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +123 -0
  300. data/spec/thinking_sphinx/deltas_spec.rb +77 -0
  301. data/spec/thinking_sphinx/errors_spec.rb +103 -0
  302. data/spec/thinking_sphinx/excerpter_spec.rb +53 -0
  303. data/spec/thinking_sphinx/facet_search_spec.rb +133 -0
  304. data/spec/thinking_sphinx/hooks/guard_presence_spec.rb +30 -0
  305. data/spec/thinking_sphinx/index_set_spec.rb +132 -0
  306. data/spec/thinking_sphinx/index_spec.rb +140 -0
  307. data/spec/thinking_sphinx/interfaces/daemon_spec.rb +60 -0
  308. data/spec/thinking_sphinx/interfaces/real_time_spec.rb +109 -0
  309. data/spec/thinking_sphinx/interfaces/sql_spec.rb +122 -0
  310. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +123 -0
  311. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +139 -0
  312. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +180 -0
  313. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +102 -0
  314. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +65 -0
  315. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +72 -0
  316. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +401 -0
  317. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +50 -0
  318. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +113 -0
  319. data/spec/thinking_sphinx/middlewares/valid_options_spec.rb +51 -0
  320. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +23 -0
  321. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +43 -0
  322. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
  323. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +22 -0
  324. data/spec/thinking_sphinx/rake_interface_spec.rb +39 -0
  325. data/spec/thinking_sphinx/real_time/attribute_spec.rb +64 -0
  326. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +238 -0
  327. data/spec/thinking_sphinx/real_time/field_spec.rb +69 -0
  328. data/spec/thinking_sphinx/real_time/index_spec.rb +230 -0
  329. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +203 -0
  330. data/spec/thinking_sphinx/real_time/transcribe_instance_spec.rb +35 -0
  331. data/spec/thinking_sphinx/real_time/transcriber_spec.rb +109 -0
  332. data/spec/thinking_sphinx/real_time/translator_spec.rb +17 -0
  333. data/spec/thinking_sphinx/scopes_spec.rb +51 -0
  334. data/spec/thinking_sphinx/search/glaze_spec.rb +79 -0
  335. data/spec/thinking_sphinx/search/query_spec.rb +87 -0
  336. data/spec/thinking_sphinx/search_spec.rb +214 -0
  337. data/spec/thinking_sphinx/wildcard_spec.rb +53 -0
  338. data/spec/thinking_sphinx_spec.rb +44 -0
  339. data/thinking-sphinx.gemspec +42 -0
  340. metadata +656 -243
  341. data/VERSION.yml +0 -5
  342. data/features/alternate_primary_key.feature +0 -27
  343. data/features/attribute_transformation.feature +0 -22
  344. data/features/attribute_updates.feature +0 -33
  345. data/features/datetime_deltas.feature +0 -66
  346. data/features/delayed_delta_indexing.feature +0 -37
  347. data/features/deleting_instances.feature +0 -64
  348. data/features/direct_attributes.feature +0 -11
  349. data/features/excerpts.feature +0 -13
  350. data/features/extensible_delta_indexing.feature +0 -9
  351. data/features/facets.feature +0 -76
  352. data/features/facets_across_model.feature +0 -29
  353. data/features/handling_edits.feature +0 -92
  354. data/features/retry_stale_indexes.feature +0 -24
  355. data/features/searching_across_models.feature +0 -20
  356. data/features/searching_by_model.feature +0 -175
  357. data/features/searching_with_find_arguments.feature +0 -56
  358. data/features/sphinx_detection.feature +0 -25
  359. data/features/sphinx_scopes.feature +0 -35
  360. data/features/step_definitions/alpha_steps.rb +0 -3
  361. data/features/step_definitions/beta_steps.rb +0 -7
  362. data/features/step_definitions/common_steps.rb +0 -178
  363. data/features/step_definitions/datetime_delta_steps.rb +0 -15
  364. data/features/step_definitions/delayed_delta_indexing_steps.rb +0 -7
  365. data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
  366. data/features/step_definitions/facet_steps.rb +0 -92
  367. data/features/step_definitions/find_arguments_steps.rb +0 -36
  368. data/features/step_definitions/gamma_steps.rb +0 -15
  369. data/features/step_definitions/scope_steps.rb +0 -11
  370. data/features/step_definitions/search_steps.rb +0 -89
  371. data/features/step_definitions/sphinx_steps.rb +0 -31
  372. data/features/sti_searching.feature +0 -14
  373. data/features/support/database.example.yml +0 -3
  374. data/features/support/database.yml +0 -5
  375. data/features/support/db/active_record.rb +0 -40
  376. data/features/support/db/database.yml +0 -5
  377. data/features/support/db/fixtures/alphas.rb +0 -10
  378. data/features/support/db/fixtures/authors.rb +0 -1
  379. data/features/support/db/fixtures/betas.rb +0 -10
  380. data/features/support/db/fixtures/boxes.rb +0 -9
  381. data/features/support/db/fixtures/categories.rb +0 -1
  382. data/features/support/db/fixtures/cats.rb +0 -3
  383. data/features/support/db/fixtures/comments.rb +0 -24
  384. data/features/support/db/fixtures/delayed_betas.rb +0 -10
  385. data/features/support/db/fixtures/developers.rb +0 -29
  386. data/features/support/db/fixtures/dogs.rb +0 -3
  387. data/features/support/db/fixtures/extensible_betas.rb +0 -10
  388. data/features/support/db/fixtures/gammas.rb +0 -10
  389. data/features/support/db/fixtures/people.rb +0 -1001
  390. data/features/support/db/fixtures/posts.rb +0 -6
  391. data/features/support/db/fixtures/robots.rb +0 -14
  392. data/features/support/db/fixtures/tags.rb +0 -27
  393. data/features/support/db/fixtures/thetas.rb +0 -10
  394. data/features/support/db/migrations/create_alphas.rb +0 -7
  395. data/features/support/db/migrations/create_animals.rb +0 -5
  396. data/features/support/db/migrations/create_authors.rb +0 -3
  397. data/features/support/db/migrations/create_authors_posts.rb +0 -6
  398. data/features/support/db/migrations/create_betas.rb +0 -5
  399. data/features/support/db/migrations/create_boxes.rb +0 -5
  400. data/features/support/db/migrations/create_categories.rb +0 -3
  401. data/features/support/db/migrations/create_comments.rb +0 -10
  402. data/features/support/db/migrations/create_delayed_betas.rb +0 -17
  403. data/features/support/db/migrations/create_developers.rb +0 -9
  404. data/features/support/db/migrations/create_extensible_betas.rb +0 -5
  405. data/features/support/db/migrations/create_gammas.rb +0 -3
  406. data/features/support/db/migrations/create_people.rb +0 -13
  407. data/features/support/db/migrations/create_posts.rb +0 -5
  408. data/features/support/db/migrations/create_robots.rb +0 -4
  409. data/features/support/db/migrations/create_taggings.rb +0 -5
  410. data/features/support/db/migrations/create_tags.rb +0 -4
  411. data/features/support/db/migrations/create_thetas.rb +0 -5
  412. data/features/support/db/mysql.rb +0 -3
  413. data/features/support/db/postgresql.rb +0 -3
  414. data/features/support/env.rb +0 -18
  415. data/features/support/lib/generic_delta_handler.rb +0 -8
  416. data/features/support/models/alpha.rb +0 -10
  417. data/features/support/models/animal.rb +0 -5
  418. data/features/support/models/author.rb +0 -3
  419. data/features/support/models/beta.rb +0 -8
  420. data/features/support/models/box.rb +0 -8
  421. data/features/support/models/cat.rb +0 -3
  422. data/features/support/models/category.rb +0 -4
  423. data/features/support/models/comment.rb +0 -10
  424. data/features/support/models/delayed_beta.rb +0 -7
  425. data/features/support/models/developer.rb +0 -16
  426. data/features/support/models/dog.rb +0 -3
  427. data/features/support/models/extensible_beta.rb +0 -9
  428. data/features/support/models/gamma.rb +0 -5
  429. data/features/support/models/person.rb +0 -23
  430. data/features/support/models/post.rb +0 -20
  431. data/features/support/models/robot.rb +0 -12
  432. data/features/support/models/tag.rb +0 -3
  433. data/features/support/models/theta.rb +0 -7
  434. data/features/support/post_database.rb +0 -43
  435. data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -125
  436. data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -20
  437. data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -48
  438. data/lib/thinking_sphinx/active_record/delta.rb +0 -87
  439. data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -28
  440. data/lib/thinking_sphinx/active_record/scopes.rb +0 -39
  441. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -42
  442. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -54
  443. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -143
  444. data/lib/thinking_sphinx/association.rb +0 -164
  445. data/lib/thinking_sphinx/attribute.rb +0 -341
  446. data/lib/thinking_sphinx/class_facet.rb +0 -15
  447. data/lib/thinking_sphinx/core/array.rb +0 -7
  448. data/lib/thinking_sphinx/core/string.rb +0 -15
  449. data/lib/thinking_sphinx/deltas/datetime_delta.rb +0 -50
  450. data/lib/thinking_sphinx/deltas/delayed_delta/delta_job.rb +0 -24
  451. data/lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb +0 -27
  452. data/lib/thinking_sphinx/deltas/delayed_delta/job.rb +0 -26
  453. data/lib/thinking_sphinx/deltas/delayed_delta.rb +0 -30
  454. data/lib/thinking_sphinx/deploy/capistrano.rb +0 -100
  455. data/lib/thinking_sphinx/field.rb +0 -82
  456. data/lib/thinking_sphinx/index/builder.rb +0 -286
  457. data/lib/thinking_sphinx/index/faux_column.rb +0 -110
  458. data/lib/thinking_sphinx/property.rb +0 -162
  459. data/lib/thinking_sphinx/rails_additions.rb +0 -150
  460. data/lib/thinking_sphinx/search_methods.rb +0 -421
  461. data/lib/thinking_sphinx/source/internal_properties.rb +0 -46
  462. data/lib/thinking_sphinx/source/sql.rb +0 -128
  463. data/lib/thinking_sphinx/source.rb +0 -150
  464. data/rails/init.rb +0 -14
  465. data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +0 -130
  466. data/spec/lib/thinking_sphinx/active_record/has_many_association_spec.rb +0 -49
  467. data/spec/lib/thinking_sphinx/active_record/scopes_spec.rb +0 -96
  468. data/spec/lib/thinking_sphinx/active_record_spec.rb +0 -353
  469. data/spec/lib/thinking_sphinx/association_spec.rb +0 -239
  470. data/spec/lib/thinking_sphinx/attribute_spec.rb +0 -507
  471. data/spec/lib/thinking_sphinx/configuration_spec.rb +0 -268
  472. data/spec/lib/thinking_sphinx/core/array_spec.rb +0 -9
  473. data/spec/lib/thinking_sphinx/core/string_spec.rb +0 -9
  474. data/spec/lib/thinking_sphinx/deltas/job_spec.rb +0 -32
  475. data/spec/lib/thinking_sphinx/excerpter_spec.rb +0 -57
  476. data/spec/lib/thinking_sphinx/facet_search_spec.rb +0 -176
  477. data/spec/lib/thinking_sphinx/facet_spec.rb +0 -333
  478. data/spec/lib/thinking_sphinx/field_spec.rb +0 -154
  479. data/spec/lib/thinking_sphinx/index/builder_spec.rb +0 -455
  480. data/spec/lib/thinking_sphinx/index/faux_column_spec.rb +0 -30
  481. data/spec/lib/thinking_sphinx/index_spec.rb +0 -45
  482. data/spec/lib/thinking_sphinx/rails_additions_spec.rb +0 -203
  483. data/spec/lib/thinking_sphinx/search_methods_spec.rb +0 -152
  484. data/spec/lib/thinking_sphinx/search_spec.rb +0 -1101
  485. data/spec/lib/thinking_sphinx/source_spec.rb +0 -227
  486. data/spec/lib/thinking_sphinx_spec.rb +0 -162
  487. data/tasks/distribution.rb +0 -53
  488. data/tasks/rails.rake +0 -1
  489. data/tasks/testing.rb +0 -72
  490. data/vendor/after_commit/LICENSE +0 -20
  491. data/vendor/after_commit/README +0 -16
  492. data/vendor/after_commit/Rakefile +0 -22
  493. data/vendor/after_commit/init.rb +0 -8
  494. data/vendor/after_commit/lib/after_commit/active_record.rb +0 -114
  495. data/vendor/after_commit/lib/after_commit/connection_adapters.rb +0 -103
  496. data/vendor/after_commit/lib/after_commit.rb +0 -45
  497. data/vendor/after_commit/test/after_commit_test.rb +0 -53
  498. data/vendor/delayed_job/lib/delayed/job.rb +0 -251
  499. data/vendor/delayed_job/lib/delayed/message_sending.rb +0 -7
  500. data/vendor/delayed_job/lib/delayed/performable_method.rb +0 -55
  501. data/vendor/delayed_job/lib/delayed/worker.rb +0 -54
  502. data/vendor/riddle/lib/riddle/client/filter.rb +0 -53
  503. data/vendor/riddle/lib/riddle/client/message.rb +0 -66
  504. data/vendor/riddle/lib/riddle/client/response.rb +0 -84
  505. data/vendor/riddle/lib/riddle/client.rb +0 -635
  506. data/vendor/riddle/lib/riddle/configuration/distributed_index.rb +0 -48
  507. data/vendor/riddle/lib/riddle/configuration/index.rb +0 -142
  508. data/vendor/riddle/lib/riddle/configuration/indexer.rb +0 -19
  509. data/vendor/riddle/lib/riddle/configuration/remote_index.rb +0 -17
  510. data/vendor/riddle/lib/riddle/configuration/searchd.rb +0 -25
  511. data/vendor/riddle/lib/riddle/configuration/section.rb +0 -43
  512. data/vendor/riddle/lib/riddle/configuration/source.rb +0 -23
  513. data/vendor/riddle/lib/riddle/configuration/sql_source.rb +0 -34
  514. data/vendor/riddle/lib/riddle/configuration/xml_source.rb +0 -28
  515. data/vendor/riddle/lib/riddle/configuration.rb +0 -33
  516. data/vendor/riddle/lib/riddle/controller.rb +0 -53
  517. data/vendor/riddle/lib/riddle.rb +0 -30
@@ -1,128 +0,0 @@
1
- module ThinkingSphinx
2
- class Source
3
- module SQL
4
- # Generates the big SQL statement to get the data back for all the fields
5
- # and attributes, using all the relevant association joins. If you want
6
- # the version filtered for delta values, send through :delta => true in the
7
- # options. Won't do much though if the index isn't set up to support a
8
- # delta sibling.
9
- #
10
- # Examples:
11
- #
12
- # source.to_sql
13
- # source.to_sql(:delta => true)
14
- #
15
- def to_sql(options={})
16
- sql = <<-SQL
17
- SELECT #{ sql_select_clause options[:offset] }
18
- FROM #{ @model.quoted_table_name }
19
- #{ all_associations.collect { |assoc| assoc.to_sql }.join(' ') }
20
- #{ sql_where_clause(options) }
21
- GROUP BY #{ sql_group_clause }
22
- SQL
23
-
24
- sql += " ORDER BY NULL" if adapter.sphinx_identifier == "mysql"
25
- sql
26
- end
27
-
28
- # Simple helper method for the query range SQL - which is a statement that
29
- # returns minimum and maximum id values. These can be filtered by delta -
30
- # so pass in :delta => true to get the delta version of the SQL.
31
- #
32
- def to_sql_query_range(options={})
33
- return nil if @index.options[:disable_range]
34
-
35
- min_statement = adapter.convert_nulls(
36
- "MIN(#{quote_column(@model.primary_key_for_sphinx)})", 1
37
- )
38
- max_statement = adapter.convert_nulls(
39
- "MAX(#{quote_column(@model.primary_key_for_sphinx)})", 1
40
- )
41
-
42
- sql = "SELECT #{min_statement}, #{max_statement} " +
43
- "FROM #{@model.quoted_table_name} "
44
- if self.delta? && !@index.delta_object.clause(@model, options[:delta]).blank?
45
- sql << "WHERE #{@index.delta_object.clause(@model, options[:delta])}"
46
- end
47
-
48
- sql
49
- end
50
-
51
- # Simple helper method for the query info SQL - which is a statement that
52
- # returns the single row for a corresponding id.
53
- #
54
- def to_sql_query_info(offset)
55
- "SELECT * FROM #{@model.quoted_table_name} WHERE " +
56
- "#{quote_column(@model.primary_key_for_sphinx)} = (($id - #{offset}) / #{ThinkingSphinx.indexed_models.size})"
57
- end
58
-
59
- def sql_select_clause(offset)
60
- unique_id_expr = ThinkingSphinx.unique_id_expression(offset)
61
-
62
- (
63
- ["#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} #{unique_id_expr} AS #{quote_column(@model.primary_key_for_sphinx)} "] +
64
- @fields.collect { |field| field.to_select_sql } +
65
- @attributes.collect { |attribute| attribute.to_select_sql }
66
- ).compact.join(", ")
67
- end
68
-
69
- def sql_where_clause(options)
70
- logic = []
71
- logic += [
72
- "#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} >= $start",
73
- "#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)} <= $end"
74
- ] unless @index.options[:disable_range]
75
-
76
- if self.delta? && !@index.delta_object.clause(@model, options[:delta]).blank?
77
- logic << "#{@index.delta_object.clause(@model, options[:delta])}"
78
- end
79
-
80
- logic += (@conditions || [])
81
- logic.empty? ? "" : "WHERE #{logic.join(' AND ')}"
82
- end
83
-
84
- def sql_group_clause
85
- internal_groupings = []
86
- if @model.column_names.include?(@model.inheritance_column)
87
- internal_groupings << "#{@model.quoted_table_name}.#{quote_column(@model.inheritance_column)}"
88
- end
89
-
90
- (
91
- ["#{@model.quoted_table_name}.#{quote_column(@model.primary_key_for_sphinx)}"] +
92
- @fields.collect { |field| field.to_group_sql }.compact +
93
- @attributes.collect { |attribute| attribute.to_group_sql }.compact +
94
- @groupings + internal_groupings
95
- ).join(", ")
96
- end
97
-
98
- def sql_query_pre_for_core
99
- if self.delta? && !@index.delta_object.reset_query(@model).blank?
100
- [@index.delta_object.reset_query(@model)]
101
- else
102
- []
103
- end
104
- end
105
-
106
- def sql_query_pre_for_delta
107
- [""]
108
- end
109
-
110
- def quote_column(column)
111
- @model.connection.quote_column_name(column)
112
- end
113
-
114
- def crc_column
115
- if @model.table_exists? &&
116
- @model.column_names.include?(@model.inheritance_column)
117
-
118
- adapter.cast_to_unsigned(adapter.convert_nulls(
119
- adapter.crc(adapter.quote_with_table(@model.inheritance_column), true),
120
- @model.to_crc32
121
- ))
122
- else
123
- @model.to_crc32.to_s
124
- end
125
- end
126
- end
127
- end
128
- end
@@ -1,150 +0,0 @@
1
- require 'thinking_sphinx/source/internal_properties'
2
- require 'thinking_sphinx/source/sql'
3
-
4
- module ThinkingSphinx
5
- class Source
6
- include ThinkingSphinx::Source::InternalProperties
7
- include ThinkingSphinx::Source::SQL
8
-
9
- attr_accessor :model, :fields, :attributes, :conditions, :groupings,
10
- :options
11
- attr_reader :base, :index
12
-
13
- def initialize(index, options = {})
14
- @index = index
15
- @model = index.model
16
- @fields = []
17
- @attributes = []
18
- @conditions = []
19
- @groupings = []
20
- @options = options
21
- @associations = {}
22
-
23
- @base = ::ActiveRecord::Associations::ClassMethods::JoinDependency.new(
24
- @model, [], nil
25
- )
26
-
27
- unless @model.descends_from_active_record?
28
- stored_class = @model.store_full_sti_class ? @model.name : @model.name.demodulize
29
- @conditions << "#{@model.quoted_table_name}.#{quote_column(@model.inheritance_column)} = '#{stored_class}'"
30
- end
31
-
32
- add_internal_attributes_and_facets
33
- end
34
-
35
- def name
36
- @model.sphinx_name
37
- end
38
-
39
- def to_riddle_for_core(offset, index)
40
- source = Riddle::Configuration::SQLSource.new(
41
- "#{name}_core_#{index}", adapter.sphinx_identifier
42
- )
43
-
44
- set_source_database_settings source
45
- set_source_attributes source, offset
46
- set_source_sql source, offset
47
- set_source_settings source
48
-
49
- source
50
- end
51
-
52
- def to_riddle_for_delta(offset, index)
53
- source = Riddle::Configuration::SQLSource.new(
54
- "#{name}_delta_#{index}", adapter.sphinx_identifier
55
- )
56
- source.parent = "#{name}_core_#{index}"
57
-
58
- set_source_database_settings source
59
- set_source_attributes source, offset, true
60
- set_source_sql source, offset, true
61
-
62
- source
63
- end
64
-
65
- def delta?
66
- !@index.delta_object.nil?
67
- end
68
-
69
- # Gets the association stack for a specific key.
70
- #
71
- def association(key)
72
- @associations[key] ||= Association.children(@model, key)
73
- end
74
-
75
- private
76
-
77
- def adapter
78
- @adapter ||= @model.sphinx_database_adapter
79
- end
80
-
81
- def set_source_database_settings(source)
82
- config = @model.connection.instance_variable_get(:@config)
83
-
84
- source.sql_host = config[:host] || "localhost"
85
- source.sql_user = config[:username] || config[:user] || 'root'
86
- source.sql_pass = (config[:password].to_s || "").gsub('#', '\#')
87
- source.sql_db = config[:database]
88
- source.sql_port = config[:port]
89
- source.sql_sock = config[:socket]
90
- end
91
-
92
- def set_source_attributes(source, offset, delta = false)
93
- attributes.each do |attrib|
94
- source.send(attrib.type_to_config) << attrib.config_value(offset, delta)
95
- end
96
- end
97
-
98
- def set_source_sql(source, offset, delta = false)
99
- source.sql_query = to_sql(:offset => offset, :delta => delta).gsub(/\n/, ' ')
100
- source.sql_query_range = to_sql_query_range(:delta => delta)
101
- source.sql_query_info = to_sql_query_info(offset)
102
-
103
- source.sql_query_pre += send(!delta ? :sql_query_pre_for_core : :sql_query_pre_for_delta)
104
-
105
- if @index.local_options[:group_concat_max_len]
106
- source.sql_query_pre << "SET SESSION group_concat_max_len = #{@index.local_options[:group_concat_max_len]}"
107
- end
108
-
109
- source.sql_query_pre += [adapter.utf8_query_pre].compact if utf8?
110
- end
111
-
112
- def set_source_settings(source)
113
- config = ThinkingSphinx::Configuration.instance
114
- config.source_options.each do |key, value|
115
- source.send("#{key}=".to_sym, value)
116
- end
117
-
118
- source_options = ThinkingSphinx::Configuration::SourceOptions
119
- @options.each do |key, value|
120
- if source_options.include?(key.to_s) && !value.nil?
121
- source.send("#{key}=".to_sym, value)
122
- end
123
- end
124
- end
125
-
126
- # Returns all associations used amongst all the fields and attributes.
127
- # This includes all associations between the model and what the actual
128
- # columns are from.
129
- #
130
- def all_associations
131
- @all_associations ||= (
132
- # field associations
133
- @fields.collect { |field|
134
- field.associations.values
135
- }.flatten +
136
- # attribute associations
137
- @attributes.collect { |attrib|
138
- attrib.associations.values if attrib.include_as_association?
139
- }.compact.flatten
140
- ).uniq.collect { |assoc|
141
- # get ancestors as well as column-level associations
142
- assoc.ancestors
143
- }.flatten.uniq
144
- end
145
-
146
- def utf8?
147
- @index.options[:charset_type] == "utf-8"
148
- end
149
- end
150
- end
data/rails/init.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'thinking_sphinx'
2
- require 'action_controller/dispatcher'
3
-
4
- ActionController::Dispatcher.to_prepare :thinking_sphinx do
5
- # Force internationalisation to be loaded.
6
- if Rails::VERSION::STRING.to_f > 2.2
7
- I18n.backend.reload!
8
- I18n.backend.available_locales
9
- elsif Rails::VERSION::STRING.to_f > 2.1
10
- I18n.backend.load_translations(*I18n.load_path)
11
- end
12
-
13
- ThinkingSphinx::Configuration.instance.load_models
14
- end
@@ -1,130 +0,0 @@
1
- require 'spec/spec_helper'
2
-
3
- describe "ThinkingSphinx::ActiveRecord::Delta" do
4
- it "should call the toggle_delta method after a save" do
5
- @beta = Beta.new(:name => 'beta')
6
- @beta.should_receive(:toggle_delta).and_return(true)
7
-
8
- @beta.save
9
- end
10
-
11
- it "should call the toggle_delta method after a save!" do
12
- @beta = Beta.new(:name => 'beta')
13
- @beta.should_receive(:toggle_delta).and_return(true)
14
-
15
- @beta.save!
16
- end
17
-
18
- describe "suspended_delta method" do
19
- before :each do
20
- ThinkingSphinx.deltas_enabled = true
21
- Person.sphinx_indexes.first.delta_object.stub!(:` => "")
22
- end
23
-
24
- it "should execute the argument block with deltas disabled" do
25
- ThinkingSphinx.should_receive(:deltas_enabled=).once.with(false)
26
- ThinkingSphinx.should_receive(:deltas_enabled=).once.with(true)
27
- lambda { Person.suspended_delta { raise 'i was called' } }.should(
28
- raise_error(Exception)
29
- )
30
- end
31
-
32
- it "should restore deltas_enabled to its original setting" do
33
- ThinkingSphinx.deltas_enabled = false
34
- ThinkingSphinx.should_receive(:deltas_enabled=).twice.with(false)
35
- Person.suspended_delta { 'no-op' }
36
- end
37
-
38
- it "should restore deltas_enabled to its original setting even if there was an exception" do
39
- ThinkingSphinx.deltas_enabled = false
40
- ThinkingSphinx.should_receive(:deltas_enabled=).twice.with(false)
41
- lambda { Person.suspended_delta { raise 'bad error' } }.should(
42
- raise_error(Exception)
43
- )
44
- end
45
-
46
- it "should reindex by default after the code block is run" do
47
- Person.should_receive(:index_delta)
48
- Person.suspended_delta { 'no-op' }
49
- end
50
-
51
- it "should not reindex after the code block if false is passed in" do
52
- Person.should_not_receive(:index_delta)
53
- Person.suspended_delta(false) { 'no-op' }
54
- end
55
- end
56
-
57
- describe "toggle_delta method" do
58
- it "should set the delta value to true" do
59
- @person = Person.new
60
-
61
- @person.delta.should be_false
62
- @person.send(:toggle_delta)
63
- @person.delta.should be_true
64
- end
65
- end
66
-
67
- describe "index_delta method" do
68
- before :each do
69
- ThinkingSphinx::Configuration.stub!(:environment => "spec")
70
- ThinkingSphinx.deltas_enabled = true
71
- ThinkingSphinx.updates_enabled = true
72
- ThinkingSphinx.stub!(:sphinx_running? => true)
73
- Person.delta_object.stub!(:` => "", :toggled => true)
74
-
75
- @person = Person.new
76
- @person.stub!(
77
- :in_both_indexes? => false,
78
- :sphinx_document_id => 1
79
- )
80
-
81
- @client = Riddle::Client.new
82
- @client.stub!(:update => true)
83
- Riddle::Client.stub!(:new => @client)
84
- end
85
-
86
- it "shouldn't index if delta indexing is disabled" do
87
- ThinkingSphinx.deltas_enabled = false
88
- Person.sphinx_indexes.first.delta_object.should_not_receive(:`)
89
- @client.should_not_receive(:update)
90
-
91
- @person.send(:index_delta)
92
- end
93
-
94
- it "shouldn't index if index updating is disabled" do
95
- ThinkingSphinx.updates_enabled = false
96
- Person.sphinx_indexes.first.delta_object.should_not_receive(:`)
97
-
98
- @person.send(:index_delta)
99
- end
100
-
101
- it "shouldn't index if the environment is 'test'" do
102
- ThinkingSphinx.deltas_enabled = nil
103
- ThinkingSphinx::Configuration.stub!(:environment => "test")
104
- Person.sphinx_indexes.first.delta_object.should_not_receive(:`)
105
-
106
- @person.send(:index_delta)
107
- end
108
-
109
- it "should call indexer for the delta index" do
110
- Person.sphinx_indexes.first.delta_object.should_receive(:`).with(
111
- "#{ThinkingSphinx::Configuration.instance.bin_path}indexer --config #{ThinkingSphinx::Configuration.instance.config_file} --rotate person_delta"
112
- )
113
-
114
- @person.send(:index_delta)
115
- end
116
-
117
- it "shouldn't update the deleted attribute if not in the index" do
118
- @client.should_not_receive(:update)
119
-
120
- @person.send(:index_delta)
121
- end
122
-
123
- it "should update the deleted attribute if in the core index" do
124
- @person.stub!(:in_both_indexes? => true)
125
- @client.should_receive(:update)
126
-
127
- @person.send(:index_delta)
128
- end
129
- end
130
- end
@@ -1,49 +0,0 @@
1
- require 'spec/spec_helper'
2
-
3
- describe 'ThinkingSphinx::ActiveRecord::HasManyAssociation' do
4
- describe "search method" do
5
- before :each do
6
- Friendship.stub!(:search => true)
7
-
8
- @person = Person.find(:first)
9
- @index = Friendship.sphinx_indexes.first
10
- end
11
-
12
- it "should raise an error if the required attribute doesn't exist" do
13
- @index.stub!(:attributes => [])
14
-
15
- lambda { @person.friendships.search "test" }.should raise_error(RuntimeError)
16
- end
17
-
18
- it "should add a filter for the attribute into a normal search call" do
19
- Friendship.should_receive(:search) do |query, options|
20
- options[:with][:person_id].should == @person.id
21
- end
22
-
23
- @person.friendships.search "test"
24
- end
25
- end
26
-
27
- describe "search method for has_many :through" do
28
- before :each do
29
- Person.stub!(:search => true)
30
-
31
- @person = Person.find(:first)
32
- @index = Person.sphinx_indexes.first
33
- end
34
-
35
- it "should raise an error if the required attribute doesn't exist" do
36
- @index.stub!(:attributes => [])
37
-
38
- lambda { @person.friends.search "test" }.should raise_error(RuntimeError)
39
- end
40
-
41
- it "should add a filter for the attribute into a normal search call" do
42
- Person.should_receive(:search).with do |query, options|
43
- options[:with][:friendly_ids].should == @person.id
44
- end
45
-
46
- @person.friends.search "test"
47
- end
48
- end
49
- end
@@ -1,96 +0,0 @@
1
- require 'spec/spec_helper'
2
-
3
- describe ThinkingSphinx::ActiveRecord::Scopes do
4
- after :each do
5
- Alpha.remove_sphinx_scopes
6
- end
7
-
8
- it "should be included into models with indexes" do
9
- Alpha.included_modules.should include(ThinkingSphinx::ActiveRecord::Scopes)
10
- end
11
-
12
- it "should not be included into models without indexes" do
13
- Gamma.included_modules.should_not include(
14
- ThinkingSphinx::ActiveRecord::Scopes
15
- )
16
- end
17
-
18
- describe '.sphinx_scope' do
19
- before :each do
20
- Alpha.sphinx_scope(:by_name) { |name| {:conditions => {:name => name}} }
21
- end
22
-
23
- it "should define a method on the model" do
24
- Alpha.should respond_to(:by_name)
25
- end
26
- end
27
-
28
- describe '.sphinx_scopes' do
29
- before :each do
30
- Alpha.sphinx_scope(:by_name) { |name| {:conditions => {:name => name}} }
31
- end
32
-
33
- it "should return an array of defined scope names as symbols" do
34
- Alpha.sphinx_scopes.should == [:by_name]
35
- end
36
- end
37
-
38
- describe '.remove_sphinx_scopes' do
39
- before :each do
40
- Alpha.sphinx_scope(:by_name) { |name| {:conditions => {:name => name}} }
41
- Alpha.remove_sphinx_scopes
42
- end
43
-
44
- it "should remove sphinx scope methods" do
45
- Alpha.should_not respond_to(:by_name)
46
- end
47
-
48
- it "should empty the list of sphinx scopes" do
49
- Alpha.sphinx_scopes.should be_empty
50
- end
51
- end
52
-
53
- describe '.example_scope' do
54
- before :each do
55
- Alpha.sphinx_scope(:by_name) { |name| {:conditions => {:name => name}} }
56
- Alpha.sphinx_scope(:by_foo) { |foo| {:conditions => {:foo => foo}} }
57
- Alpha.sphinx_scope(:with_betas) { {:classes => [Beta]} }
58
- end
59
-
60
- it "should return a ThinkingSphinx::Search object" do
61
- Alpha.by_name('foo').should be_a(ThinkingSphinx::Search)
62
- end
63
-
64
- it "should set the classes option" do
65
- Alpha.by_name('foo').options[:classes].should == [Alpha]
66
- end
67
-
68
- it "should be able to be called on a ThinkingSphinx::Search object" do
69
- search = ThinkingSphinx::Search.new(:classes => [Alpha])
70
- lambda {
71
- search.by_name('foo')
72
- }.should_not raise_error
73
- end
74
-
75
- it "should return the search object it gets called upon" do
76
- search = ThinkingSphinx::Search.new(:classes => [Alpha])
77
- search.by_name('foo').should == search
78
- end
79
-
80
- it "should apply the scope options to the underlying search object" do
81
- search = ThinkingSphinx::Search.new(:classes => [Alpha])
82
- search.by_name('foo').options[:conditions].should == {:name => 'foo'}
83
- end
84
-
85
- it "should combine hash option scopes such as :conditions" do
86
- search = ThinkingSphinx::Search.new(:classes => [Alpha])
87
- search.by_name('foo').by_foo('bar').options[:conditions].
88
- should == {:name => 'foo', :foo => 'bar'}
89
- end
90
-
91
- it "should combine array option scopes such as :classes" do
92
- search = ThinkingSphinx::Search.new(:classes => [Alpha])
93
- search.with_betas.options[:classes].should == [Alpha, Beta]
94
- end
95
- end
96
- end