thinking-sphinx 3.4.2 → 4.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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +20 -18
  3. data/Appraisals +28 -16
  4. data/CHANGELOG.markdown +538 -0
  5. data/Gemfile +9 -11
  6. data/README.textile +23 -31
  7. data/Rakefile +2 -0
  8. data/bin/console +2 -1
  9. data/bin/loadsphinx +29 -2
  10. data/lib/thinking-sphinx.rb +2 -0
  11. data/lib/thinking/sphinx.rb +2 -0
  12. data/lib/thinking_sphinx.rb +24 -13
  13. data/lib/thinking_sphinx/active_record.rb +10 -1
  14. data/lib/thinking_sphinx/active_record/association.rb +2 -0
  15. data/lib/thinking_sphinx/active_record/association_proxy.rb +2 -0
  16. data/lib/thinking_sphinx/active_record/association_proxy/attribute_finder.rb +2 -0
  17. data/lib/thinking_sphinx/active_record/association_proxy/attribute_matcher.rb +2 -0
  18. data/lib/thinking_sphinx/active_record/attribute.rb +2 -0
  19. data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +2 -0
  20. data/lib/thinking_sphinx/active_record/attribute/type.rb +2 -0
  21. data/lib/thinking_sphinx/active_record/attribute/values.rb +2 -0
  22. data/lib/thinking_sphinx/active_record/base.rb +2 -0
  23. data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +2 -0
  24. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +2 -0
  25. data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +2 -0
  26. data/lib/thinking_sphinx/active_record/column.rb +2 -0
  27. data/lib/thinking_sphinx/active_record/column_sql_presenter.rb +2 -0
  28. data/lib/thinking_sphinx/active_record/database_adapters.rb +2 -0
  29. data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +2 -0
  30. data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +2 -0
  31. data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +2 -0
  32. data/lib/thinking_sphinx/active_record/depolymorph/association_reflection.rb +32 -0
  33. data/lib/thinking_sphinx/active_record/depolymorph/base_reflection.rb +32 -0
  34. data/lib/thinking_sphinx/active_record/depolymorph/conditions_reflection.rb +40 -0
  35. data/lib/thinking_sphinx/active_record/depolymorph/overridden_reflection.rb +35 -0
  36. data/lib/thinking_sphinx/active_record/depolymorph/scoped_reflection.rb +26 -0
  37. data/lib/thinking_sphinx/active_record/field.rb +2 -0
  38. data/lib/thinking_sphinx/active_record/filter_reflection.rb +13 -71
  39. data/lib/thinking_sphinx/active_record/index.rb +2 -0
  40. data/lib/thinking_sphinx/active_record/interpreter.rb +2 -0
  41. data/lib/thinking_sphinx/active_record/join_association.rb +2 -0
  42. data/lib/thinking_sphinx/active_record/log_subscriber.rb +2 -0
  43. data/lib/thinking_sphinx/active_record/polymorpher.rb +2 -0
  44. data/lib/thinking_sphinx/active_record/property.rb +2 -0
  45. data/lib/thinking_sphinx/active_record/property_query.rb +2 -0
  46. data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +2 -0
  47. data/lib/thinking_sphinx/active_record/simple_many_query.rb +2 -0
  48. data/lib/thinking_sphinx/active_record/source_joins.rb +2 -0
  49. data/lib/thinking_sphinx/active_record/sql_builder.rb +2 -0
  50. data/lib/thinking_sphinx/active_record/sql_builder/clause_builder.rb +2 -0
  51. data/lib/thinking_sphinx/active_record/sql_builder/query.rb +2 -0
  52. data/lib/thinking_sphinx/active_record/sql_builder/statement.rb +2 -0
  53. data/lib/thinking_sphinx/active_record/sql_source.rb +15 -3
  54. data/lib/thinking_sphinx/active_record/sql_source/template.rb +2 -0
  55. data/lib/thinking_sphinx/attribute_types.rb +2 -0
  56. data/lib/thinking_sphinx/batched_search.rb +2 -0
  57. data/lib/thinking_sphinx/callbacks.rb +2 -0
  58. data/lib/thinking_sphinx/capistrano.rb +2 -0
  59. data/lib/thinking_sphinx/capistrano/v2.rb +2 -0
  60. data/lib/thinking_sphinx/capistrano/v3.rb +2 -0
  61. data/lib/thinking_sphinx/commander.rb +27 -0
  62. data/lib/thinking_sphinx/commands.rb +20 -0
  63. data/lib/thinking_sphinx/commands/base.rb +9 -1
  64. data/lib/thinking_sphinx/commands/clear_real_time.rb +22 -0
  65. data/lib/thinking_sphinx/commands/clear_sql.rb +18 -0
  66. data/lib/thinking_sphinx/commands/configure.rb +2 -0
  67. data/lib/thinking_sphinx/commands/index_real_time.rb +17 -0
  68. data/lib/thinking_sphinx/commands/index_sql.rb +25 -0
  69. data/lib/thinking_sphinx/commands/merge.rb +27 -0
  70. data/lib/thinking_sphinx/commands/merge_and_update.rb +57 -0
  71. data/lib/thinking_sphinx/commands/prepare.rb +13 -0
  72. data/lib/thinking_sphinx/commands/rotate.rb +13 -0
  73. data/lib/thinking_sphinx/commands/running.rb +13 -0
  74. data/lib/thinking_sphinx/commands/start_attached.rb +2 -0
  75. data/lib/thinking_sphinx/commands/start_detached.rb +3 -1
  76. data/lib/thinking_sphinx/commands/stop.rb +4 -2
  77. data/lib/thinking_sphinx/configuration.rb +28 -47
  78. data/lib/thinking_sphinx/configuration/consistent_ids.rb +2 -0
  79. data/lib/thinking_sphinx/configuration/defaults.rb +2 -0
  80. data/lib/thinking_sphinx/configuration/distributed_indices.rb +2 -0
  81. data/lib/thinking_sphinx/configuration/duplicate_names.rb +2 -0
  82. data/lib/thinking_sphinx/configuration/minimum_fields.rb +2 -0
  83. data/lib/thinking_sphinx/connection.rb +4 -5
  84. data/lib/thinking_sphinx/connection/client.rb +21 -0
  85. data/lib/thinking_sphinx/connection/jruby.rb +7 -2
  86. data/lib/thinking_sphinx/connection/mri.rb +2 -4
  87. data/lib/thinking_sphinx/core.rb +2 -0
  88. data/lib/thinking_sphinx/core/field.rb +2 -0
  89. data/lib/thinking_sphinx/core/index.rb +4 -1
  90. data/lib/thinking_sphinx/core/interpreter.rb +2 -0
  91. data/lib/thinking_sphinx/core/property.rb +2 -0
  92. data/lib/thinking_sphinx/core/settings.rb +2 -0
  93. data/lib/thinking_sphinx/deletion.rb +2 -0
  94. data/lib/thinking_sphinx/deltas.rb +2 -0
  95. data/lib/thinking_sphinx/deltas/default_delta.rb +2 -0
  96. data/lib/thinking_sphinx/deltas/delete_job.rb +2 -0
  97. data/lib/thinking_sphinx/deltas/index_job.rb +9 -1
  98. data/lib/thinking_sphinx/distributed.rb +2 -0
  99. data/lib/thinking_sphinx/distributed/index.rb +2 -0
  100. data/lib/thinking_sphinx/errors.rb +9 -0
  101. data/lib/thinking_sphinx/excerpter.rb +2 -0
  102. data/lib/thinking_sphinx/facet.rb +4 -3
  103. data/lib/thinking_sphinx/facet_search.rb +4 -2
  104. data/lib/thinking_sphinx/float_formatter.rb +2 -0
  105. data/lib/thinking_sphinx/frameworks.rb +2 -0
  106. data/lib/thinking_sphinx/frameworks/plain.rb +2 -0
  107. data/lib/thinking_sphinx/frameworks/rails.rb +2 -0
  108. data/lib/thinking_sphinx/guard.rb +3 -0
  109. data/lib/thinking_sphinx/guard/file.rb +2 -0
  110. data/lib/thinking_sphinx/guard/files.rb +2 -0
  111. data/lib/thinking_sphinx/guard/none.rb +7 -0
  112. data/lib/thinking_sphinx/hooks/guard_presence.rb +34 -0
  113. data/lib/thinking_sphinx/index.rb +2 -0
  114. data/lib/thinking_sphinx/index_set.rb +2 -0
  115. data/lib/thinking_sphinx/indexing_strategies/all_at_once.rb +2 -0
  116. data/lib/thinking_sphinx/indexing_strategies/one_at_a_time.rb +2 -0
  117. data/lib/thinking_sphinx/interfaces.rb +10 -0
  118. data/lib/thinking_sphinx/interfaces/base.rb +13 -0
  119. data/lib/thinking_sphinx/interfaces/daemon.rb +6 -11
  120. data/lib/thinking_sphinx/interfaces/real_time.rb +19 -14
  121. data/lib/thinking_sphinx/interfaces/sql.rb +22 -10
  122. data/lib/thinking_sphinx/logger.rb +2 -0
  123. data/lib/thinking_sphinx/masks.rb +2 -0
  124. data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +6 -4
  125. data/lib/thinking_sphinx/masks/pagination_mask.rb +2 -0
  126. data/lib/thinking_sphinx/masks/scopes_mask.rb +2 -0
  127. data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +3 -1
  128. data/lib/thinking_sphinx/middlewares.rb +5 -3
  129. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +2 -0
  130. data/lib/thinking_sphinx/middlewares/geographer.rb +2 -0
  131. data/lib/thinking_sphinx/middlewares/glazier.rb +2 -0
  132. data/lib/thinking_sphinx/middlewares/ids_only.rb +2 -0
  133. data/lib/thinking_sphinx/middlewares/inquirer.rb +2 -0
  134. data/lib/thinking_sphinx/middlewares/middleware.rb +2 -0
  135. data/lib/thinking_sphinx/middlewares/sphinxql.rb +4 -2
  136. data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +2 -0
  137. data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +2 -0
  138. data/lib/thinking_sphinx/middlewares/valid_options.rb +2 -0
  139. data/lib/thinking_sphinx/panes.rb +2 -0
  140. data/lib/thinking_sphinx/panes/attributes_pane.rb +2 -0
  141. data/lib/thinking_sphinx/panes/distance_pane.rb +2 -0
  142. data/lib/thinking_sphinx/panes/excerpts_pane.rb +2 -0
  143. data/lib/thinking_sphinx/panes/weight_pane.rb +3 -1
  144. data/lib/thinking_sphinx/query.rb +2 -0
  145. data/lib/thinking_sphinx/railtie.rb +2 -0
  146. data/lib/thinking_sphinx/rake_interface.rb +3 -1
  147. data/lib/thinking_sphinx/real_time.rb +3 -0
  148. data/lib/thinking_sphinx/real_time/attribute.rb +2 -0
  149. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +2 -0
  150. data/lib/thinking_sphinx/real_time/field.rb +2 -0
  151. data/lib/thinking_sphinx/real_time/index.rb +2 -0
  152. data/lib/thinking_sphinx/real_time/index/template.rb +2 -0
  153. data/lib/thinking_sphinx/real_time/interpreter.rb +2 -0
  154. data/lib/thinking_sphinx/real_time/populator.rb +2 -1
  155. data/lib/thinking_sphinx/real_time/property.rb +2 -0
  156. data/lib/thinking_sphinx/real_time/transcribe_instance.rb +38 -0
  157. data/lib/thinking_sphinx/real_time/transcriber.rb +18 -27
  158. data/lib/thinking_sphinx/real_time/translator.rb +3 -1
  159. data/lib/thinking_sphinx/scopes.rb +2 -0
  160. data/lib/thinking_sphinx/search.rb +2 -0
  161. data/lib/thinking_sphinx/search/batch_inquirer.rb +2 -0
  162. data/lib/thinking_sphinx/search/context.rb +2 -0
  163. data/lib/thinking_sphinx/search/glaze.rb +2 -0
  164. data/lib/thinking_sphinx/search/merger.rb +2 -0
  165. data/lib/thinking_sphinx/search/query.rb +2 -0
  166. data/lib/thinking_sphinx/search/stale_ids_exception.rb +2 -0
  167. data/lib/thinking_sphinx/settings.rb +110 -0
  168. data/lib/thinking_sphinx/sinatra.rb +2 -0
  169. data/lib/thinking_sphinx/subscribers/populator_subscriber.rb +18 -0
  170. data/lib/thinking_sphinx/tasks.rb +13 -46
  171. data/lib/thinking_sphinx/test.rb +2 -0
  172. data/lib/thinking_sphinx/utf8.rb +2 -0
  173. data/lib/thinking_sphinx/wildcard.rb +2 -0
  174. data/lib/thinking_sphinx/with_output.rb +2 -0
  175. data/spec/acceptance/association_scoping_spec.rb +2 -0
  176. data/spec/acceptance/attribute_access_spec.rb +4 -4
  177. data/spec/acceptance/attribute_updates_spec.rb +2 -0
  178. data/spec/acceptance/batch_searching_spec.rb +2 -0
  179. data/spec/acceptance/big_integers_spec.rb +2 -0
  180. data/spec/acceptance/connection_spec.rb +2 -0
  181. data/spec/acceptance/excerpts_spec.rb +1 -0
  182. data/spec/acceptance/facets_spec.rb +2 -3
  183. data/spec/acceptance/geosearching_spec.rb +3 -1
  184. data/spec/acceptance/grouping_by_attributes_spec.rb +2 -0
  185. data/spec/acceptance/index_options_spec.rb +2 -0
  186. data/spec/acceptance/indexing_spec.rb +2 -0
  187. data/spec/acceptance/merging_spec.rb +90 -0
  188. data/spec/acceptance/paginating_search_results_spec.rb +2 -0
  189. data/spec/acceptance/real_time_updates_spec.rb +2 -0
  190. data/spec/acceptance/remove_deleted_records_spec.rb +2 -0
  191. data/spec/acceptance/search_counts_spec.rb +2 -0
  192. data/spec/acceptance/search_for_just_ids_spec.rb +2 -0
  193. data/spec/acceptance/searching_across_models_spec.rb +2 -0
  194. data/spec/acceptance/searching_across_schemas_spec.rb +2 -0
  195. data/spec/acceptance/searching_on_fields_spec.rb +2 -0
  196. data/spec/acceptance/searching_with_filters_spec.rb +2 -0
  197. data/spec/acceptance/searching_with_sti_spec.rb +2 -0
  198. data/spec/acceptance/searching_within_a_model_spec.rb +2 -0
  199. data/spec/acceptance/sorting_search_results_spec.rb +2 -0
  200. data/spec/acceptance/spec_helper.rb +2 -13
  201. data/spec/acceptance/specifying_sql_spec.rb +2 -0
  202. data/spec/acceptance/sphinx_scopes_spec.rb +2 -0
  203. data/spec/acceptance/sql_deltas_spec.rb +2 -0
  204. data/spec/acceptance/support/database_cleaner.rb +2 -0
  205. data/spec/acceptance/support/sphinx_controller.rb +16 -5
  206. data/spec/acceptance/support/sphinx_helpers.rb +11 -0
  207. data/spec/acceptance/suspended_deltas_spec.rb +2 -0
  208. data/spec/internal/app/indices/admin_person_index.rb +2 -0
  209. data/spec/internal/app/indices/album_index.rb +2 -0
  210. data/spec/internal/app/indices/animal_index.rb +2 -0
  211. data/spec/internal/app/indices/article_index.rb +2 -0
  212. data/spec/internal/app/indices/bird_index.rb +2 -0
  213. data/spec/internal/app/indices/book_index.rb +2 -0
  214. data/spec/internal/app/indices/car_index.rb +2 -0
  215. data/spec/internal/app/indices/city_index.rb +2 -0
  216. data/spec/internal/app/indices/product_index.rb +2 -0
  217. data/spec/internal/app/indices/tee_index.rb +2 -0
  218. data/spec/internal/app/indices/user_index.rb +2 -0
  219. data/spec/internal/app/models/admin/person.rb +2 -0
  220. data/spec/internal/app/models/album.rb +2 -0
  221. data/spec/internal/app/models/animal.rb +2 -0
  222. data/spec/internal/app/models/article.rb +2 -0
  223. data/spec/internal/app/models/bird.rb +2 -0
  224. data/spec/internal/app/models/book.rb +2 -0
  225. data/spec/internal/app/models/car.rb +2 -0
  226. data/spec/internal/app/models/categorisation.rb +2 -0
  227. data/spec/internal/app/models/category.rb +2 -0
  228. data/spec/internal/app/models/city.rb +2 -0
  229. data/spec/internal/app/models/colour.rb +2 -0
  230. data/spec/internal/app/models/event.rb +2 -0
  231. data/spec/internal/app/models/flightless_bird.rb +2 -0
  232. data/spec/internal/app/models/genre.rb +2 -0
  233. data/spec/internal/app/models/hardcover.rb +2 -0
  234. data/spec/internal/app/models/mammal.rb +2 -0
  235. data/spec/internal/app/models/manufacturer.rb +2 -0
  236. data/spec/internal/app/models/product.rb +2 -0
  237. data/spec/internal/app/models/tag.rb +2 -0
  238. data/spec/internal/app/models/tagging.rb +2 -0
  239. data/spec/internal/app/models/tee.rb +2 -0
  240. data/spec/internal/app/models/tweet.rb +2 -0
  241. data/spec/internal/app/models/user.rb +2 -0
  242. data/spec/internal/db/schema.rb +2 -0
  243. data/spec/spec_helper.rb +4 -1
  244. data/spec/support/json_column.rb +3 -5
  245. data/spec/support/multi_schema.rb +2 -0
  246. data/spec/support/mysql.rb +25 -0
  247. data/spec/support/sphinx_yaml_helpers.rb +2 -0
  248. data/spec/thinking_sphinx/active_record/association_spec.rb +2 -0
  249. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +2 -0
  250. data/spec/thinking_sphinx/active_record/base_spec.rb +2 -0
  251. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +2 -0
  252. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +2 -0
  253. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +2 -0
  254. data/spec/thinking_sphinx/active_record/column_spec.rb +2 -0
  255. data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +2 -0
  256. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +2 -0
  257. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +2 -0
  258. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +2 -0
  259. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +2 -0
  260. data/spec/thinking_sphinx/active_record/field_spec.rb +2 -0
  261. data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +100 -79
  262. data/spec/thinking_sphinx/active_record/index_spec.rb +16 -1
  263. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +2 -0
  264. data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +2 -0
  265. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +2 -0
  266. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +2 -0
  267. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +2 -0
  268. data/spec/thinking_sphinx/attribute_types_spec.rb +2 -0
  269. data/spec/thinking_sphinx/commands/clear_real_time_spec.rb +46 -0
  270. data/spec/thinking_sphinx/commands/clear_sql_spec.rb +52 -0
  271. data/spec/thinking_sphinx/commands/configure_spec.rb +2 -0
  272. data/spec/thinking_sphinx/commands/index_real_time_spec.rb +33 -0
  273. data/spec/thinking_sphinx/commands/index_sql_spec.rb +86 -0
  274. data/spec/thinking_sphinx/commands/merge_and_update_spec.rb +106 -0
  275. data/spec/thinking_sphinx/commands/merge_spec.rb +48 -0
  276. data/spec/thinking_sphinx/commands/prepare_spec.rb +23 -0
  277. data/spec/thinking_sphinx/commands/start_detached_spec.rb +2 -0
  278. data/spec/thinking_sphinx/commands/stop_spec.rb +13 -4
  279. data/spec/thinking_sphinx/configuration/minimum_fields_spec.rb +2 -0
  280. data/spec/thinking_sphinx/configuration_spec.rb +132 -6
  281. data/spec/thinking_sphinx/connection_spec.rb +2 -0
  282. data/spec/thinking_sphinx/deletion_spec.rb +2 -0
  283. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +8 -1
  284. data/spec/thinking_sphinx/deltas_spec.rb +2 -0
  285. data/spec/thinking_sphinx/errors_spec.rb +2 -0
  286. data/spec/thinking_sphinx/excerpter_spec.rb +2 -0
  287. data/spec/thinking_sphinx/facet_search_spec.rb +8 -6
  288. data/spec/thinking_sphinx/hooks/guard_presence_spec.rb +30 -0
  289. data/spec/thinking_sphinx/index_set_spec.rb +2 -0
  290. data/spec/thinking_sphinx/index_spec.rb +2 -0
  291. data/spec/thinking_sphinx/interfaces/daemon_spec.rb +19 -11
  292. data/spec/thinking_sphinx/interfaces/real_time_spec.rb +43 -43
  293. data/spec/thinking_sphinx/interfaces/sql_spec.rb +76 -52
  294. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +2 -0
  295. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +2 -0
  296. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +2 -0
  297. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +2 -0
  298. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +2 -0
  299. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +2 -0
  300. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +2 -1
  301. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +2 -0
  302. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +2 -0
  303. data/spec/thinking_sphinx/middlewares/valid_options_spec.rb +2 -0
  304. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +2 -0
  305. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +2 -0
  306. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +2 -0
  307. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +3 -1
  308. data/spec/thinking_sphinx/rake_interface_spec.rb +10 -8
  309. data/spec/thinking_sphinx/real_time/attribute_spec.rb +2 -0
  310. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +2 -0
  311. data/spec/thinking_sphinx/real_time/field_spec.rb +2 -0
  312. data/spec/thinking_sphinx/real_time/index_spec.rb +14 -0
  313. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +2 -0
  314. data/spec/thinking_sphinx/real_time/transcribe_instance_spec.rb +35 -0
  315. data/spec/thinking_sphinx/real_time/transcriber_spec.rb +101 -0
  316. data/spec/thinking_sphinx/real_time/translator_spec.rb +17 -0
  317. data/spec/thinking_sphinx/scopes_spec.rb +2 -0
  318. data/spec/thinking_sphinx/search/glaze_spec.rb +2 -0
  319. data/spec/thinking_sphinx/search/query_spec.rb +2 -0
  320. data/spec/thinking_sphinx/search_spec.rb +2 -0
  321. data/spec/thinking_sphinx/wildcard_spec.rb +2 -0
  322. data/spec/thinking_sphinx_spec.rb +2 -0
  323. data/thinking-sphinx.gemspec +7 -5
  324. metadata +62 -25
  325. data/HISTORY +0 -326
  326. data/bin/literals +0 -9
  327. data/lib/thinking_sphinx/commands/index.rb +0 -11
  328. data/lib/thinking_sphinx/controller.rb +0 -12
  329. data/lib/thinking_sphinx/middlewares/attribute_typer.rb +0 -48
  330. data/lib/thinking_sphinx/middlewares/utf8.rb +0 -27
  331. data/lib/thinking_sphinx/sphinxql.rb +0 -23
  332. data/spec/thinking_sphinx/commands/index_spec.rb +0 -26
  333. data/spec/thinking_sphinx/middlewares/attribute_typer_spec.rb +0 -42
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define 'admin/person', :with => :active_record do
2
4
  indexes name
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :album, :with => :active_record, :primary_key => :integer_id, :delta => true do
2
4
  indexes name, artist
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :animal, :with => :active_record do
2
4
  indexes name
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :article, :with => :active_record do
2
4
  indexes title, content
