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,175 +0,0 @@
1
- Feature: Searching on a single model
2
- In order to use Thinking Sphinx's core functionality
3
- A developer
4
- Should be able to search on a single model
5
-
6
- Scenario: Searching using a basic query
7
- Given Sphinx is running
8
- And I am searching on people
9
- When I search for James
10
- Then I should get 3 results
11
-
12
- Scenario: Searching on a specific field
13
- Given Sphinx is running
14
- And I am searching on people
15
- When I search for James on first_name
16
- Then I should get 2 results
17
-
18
- Scenario: Searching on multiple fields
19
- Given Sphinx is running
20
- And I am searching on people
21
- When I search for James on first_name
22
- And I search for Chamberlain on last_name
23
- Then I should get 1 result
24
-
25
- Scenario: Searching on association content
26
- Given Sphinx is running
27
- And I am searching on posts
28
-
29
- When I search for "Waffles"
30
- Then I should get 1 result
31
-
32
- When I search for "Turtle"
33
- Then I should get 1 result
34
-
35
- Scenario: Searching with a filter
36
- Given Sphinx is running
37
- And I am searching on alphas
38
- When I filter by 1 on value
39
- Then I should get 1 result
40
-
41
- Scenario: Searching with multiple filters
42
- Given Sphinx is running
43
- And I am searching on boxes
44
- When I filter by 2 on width
45
- And I filter by 2 on length
46
- Then I should get 1 result
47
-
48
- Scenario: Searching with a ranged time filter
49
- Given Sphinx is running
50
- And I am searching on people
51
- When I filter by birthday between 1975 and 1976
52
- Then I should get 16 results
53
-
54
- Scenario: Searching to filter multiple values on an MVA
55
- Given Sphinx is running
56
- And I am searching on boxes
57
- When I filter by 11 and 12 on dimensions
58
- Then I should get 2 results
59
- When I clear existing filters
60
- And I filter by both 11 and 12 on dimensions
61
- Then I should get 1 result
62
-
63
- Scenario: Filtering on timestamp MVAs
64
- Given Sphinx is running
65
- And I am searching on posts
66
- When I filter by 978307200 on comments_created_at
67
- Then I should get 1 result
68
-
69
- Scenario: Searching by NULL/0 values in MVAs
70
- Given Sphinx is running
71
- And I am searching on boxes
72
- When I filter by 0 on dimensions
73
- Then I should get 1 result
74
-
75
- Given Sphinx is running
76
- And I am searching on developers
77
- When I clear existing filters
78
- And I filter by 0 on tag_ids
79
- Then I should get 1 result
80
-
81
- Scenario: Searching on a MVA configured as ranged_query
82
- Given Sphinx is running
83
- And I am searching on posts
84
- When I filter by 1 on comment_ids
85
- Then I should get 1 result
86
- When I clear existing filters
87
- And I filter by both 1 and 2 on comment_ids
88
- Then I should get 1 results
89
- When I clear existing filters
90
- And I filter by 10 on comment_ids
91
- Then I should get 0 results
92
-
93
- Scenario: Searching with ordering by attribute
94
- Given Sphinx is running
95
- And I am searching on alphas
96
- When I order by value
97
- Then I should get 10 results
98
- And the value of each result should indicate order
99
-
100
- Scenario: Searching with ordering on a sortable field
101
- Given Sphinx is running
102
- And I am searching on people
103
- And I order by first_name
104
- Then I should get 20 results
105
- And the first_name of each result should indicate order
106
-
107
- Scenario: Intepreting Sphinx Internal Identifiers
108
- Given Sphinx is running
109
- And I am searching on people
110
- Then I should get 20 results
111
- And each result id should match the corresponding sphinx internal id
112
-
113
- Scenario: Retrieving weightings
114
- Given Sphinx is running
115
- And I am searching on people
116
- When I search for "Ellie Ford"
117
- And I set match mode to any
118
- Then I can iterate by result and weighting
119
-
120
- Scenario: Retrieving group counts
121
- Given Sphinx is running
122
- And I am searching on people
123
- When I group results by the birthday attribute
124
- Then I can iterate by result and count
125
-
126
- Scenario: Retrieving group values
127
- Given Sphinx is running
128
- And I am searching on people
129
- When I group results by the birthday attribute
130
- Then I can iterate by result and group
131
-
132
- Scenario: Retrieving both group values and counts
133
- Given Sphinx is running
134
- And I am searching on people
135
- When I group results by the birthday attribute
136
- Then I can iterate by result and group and count
137
-
138
- Scenario: Searching for ids
139
- Given Sphinx is running
140
- And I am searching on people
141
- When I search for Ellie
142
- And I am searching for ids
143
- Then I should have an array of integers
144
-
145
- Scenario: Search results should match Sphinx's order
146
- Given Sphinx is running
147
- And I am searching on people
148
- When I search for Ellie
149
- And I order by "sphinx_internal_id DESC"
150
- Then searching for ids should match the record ids of the normal search results
151
-
152
- Scenario: Retrieving total result count when total is less than a page
153
- Given Sphinx is running
154
- And I am searching on people
155
- When I search for James
156
- And I am retrieving the result count
157
- Then I should get a value of 3
158
-
159
- Scenario: Retrieving total result count for more than a page
160
- Given Sphinx is running
161
- And I am searching on people
162
- When I am retrieving the result count
163
- Then I should get a value of 1000
164
-
165
- Scenario: Searching with Unicode Characters
166
- Given Sphinx is running
167
- And I am searching on people
168
- When I search for "José* "
169
- Then I should get 1 result
170
-
171
- Scenario: Searching by fields from HABTM joins
172
- Given Sphinx is running
173
- And I am searching on posts
174
- When I search for "Shakespeare"
175
- Then I should get 1 result
@@ -1,56 +0,0 @@
1
- Feature: Keeping AR::Base.find arguments in search calls
2
- To keep things as streamlined as possible
3
- Thinking Sphinx
4
- Should respect particular arguments to AR::Base.find calls
5
-
6
- Scenario: Respecting the include option
7
- Given Sphinx is running
8
- And I am searching on posts
9
- Then I should get 1 result
10
-
11
- When I get the first comment
12
- And I track queries
13
- And I compare comments
14
- Then I should have 1 query
15
-
16
- When I include comments
17
- Then I should get 1 result
18
- When I track queries
19
- And I compare comments
20
- Then I should have 0 queries
21
-
22
- Scenario: Respecting the include option without using a specific model
23
- Given Sphinx is running
24
- And I search for "Hello World"
25
- Then I should get 1 result
26
-
27
- When I get the first comment
28
- And I track queries
29
- And I compare comments
30
- Then I should have 1 query
31
-
32
- When I include comments
33
- Then I should get 1 result
34
- When I track queries
35
- And I compare comments
36
- Then I should have 0 queries
37
-
38
- Scenario: Respecting the select option
39
- Given Sphinx is running
40
- And I am searching on posts
41
- Then I should get 1 result
42
- And I should not get an error accessing the subject
43
-
44
- When I select only content
45
- Then I should get 1 result
46
- And I should get an error accessing the subject
47
-
48
- Scenario: Respecting the select option without using a specific model
49
- Given Sphinx is running
50
- When I search for "Hello World"
51
- Then I should get 1 result
52
- And I should not get an error accessing the subject
53
-
54
- When I select only content
55
- Then I should get 1 result
56
- And I should get an error accessing the subject
@@ -1,25 +0,0 @@
1
- Feature: Checking whether Sphinx is running or not
2
- In order to avoid unnecessary errors
3
- Thinking Sphinx
4
- Should be able to determine whether Sphinx is running or not
5
-
6
- Scenario: Checking Sphinx's status
7
- Given Sphinx is running
8
- Then Sphinx should be running
9
-
10
- When I stop Sphinx
11
- And I wait for Sphinx to catch up
12
- Then Sphinx should not be running
13
-
14
- When I start Sphinx
15
- And I wait for Sphinx to catch up
16
- Then Sphinx should be running
17
-
18
- Given Sphinx is running
19
- When I kill the Sphinx process
20
- And I wait for Sphinx to catch up
21
- Then Sphinx should not be running
22
-
23
- When I start Sphinx again
24
- And I wait for Sphinx to catch up
25
- Then Sphinx should be running again
@@ -1,35 +0,0 @@
1
- Feature: Sphinx Scopes
2
-
3
- Scenario: Single Scope
4
- Given Sphinx is running
5
- And I am searching on people
6
- When I use the with_first_name scope set to "Andrew"
7
- Then I should get 7 results
8
-
9
- Scenario: Two Field Scopes
10
- Given Sphinx is running
11
- And I am searching on people
12
- When I use the with_first_name scope set to "Andrew"
13
- And I use the with_last_name scope set to "Byrne"
14
- Then I should get 1 result
15
-
16
- Scenario: Mixing Filter and Field Scopes
17
- Given Sphinx is running
18
- And I am searching on people
19
- When I use the with_first_name scope set to "Andrew"
20
- And I use the with_id scope set to 99
21
- Then I should get 1 result
22
-
23
- Scenario: Mixing Field and ID Scopes
24
- Given Sphinx is running
25
- And I am searching on people
26
- When I use the with_first_name scope set to "Andrew"
27
- And I use the ids_only scope
28
- Then I should get 7 results
29
- And I should have an array of integers
30
-
31
- Scenario: Non-field/filter Scopes
32
- Given Sphinx is running
33
- And I am searching on people
34
- When I use the ids_only scope
35
- Then I should have an array of integers
@@ -1,3 +0,0 @@
1
- When /^I change the (\w+) of alpha (\w+) to (\w+)$/ do |column, name, replacement|
2
- Alpha.find_by_name(name).update_attributes(column.to_sym => replacement)
3
- end
@@ -1,7 +0,0 @@
1
- When /^I create a new beta named (\w+)$/ do |name|
2
- Beta.create(:name => name, :value => 101)
3
- end
4
-
5
- When /^I change the (\w+) of beta (\w+) to (\w+)$/ do |column, name, replacement|
6
- Beta.find_by_name(name).update_attributes(column.to_sym => replacement)
7
- end
@@ -1,178 +0,0 @@
1
- Before do
2
- $queries_executed = []
3
- ThinkingSphinx::Deltas::Job.cancel_thinking_sphinx_jobs
4
-
5
- @model = nil
6
- @method = :search
7
- @query = ""
8
- @conditions = {}
9
- @with = {}
10
- @without = {}
11
- @with_all = {}
12
- @options = {}
13
- @results = nil
14
- end
15
-
16
- Given /^I am searching on (.+)$/ do |model|
17
- @model = model.gsub(/\s/, '_').singularize.camelize.constantize
18
- end
19
-
20
- Given /^updates are (\w+)$/ do |action|
21
- ThinkingSphinx.updates_enabled = (action == "enabled")
22
- end
23
-
24
- When /^I am searching for ids$/ do
25
- @results = nil
26
- @method = :search_for_ids
27
- end
28
-
29
- When /^I am retrieving the result count$/ do
30
- @result = nil
31
- @method = @model ? :search_count : :count
32
- end
33
-
34
- When /^I search$/ do
35
- @results = nil
36
- end
37
-
38
- When /^I search for (\w+)$/ do |query|
39
- @results = nil
40
- @query = query
41
- end
42
-
43
- When /^I search for "([^\"]*)"$/ do |query|
44
- @results = nil
45
- @query = query
46
- end
47
-
48
- When /^I search for (\w+) on (\w+)$/ do |query, field|
49
- @results = nil
50
- @conditions[field.to_sym] = query
51
- end
52
-
53
- When /^I clear existing filters$/ do
54
- @with = {}
55
- @without = {}
56
- @with_all = {}
57
- end
58
-
59
- When /^I filter by (\w+) on (\w+)$/ do |filter, attribute|
60
- @results = nil
61
- @with[attribute.to_sym] = filter.to_i
62
- end
63
-
64
- When /^I filter by (\d+) and (\d+) on (\w+)$/ do |value_one, value_two, attribute|
65
- @results = nil
66
- @with[attribute.to_sym] = [value_one.to_i, value_two.to_i]
67
- end
68
-
69
- When /^I filter by both (\d+) and (\d+) on (\w+)$/ do |value_one, value_two, attribute|
70
- @results = nil
71
- @with_all[attribute.to_sym] = [value_one.to_i, value_two.to_i]
72
- end
73
-
74
- When /^I filter between ([\d\.]+) and ([\d\.]+) on (\w+)$/ do |first, last, attribute|
75
- @results = nil
76
- if first[/\./].nil? && last[/\./].nil?
77
- @with[attribute.to_sym] = first.to_i..last.to_i
78
- else
79
- @with[attribute.to_sym] = first.to_f..last.to_f
80
- end
81
- end
82
-
83
- When /^I filter between (\d+) and (\d+) days ago on (\w+)$/ do |last, first, attribute|
84
- @results = nil
85
- @with[attribute.to_sym] = first.to_i.days.ago..last.to_i.days.ago
86
- end
87
-
88
- When /^I filter by (\w+) between (\d+) and (\d+)$/ do |attribute, first, last|
89
- @results = nil
90
- @with[attribute.to_sym] = Time.utc(first.to_i)..Time.utc(last.to_i)
91
- end
92
-
93
- When /^I order by (\w+)$/ do |attribute|
94
- @results = nil
95
- @options[:order] = attribute.to_sym
96
- end
97
-
98
- When /^I order by "([^\"]+)"$/ do |str|
99
- @results = nil
100
- @options[:order] = str
101
- end
102
-
103
- When /^I group results by the (\w+) attribute$/ do |attribute|
104
- @results = nil
105
- @options[:group_function] = :attr
106
- @options[:group_by] = attribute
107
- end
108
-
109
- When /^I set match mode to (\w+)$/ do |match_mode|
110
- @results = nil
111
- @options[:match_mode] = match_mode.to_sym
112
- end
113
-
114
- When /^I set per page to (\d+)$/ do |per_page|
115
- @results = nil
116
- @options[:per_page] = per_page.to_i
117
- end
118
-
119
- When /^I set retry stale to (\w+)$/ do |retry_stale|
120
- @results = nil
121
- @options[:retry_stale] = case retry_stale
122
- when "true" then true
123
- when "false" then false
124
- else retry_stale.to_i
125
- end
126
- end
127
-
128
- When /^I destroy (\w+) (\w+)$/ do |model, name|
129
- model.gsub(/\s/, '_').camelize.
130
- constantize.find_by_name(name).destroy
131
- end
132
-
133
- Then /^the (\w+) of each result should indicate order$/ do |attribute|
134
- results.inject(nil) do |prev, current|
135
- unless prev.nil?
136
- current.send(attribute.to_sym).should >= prev.send(attribute.to_sym)
137
- end
138
-
139
- current
140
- end
141
- end
142
-
143
- Then /^I can iterate by result and (\w+)$/ do |attribute|
144
- iteration = lambda { |result, attr_value|
145
- result.should be_kind_of(@model)
146
- unless attribute == "group" && attr_value.nil?
147
- attr_value.should be_kind_of(Integer)
148
- end
149
- }
150
-
151
- results.send("each_with_#{attribute}", &iteration)
152
- end
153
-
154
- Then /^I should get (\d+) results?$/ do |count|
155
- results.length.should == count.to_i
156
- end
157
-
158
- Then /^I should not get (\d+) results?$/ do |count|
159
- results.length.should_not == count.to_i
160
- end
161
-
162
- Then /^I should get as many results as there are (.+)$/ do |model|
163
- results.length.should == model.gsub(/\s/, '_').singularize.camelize.
164
- constantize.count
165
- end
166
-
167
- def results
168
- @results ||= (@model || ThinkingSphinx).send(
169
- @method,
170
- @query,
171
- @options.merge(
172
- :conditions => @conditions,
173
- :with => @with,
174
- :without => @without,
175
- :with_all => @with_all
176
- )
177
- )
178
- end
@@ -1,15 +0,0 @@
1
- When /^I index the theta datetime delta$/ do
2
- Theta.sphinx_indexes.first.delta_object.delayed_index(Theta)
3
- end
4
-
5
- When /^I change the name of theta (\w+) to (\w+)$/ do |current, replacement|
6
- Theta.find_by_name(current).update_attributes(:name => replacement)
7
- end
8
-
9
- When /^I create a new theta named (\w+)$/ do |name|
10
- Theta.create(:name => name)
11
- end
12
-
13
- When /^I delete the theta named (\w+)$/ do |name|
14
- Theta.find_by_name(name).destroy
15
- end
@@ -1,7 +0,0 @@
1
- When /^I run the delayed jobs$/ do
2
- Delayed::Job.work_off.inspect
3
- end
4
-
5
- When /^I change the name of delayed beta (\w+) to (\w+)$/ do |current, replacement|
6
- DelayedBeta.find_by_name(current).update_attributes(:name => replacement)
7
- end
@@ -1,7 +0,0 @@
1
- When /I change the name of extensible beta (\w+) to (\w+)$/ do |current, replacement|
2
- ExtensibleBeta.find_by_name(current).update_attributes(:name => replacement)
3
- end
4
-
5
- Then /^the generic delta handler should handle the delta indexing$/ do
6
- ExtensibleBeta.find(:first, :conditions => {:changed_by_generic => true}).should_not be_nil
7
- end
@@ -1,92 +0,0 @@
1
- When /^I am requesting facet results$/ do
2
- @results = nil
3
- @method = :facets
4
- end
5
-
6
- When /^I am requesting just the facet (\w+)$/ do |facet|
7
- @results = nil
8
- @options[:facets] = facet.downcase.to_sym
9
- end
10
-
11
- When /^I am requesting just the facets (\w+) and (\w+)$/ do |one, two|
12
- @results = nil
13
- @options[:facets] = [one.downcase.to_sym, two.downcase.to_sym]
14
- end
15
-
16
- When "I want classes included" do
17
- @options[:class_facet] = true
18
- end
19
-
20
- When "I don't want classes included" do
21
- @options[:class_facet] = false
22
- end
23
-
24
- When "I want all possible attributes" do
25
- @options[:all_facets] = true
26
- end
27
-
28
- When /^I drill down where (\w+) is (\w+)$/ do |facet, value|
29
- @results = results.for(facet.downcase.to_sym => value)
30
- end
31
-
32
- When /^I drill down where (\w+) is (\w+) and (\w+) is (\w+)$/ do |facet_one, value_one, facet_two, value_two|
33
- value_one = value_one.to_i unless value_one[/^\d+$/].nil?
34
- value_two = value_two.to_i unless value_two[/^\d+$/].nil?
35
-
36
- @results = results.for(
37
- facet_one.downcase.to_sym => value_one,
38
- facet_two.downcase.to_sym => value_two
39
- )
40
- end
41
-
42
- When /^I drill down where ([\w_]+) includes the id of tag (\w+)$/ do |facet, text|
43
- tag = Tag.find_by_text(text)
44
- @results = results.for(facet.downcase.to_sym => tag.id)
45
- end
46
-
47
- When /^I drill down where ([\w_]+) includes the id of tags (\w+) or (\w+)$/ do |facet, text_one, text_two|
48
- tag_one = Tag.find_by_text(text_one)
49
- tag_two = Tag.find_by_text(text_two)
50
- @results = results.for(facet.downcase.to_sym => [tag_one.id, tag_two.id])
51
- end
52
-
53
- Then "I should have valid facet results" do
54
- results.should be_kind_of(Hash)
55
- results.values.each { |value| value.should be_kind_of(Hash) }
56
- end
57
-
58
- Then /^I should have (\d+) facets?$/ do |count|
59
- results.keys.length.should == count.to_i
60
- end
61
-
62
- Then /^I should have the facet ([\w_\s]+)$/ do |name|
63
- results[facet_name(name)].should be_kind_of(Hash)
64
- end
65
-
66
- Then /^I should not have the facet ([\w_\s]+)$/ do |name|
67
- results.keys.should_not include(facet_name(name))
68
- end
69
-
70
- Then /^the ([\w_\s]+) facet should have an? "([\w\s_]+)" key with (\d+) hits$/ do |name, key, hit_count|
71
- facet_name = facet_name name
72
- results[facet_name].keys.should include(key)
73
- results[facet_name][key].should eql(hit_count.to_i)
74
- end
75
-
76
- Then /^the ([\w_\s]+) facet should have an? "(\w+)" key$/ do |name, key|
77
- results[facet_name(name)].keys.should include(key)
78
- end
79
-
80
- Then /^the ([\w_\s]+) facet should have an? (\d+\.?\d*) key$/ do |name, key|
81
- if key[/\./]
82
- key = key.to_f
83
- else
84
- key = key.to_i
85
- end
86
-
87
- results[facet_name(name)].keys.should include(key)
88
- end
89
-
90
- def facet_name(string)
91
- string.gsub(/\s/, '').underscore.to_sym
92
- end
@@ -1,36 +0,0 @@
1
- When "I include comments" do
2
- @results = nil
3
- @options[:include] = :comments
4
- end
5
-
6
- When /^I get the first comment$/ do
7
- @comment = Comment.find(:first)
8
- end
9
-
10
- When /^I track queries$/ do
11
- $queries_executed = []
12
- end
13
-
14
- When /^I compare comments$/ do
15
- results.first.comments.first.should == @comment
16
- end
17
-
18
- When /^I select only content$/ do
19
- @results = nil
20
- @options[:select] = "id, content"
21
- end
22
-
23
- Then /^I should have (\d+) quer[yies]+$/ do |count|
24
- $queries_executed.length.should == count.to_i
25
- end
26
-
27
- Then /^I should not get an error accessing the subject$/ do
28
- lambda { results.first.subject }.should_not raise_error
29
- end
30
-
31
- Then /^I should get an error accessing the subject$/ do
32
- error_class = NoMethodError
33
- error_class = ActiveRecord::MissingAttributeError if ActiveRecord.constants.include?("MissingAttributeError")
34
-
35
- lambda { results.first.subject }.should raise_error(error_class)
36
- end
@@ -1,15 +0,0 @@
1
- When /^I destroy gamma (\w+) without callbacks$/ do |name|
2
- @results = nil
3
- gamma = Gamma.find_by_name(name)
4
- Gamma.delete(gamma.id) if gamma
5
- end
6
-
7
- Then "I should get a single result of nil" do
8
- results.to_a.should == [nil]
9
- end
10
-
11
- Then /^I should get a single gamma result with a name of (\w+)$/ do |name|
12
- results.length.should == 1
13
- results.first.should be_a(Gamma)
14
- results.first.name.should == name
15
- end
@@ -1,11 +0,0 @@
1
- When /^I use the ([\w]+) scope$/ do |scope|
2
- @results = results.send(scope.to_sym)
3
- end
4
-
5
- When /^I use the ([\w]+) scope set to "([^\"]*)"$/ do |scope, value|
6
- @results = results.send(scope.to_sym, value)
7
- end
8
-
9
- When /^I use the ([\w]+) scope set to (\d+)$/ do |scope, int|
10
- @results = results.send(scope.to_sym, int.to_i)
11
- end