thinking-sphinx 3.4.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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(