3
5
  indexes user.name, :as => :user
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FlightlessBird
2
4
  ThinkingSphinx::Index.define :bird, :with => :active_record do
3
5
  indexes name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :book, :with => :active_record, :delta => true do
2
4
  indexes title, :sortable => true
3
5
  indexes author, :facet => true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :car, :with => :real_time do
2
4
  indexes name, :sortable => true
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :city, :with => :active_record do
2
4
  indexes name
3
5
  has lat, lng
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  multi_schema = MultiSchema.new
2
4
 
3
5
  ThinkingSphinx::Index.define :product, :with => :real_time do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :tee, :with => :active_record do
2
4
  index colour.name
3
5
  has colour_id, :facet => true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ThinkingSphinx::Index.define :user, :with => :active_record do
2
4
  indexes name
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::Person < ActiveRecord::Base
2
4
  self.table_name = 'admin_people'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Album < ActiveRecord::Base
2
4
  self.primary_key = :id
3
5
 
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Animal < ActiveRecord::Base
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Article < ActiveRecord::Base
2
4
  belongs_to :user
3
5
  has_many :taggings
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Bird < Animal
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Book < ActiveRecord::Base
2
4
  include ThinkingSphinx::Scopes
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Car < ActiveRecord::Base
2
4
  belongs_to :manufacturer
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Categorisation < ActiveRecord::Base
2
4
  belongs_to :category
3
5
  belongs_to :product
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Category < ActiveRecord::Base
2
4
  has_many :categorisations
3
5
  has_many :products, :through => :categorisations
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class City < ActiveRecord::Base
2
4
  scope :ordered, lambda { order(:name) }
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Colour < ActiveRecord::Base
2
4
  has_many :tees
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Event < ActiveRecord::Base
2
4
  belongs_to :eventable, :polymorphic => true
3
5
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class FlightlessBird < Bird
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Genre < ActiveRecord::Base
2
4
  #
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Hardcover < Book
2
4
  #
3
5
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Mammal < Animal
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Manufacturer < ActiveRecord::Base
2
4
  has_many :cars
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Product < ActiveRecord::Base
2
4
  has_many :categorisations
3
5
  has_many :categories, :through => :categorisations
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tag < ActiveRecord::Base
2
4
  has_many :taggings
3
5
  has_many :articles, :through => :taggings
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tagging < ActiveRecord::Base
2
4
  belongs_to :tag
3
5
  belongs_to :article
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tee < ActiveRecord::Base
2
4
  belongs_to :colour
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tweet < ActiveRecord::Base
2
4
  self.primary_key = :id
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class User < ActiveRecord::Base
2
4
  has_many :articles
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  create_table(:admin_people, :force => true) do |t|
3
5
  t.string :name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler'
3
5
 
@@ -6,13 +8,14 @@ Bundler.require :default, :development
6
8
  root = File.expand_path File.dirname(__FILE__)
7
9
  require "#{root}/support/multi_schema"
8
10
  require "#{root}/support/json_column"
11
+ require "#{root}/support/mysql"
9
12
  require 'thinking_sphinx/railtie'
10
13
 
11
14
  Combustion.initialize! :active_record
12
15
 
13
16
  MultiSchema.new.create 'thinking_sphinx'
14
17
 
15
- Dir["#{root}/support/**/*.rb"].each { |file| require file }
18
+ require "#{root}/support/sphinx_yaml_helpers"
16
19
 
17
20
  RSpec.configure do |config|
18
21
  # enable filtering for examples
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class JSONColumn
2
4
  include ActiveRecord::ConnectionAdapters
3
5
 
@@ -6,7 +8,7 @@ class JSONColumn
6
8
  end
7
9
 
8
10
  def call
9
- ruby? && sphinx? && postgresql? && column?
11
+ ruby? && postgresql? && column?
10
12
  end
11
13
 
12
14
  private
@@ -30,8 +32,4 @@ class JSONColumn
30
32
  def ruby?
31
33
  RUBY_PLATFORM != 'java'
32
34
  end
33
-
34
- def sphinx?
35
- ENV['SPHINX_VERSION'].nil? || ENV['SPHINX_VERSION'].to_f > 2.0
36
- end
37
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class MultiSchema
2
4
  def active?
3
5
  ENV['DATABASE'] == 'postgresql'
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # New versions of MySQL don't allow NULL values for primary keys, but old
4
+ # versions of Rails do. To use both at the same time, we need to update Rails'
5
+ # default primary key type to no longer have a default NULL value.
6
+ #
7
+ class PatchAdapter
8
+ def call
9
+ return unless using_mysql? && using_rails_pre_4_1?
10
+
11
+ require 'active_record/connection_adapters/abstract_mysql_adapter'
12
+ ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::
13
+ NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
14
+ end
15
+
16
+ def using_mysql?
17
+ ENV.fetch('DATABASE', 'mysql2') == 'mysql2'
18
+ end
19
+
20
+ def using_rails_pre_4_1?
21
+ ActiveRecord::VERSION::STRING.to_f < 4.1
22
+ end
23
+ end
24
+
25
+ PatchAdapter.new.call
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SphinxYamlHelpers
2
4
  def write_configuration(hash)
3
5
  allow(File).to receive_messages :read => {'test' => hash}.to_yaml, :exists? => true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Association do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module ActiveRecord
3
5
  class Attribute; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Base do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module ActiveRecord
3
5
  module Callbacks; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Column do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::ColumnSQLPresenter do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::DatabaseAdapters::AbstractAdapter do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::DatabaseAdapters do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::Field do
@@ -1,37 +1,66 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::ActiveRecord::FilterReflection do
4
6
  describe '.call' do
5
7
  let(:reflection) { double('Reflection', :macro => :has_some,
6
8
  :options => options, :active_record => double, :name => 'baz',
7
- :foreign_type => :foo_type, :class => reflection_klass) }
9
+ :foreign_type => :foo_type, :class => original_klass) }
8
10
  let(:options) { {:polymorphic => true} }
9
11
  let(:filtered_reflection) { double 'filtered reflection' }
10
- let(:reflection_klass) { double :new => filtered_reflection,
11
- :instance_method => initialize_method }
12
- let(:initialize_method) { double :arity => 4 }
12
+ let(:original_klass) { double }
13
+ let(:subclass) { double :include => true }
13
14
 
14
15
  before :each do
15
16
  allow(reflection.active_record).to receive_message_chain(:connection, :quote_column_name).
16
17
  and_return('"foo_type"')
18
+
19
+ if ActiveRecord::VERSION::STRING.to_f < 5.2
20
+ allow(original_klass).to receive(:new).and_return(filtered_reflection)
21
+ else
22
+ allow(Class).to receive(:new).with(original_klass).and_return(subclass)
23
+ allow(subclass).to receive(:new).and_return(filtered_reflection)
24
+ end
25
+ end
26
+
27
+ class ArgumentsWrapper
28
+ attr_reader :macro, :name, :scope, :options, :parent
29
+
30
+ def initialize(*arguments)
31
+ if ActiveRecord::VERSION::STRING.to_f < 4.0
32
+ @macro, @name, @options, @parent = arguments
33
+ elsif ActiveRecord::VERSION::STRING.to_f < 4.2
34
+ @macro, @name, @scope, @options, @parent = arguments
35
+ else
36
+ @name, @scope, @options, @parent = arguments
37
+ end
38
+ end
39
+ end
40
+
41
+ def reflection_klass
42
+ ActiveRecord::VERSION::STRING.to_f < 5.2 ? original_klass : subclass
43
+ end
44
+
45
+ def expected_reflection_arguments
46
+ expect(reflection_klass).to receive(:new) do |*arguments|
47
+ yield ArgumentsWrapper.new(*arguments)
48
+ end
17
49
  end
18
50
 
19
51
  it "uses the existing reflection's macro" do
20
- expect(reflection_klass).to receive(:new).
21
- with(:has_some, anything, anything, anything)
52
+ expect(reflection_klass).to receive(:new) do |macro, *args|
53
+ expect(macro).to eq(:has_some)
54
+ end
22
55
 
23
56
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
24
57
  reflection, 'foo_bar', 'Bar'
25
58
  )
26
- end unless defined?(ActiveRecord::Reflection::MacroReflection)
59
+ end if ActiveRecord::VERSION::STRING.to_f < 4.2
27
60
 
28
61
  it "uses the supplied name" do
29
- if defined?(ActiveRecord::Reflection::MacroReflection)
30
- expect(reflection_klass).to receive(:new).
31
- with('foo_bar', anything, anything, anything)
32
- else
33
- expect(reflection_klass).to receive(:new).
34
- with(anything, 'foo_bar', anything, anything)
62
+ expected_reflection_arguments do |wrapper|
63
+ expect(wrapper.name).to eq('foo_bar')
35
64
  end
36
65
 
37
66
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -40,12 +69,8 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
40
69
  end
41
70
 
42
71
  it "uses the existing reflection's parent" do
43
- if defined?(ActiveRecord::Reflection::MacroReflection)
44
- expect(reflection_klass).to receive(:new).
45
- with(anything, anything, anything, reflection.active_record)
46
- else
47
- expect(reflection_klass).to receive(:new).
48
- with(anything, anything, anything, reflection.active_record)
72
+ expected_reflection_arguments do |wrapper|
73
+ expect(wrapper.parent).to eq(reflection.active_record)
49
74
  end
50
75
 
51
76
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -54,14 +79,8 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
54
79
  end
55
80
 
56
81
  it "removes the polymorphic setting from the options" do
57
- if defined?(ActiveRecord::Reflection::MacroReflection)
58
- expect(reflection_klass).to receive(:new) do |name, scope, options, parent|
59
- expect(options[:polymorphic]).to be_nil
60
- end
61
- else
62
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
63
- expect(options[:polymorphic]).to be_nil
64
- end
82
+ expected_reflection_arguments do |wrapper|
83
+ expect(wrapper.options[:polymorphic]).to be_nil
65
84
  end
66
85
 
67
86
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -70,14 +89,8 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
70
89
  end
71
90
 
72
91
  it "adds the class name option" do
73
- if defined?(ActiveRecord::Reflection::MacroReflection)
74
- expect(reflection_klass).to receive(:new) do |name, scope, options, parent|
75
- expect(options[:class_name]).to eq('Bar')
76
- end
77
- else
78
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
79
- expect(options[:class_name]).to eq('Bar')
80
- end
92
+ expected_reflection_arguments do |wrapper|
93
+ expect(wrapper.options[:class_name]).to eq('Bar')
81
94
  end
82
95
 
83
96
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -86,14 +99,8 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
86
99
  end
87
100
 
88
101
  it "sets the foreign key if necessary" do
89
- if defined?(ActiveRecord::Reflection::MacroReflection)
90
- expect(reflection_klass).to receive(:new) do |name, scope, options, parent|
91
- expect(options[:foreign_key]).to eq('baz_id')
92
- end
93
- else
94
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
95
- expect(options[:foreign_key]).to eq('baz_id')
96
- end
102
+ expected_reflection_arguments do |wrapper|
103
+ expect(wrapper.options[:foreign_key]).to eq('baz_id')
97
104
  end
98
105
 
99
106
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -104,14 +111,8 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
104
111
  it "respects supplied foreign keys" do
105
112
  options[:foreign_key] = 'qux_id'
106
113
 
107
- if defined?(ActiveRecord::Reflection::MacroReflection)
108
- expect(reflection_klass).to receive(:new) do |name, scope, options, parent|
109
- expect(options[:foreign_key]).to eq('qux_id')
110
- end
111
- else
112
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
113
- expect(options[:foreign_key]).to eq('qux_id')
114
- end
114
+ expected_reflection_arguments do |wrapper|
115
+ expect(wrapper.options[:foreign_key]).to eq('qux_id')
115
116
  end
116
117
 
117
118
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
@@ -119,51 +120,71 @@ describe ThinkingSphinx::ActiveRecord::FilterReflection do
119
120
  )
120
121
  end
121
122
 
122
- it "sets conditions if there are none" do
123
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
124
- expect(options[:conditions]).to eq("::ts_join_alias::.\"foo_type\" = 'Bar'")
123
+ if ActiveRecord::VERSION::STRING.to_f < 4.0
124
+ it "sets conditions if there are none" do
125
+ expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
126
+ expect(options[:conditions]).to eq("::ts_join_alias::.\"foo_type\" = 'Bar'")
127
+ end
128
+
129
+ ThinkingSphinx::ActiveRecord::FilterReflection.call(
130
+ reflection, 'foo_bar', 'Bar'
131
+ )
125
132
  end
126
133
 
127
- ThinkingSphinx::ActiveRecord::FilterReflection.call(
128
- reflection, 'foo_bar', 'Bar'
129
- )
130
- end unless defined?(ActiveRecord::Reflection::MacroReflection)
134
+ it "appends to the conditions array" do
135
+ options[:conditions] = ['existing']
131
136
 
132
- it "appends to the conditions array" do
133
- options[:conditions] = ['existing']
137
+ expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
138
+ expect(options[:conditions]).to eq(['existing', "::ts_join_alias::.\"foo_type\" = 'Bar'"])
139
+ end
134
140
 
135
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
136
- expect(options[:conditions]).to eq(['existing', "::ts_join_alias::.\"foo_type\" = 'Bar'"])
141
+ ThinkingSphinx::ActiveRecord::FilterReflection.call(
142
+ reflection, 'foo_bar', 'Bar'
143
+ )
137
144
  end
138
145
 
139
- ThinkingSphinx::ActiveRecord::FilterReflection.call(
140
- reflection, 'foo_bar', 'Bar'
141
- )
142
- end unless defined?(ActiveRecord::Reflection::MacroReflection)
146
+ it "extends the conditions hash" do
147
+ options[:conditions] = {:x => :y}
143
148
 
144
- it "extends the conditions hash" do
145
- options[:conditions] = {:x => :y}
149
+ expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
150
+ expect(options[:conditions]).to eq({:x => :y, :foo_type => 'Bar'})
151
+ end
146
152
 
147
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
148
- expect(options[:conditions]).to eq({:x => :y, :foo_type => 'Bar'})
153
+ ThinkingSphinx::ActiveRecord::FilterReflection.call(
154
+ reflection, 'foo_bar', 'Bar'
155
+ )
149
156
  end
150
157
 
151
- ThinkingSphinx::ActiveRecord::FilterReflection.call(
152
- reflection, 'foo_bar', 'Bar'
153
- )
154
- end unless defined?(ActiveRecord::Reflection::MacroReflection)
158
+ it "appends to the conditions string" do
159
+ options[:conditions] = 'existing'
155
160
 
156
- it "appends to the conditions string" do
157
- options[:conditions] = 'existing'
161
+ expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
162
+ expect(options[:conditions]).to eq("existing AND ::ts_join_alias::.\"foo_type\" = 'Bar'")
163
+ end
158
164
 
159
- expect(reflection_klass).to receive(:new) do |macro, name, options, parent|
160
- expect(options[:conditions]).to eq("existing AND ::ts_join_alias::.\"foo_type\" = 'Bar'")
165
+ ThinkingSphinx::ActiveRecord::FilterReflection.call(
166
+ reflection, 'foo_bar', 'Bar'
167
+ )
161
168
  end
169
+ else
170
+ it "does not add a conditions option" do
171
+ expected_reflection_arguments do |wrapper|
172
+ expect(wrapper.options.keys).not_to include(:conditions)
173
+ end
174
+
175
+ ThinkingSphinx::ActiveRecord::FilterReflection.call(
176
+ reflection, 'foo_bar', 'Bar'
177
+ )
178
+ end
179
+ end
180
+
181
+ it "includes custom behaviour in the subclass" do
182
+ expect(subclass).to receive(:include).with(ThinkingSphinx::ActiveRecord::Depolymorph::OverriddenReflection::JoinConstraint)
162
183
 
163
184
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
164
185
  reflection, 'foo_bar', 'Bar'
165
186
  )
166
- end unless defined?(ActiveRecord::Reflection::MacroReflection)
187
+ end if ActiveRecord::VERSION::STRING.to_f > 5.1
167
188
 
168
189
  it "returns the new reflection" do
169
190
  expect(ThinkingSphinx::ActiveRecord::FilterReflection.call(