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
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe ThinkingSphinx::Interfaces::SQL do
@@ -8,8 +10,13 @@ RSpec.describe ThinkingSphinx::Interfaces::SQL do
8
10
  :render => true, :indices_location => '/path/to/indices',
9
11
  :preload_indices => true }
10
12
  let(:controller) { double 'controller', :running? => true }
13
+ let(:commander) { double :call => true }
11
14
  let(:stream) { double :puts => nil }
12
15
 
16
+ before :each do
17
+ stub_const "ThinkingSphinx::Commander", commander
18
+ end
19
+
13
20
  describe '#clear' do
14
21
  let(:plain_index) { double(:type => 'plain') }
15
22
  let(:users_index) { double(:name => 'users', :type => 'rt', :render => true,
@@ -19,52 +26,41 @@ RSpec.describe ThinkingSphinx::Interfaces::SQL do
19
26
 
20
27
  before :each do
21
28
  allow(configuration).to receive_messages(
22
- :indices => [plain_index, users_index, parts_index],
23
- :searchd => double(:binlog_path => '/path/to/binlog')
29
+ :indices => [plain_index, users_index, parts_index]
24
30
  )
25
-
26
- allow(Dir).to receive(:[]).with('/path/to/my/index/users.*').
27
- and_return(['users.a', 'users.b'])
28
- allow(Dir).to receive(:[]).with('/path/to/my/index/parts.*').
29
- and_return(['parts.a', 'parts.b'])
30
-
31
- allow(FileUtils).to receive_messages :mkdir_p => true, :rm_r => true,
32
- :rm => true
33
- allow(File).to receive_messages :exists? => true
34
- end
35
-
36
- it 'finds each file for real-time indices' do
37
- expect(Dir).to receive(:[]).with('/path/to/my/index/users.*').
38
- and_return([])
39
-
40
- interface.clear
41
31
  end
42
32
 
43
- it "removes the directory for the binlog files" do
44
- expect(FileUtils).to receive(:rm_r).with('/path/to/binlog')
33
+ it 'prepares the indices' do
34
+ expect(commander).to receive(:call).with(
35
+ :prepare, configuration, {}, stream
36
+ )
45
37
 
46
38
  interface.clear
47
39
  end
48
40
 
49
- it "removes each file for real-time indices" do
50
- expect(FileUtils).to receive(:rm).with('users.a')
51
- expect(FileUtils).to receive(:rm).with('users.b')
52
- expect(FileUtils).to receive(:rm).with('parts.a')
53
- expect(FileUtils).to receive(:rm).with('parts.b')
41
+ it 'invokes the clear command' do
42
+ expect(commander).to receive(:call).with(
43
+ :clear_real_time,
44
+ configuration,
45
+ {:indices => [users_index, parts_index]},
46
+ stream
47
+ )
54
48
 
55
49
  interface.clear
56
50
  end
57
51
 
58
- context "with options[:index_filter]" do
52
+ context "with options[:index_names]" do
59
53
  let(:interface) { ThinkingSphinx::Interfaces::RealTime.new(
60
- configuration, {:index_filter => 'users'}, stream
54
+ configuration, {:index_names => ['users']}, stream
61
55
  ) }
62
56
 
63
57
  it "removes each file for real-time indices that match :index_filter" do
64
- expect(FileUtils).to receive(:rm).with('users.a')
65
- expect(FileUtils).to receive(:rm).with('users.b')
66
- expect(FileUtils).not_to receive(:rm).with('parts.a')
67
- expect(FileUtils).not_to receive(:rm).with('parts.b')
58
+ expect(commander).to receive(:call).with(
59
+ :clear_real_time,
60
+ configuration,
61
+ {:index_names => ['users'], :indices => [users_index]},
62
+ stream
63
+ )
68
64
 
69
65
  interface.clear
70
66
  end
@@ -80,27 +76,31 @@ RSpec.describe ThinkingSphinx::Interfaces::SQL do
80
76
  allow(configuration).to receive_messages(
81
77
  :indices => [plain_index, users_index, parts_index]
82
78
  )
83
-
84
- allow(FileUtils).to receive_messages :mkdir_p => true
85
79
  end
86
80
 
87
- it 'populates each real-index' do
88
- expect(ThinkingSphinx::RealTime::Populator).to receive(:populate).with(users_index)
89
- expect(ThinkingSphinx::RealTime::Populator).to receive(:populate).with(parts_index)
90
- expect(ThinkingSphinx::RealTime::Populator).not_to receive(:populate).with(plain_index)
81
+ it 'invokes the index command with real-time indices' do
82
+ expect(commander).to receive(:call).with(
83
+ :index_real_time,
84
+ configuration,
85
+ {:indices => [users_index, parts_index]},
86
+ stream
87
+ )
91
88
 
92
89
  interface.index
93
90
  end
94
91
 
95
- context "with options[:index_filter]" do
92
+ context "with options[:index_names]" do
96
93
  let(:interface) { ThinkingSphinx::Interfaces::RealTime.new(
97
- configuration, {:index_filter => 'users'}, stream
94
+ configuration, {:index_names => ['users']}, stream
98
95
  ) }
99
96
 
100
- it 'populates each real-index that matches :index_filter' do
101
- expect(ThinkingSphinx::RealTime::Populator).to receive(:populate).with(users_index)
102
- expect(ThinkingSphinx::RealTime::Populator).not_to receive(:populate).with(parts_index)
103
- expect(ThinkingSphinx::RealTime::Populator).not_to receive(:populate).with(plain_index)
97
+ it 'invokes the index command for matching indices' do
98
+ expect(commander).to receive(:call).with(
99
+ :index_real_time,
100
+ configuration,
101
+ {:index_names => ['users'], :indices => [users_index]},
102
+ stream
103
+ )
104
104
 
105
105
  interface.index
106
106
  end
@@ -1,98 +1,122 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe ThinkingSphinx::Interfaces::SQL do
4
6
  let(:interface) { ThinkingSphinx::Interfaces::SQL.new(
5
7
  configuration, {:verbose => true}, stream
6
8
  ) }
9
+ let(:commander) { double :call => true }
7
10
  let(:configuration) { double 'configuration', :preload_indices => true,
8
- :render => true, :indices => [double(:index, :type => 'plain')],
9
- :indices_location => '/path/to/indices' }
11
+ :render => true, :indices => [double(:index, :type => 'plain')] }
10
12
  let(:stream) { double :puts => nil }
11
13
 
14
+ before :each do
15
+ stub_const 'ThinkingSphinx::Commander', commander
16
+ end
17
+
12
18
  describe '#clear' do
13
- let(:users_index) { double(:name => 'users', :type => 'plain',
14
- :render => true, :path => '/path/to/my/index/users') }
15
- let(:parts_index) { double(:name => 'users', :type => 'plain',
16
- :render => true, :path => '/path/to/my/index/parts') }
19
+ let(:users_index) { double(:type => 'plain') }
20
+ let(:parts_index) { double(:type => 'plain') }
17
21
  let(:rt_index) { double(:type => 'rt') }
18
22
 
19
23
  before :each do
20
- allow(configuration).to receive_messages(
21
- :indices => [users_index, parts_index, rt_index]
22
- )
23
-
24
- allow(Dir).to receive(:[]).with('/path/to/my/index/users.*').
25
- and_return(['users.a', 'users.b'])
26
- allow(Dir).to receive(:[]).with('/path/to/my/index/parts.*').
27
- and_return(['parts.a', 'parts.b'])
28
-
29
- allow(FileUtils).to receive_messages :mkdir_p => true, :rm_r => true,
30
- :rm => true
31
- allow(File).to receive_messages :exists? => true
32
- end
33
-
34
- it 'finds each file for sql-backed indices' do
35
- expect(Dir).to receive(:[]).with('/path/to/my/index/users.*').
36
- and_return([])
37
-
38
- interface.clear
24
+ allow(configuration).to receive(:indices).
25
+ and_return([users_index, parts_index, rt_index])
39
26
  end
40
27
 
41
- it "removes each file for real-time indices" do
42
- expect(FileUtils).to receive(:rm).with('users.a')
43
- expect(FileUtils).to receive(:rm).with('users.b')
44
- expect(FileUtils).to receive(:rm).with('parts.a')
45
- expect(FileUtils).to receive(:rm).with('parts.b')
28
+ it "invokes the clear_sql command" do
29
+ expect(commander).to receive(:call).with(
30
+ :clear_sql,
31
+ configuration,
32
+ {:verbose => true, :indices => [users_index, parts_index]},
33
+ stream
34
+ )
46
35
 
47
36
  interface.clear
48
37
  end
49
38
  end
50
39
 
51
40
  describe '#index' do
52
- let(:index_command) { double :call => true }
53
- let(:configure_command) { double :call => true }
54
-
55
- before :each do
56
- stub_const 'ThinkingSphinx::Commands::Index', index_command
57
- stub_const 'ThinkingSphinx::Commands::Configure', configure_command
41
+ it "invokes the prepare command" do
42
+ expect(commander).to receive(:call).with(
43
+ :prepare, configuration, {:verbose => true}, stream
44
+ )
58
45
 
59
- allow(ThinkingSphinx).to receive_messages :before_index_hooks => []
60
- allow(FileUtils).to receive_messages :mkdir_p => true
46
+ interface.index
61
47
  end
62
48
 
63
49
  it "renders the configuration to a file by default" do
64
- expect(configure_command).to receive(:call)
50
+ expect(commander).to receive(:call).with(
51
+ :configure, configuration, {:verbose => true}, stream
52
+ )
65
53
 
66
54
  interface.index
67
55
  end
68
56
 
69
57
  it "does not render the configuration if requested" do
70
- expect(configure_command).not_to receive(:call)
58
+ expect(commander).not_to receive(:call).with(
59
+ :configure, configuration, {:verbose => true}, stream
60
+ )
71
61
 
72
62
  interface.index false
73
63
  end
74
64
 
75
- it "creates the directory for the index files" do
76
- expect(FileUtils).to receive(:mkdir_p).with('/path/to/indices')
65
+ it "executes the index command" do
66
+ expect(commander).to receive(:call).with(
67
+ :index_sql, configuration, {:verbose => true, :indices => nil}, stream
68
+ )
77
69
 
78
70
  interface.index
79
71
  end
80
72
 
81
- it "calls all registered hooks" do
82
- called = false
83
- ThinkingSphinx.before_index_hooks << Proc.new { called = true }
73
+ context "with options[:index_names]" do
74
+ let(:users_index) { double(:name => 'users', :type => 'plain') }
75
+ let(:parts_index) { double(:name => 'parts', :type => 'plain') }
76
+ let(:rt_index) { double(:type => 'rt') }
77
+ let(:interface) { ThinkingSphinx::Interfaces::SQL.new(
78
+ configuration, {:index_names => ['users']}, stream
79
+ ) }
80
+
81
+ before :each do
82
+ allow(configuration).to receive(:indices).
83
+ and_return([users_index, parts_index, rt_index])
84
+ end
85
+
86
+ it 'invokes the index command for matching indices' do
87
+ expect(commander).to receive(:call).with(
88
+ :index_sql,
89
+ configuration,
90
+ {:index_names => ['users'], :indices => ['users']},
91
+ stream
92
+ )
93
+
94
+ interface.index
95
+ end
96
+ end
97
+ end
84
98
 
85
- interface.index
99
+ describe '#merge' do
100
+ it "invokes the merge command" do
101
+ expect(commander).to receive(:call).with(
102
+ :merge_and_update, configuration, {:verbose => true}, stream
103
+ )
86
104
 
87
- expect(called).to be_truthy
105
+ interface.merge
88
106
  end
89
107
 
90
- it "executes the index command" do
91
- expect(index_command).to receive(:call).with(
92
- configuration, {:verbose => true}, stream
93
- )
108
+ context "with options[:index_names]" do
109
+ let(:interface) { ThinkingSphinx::Interfaces::SQL.new(
110
+ configuration, {:index_names => ['users']}, stream
111
+ ) }
94
112
 
95
- interface.index
113
+ it 'invokes the merge command with the index_names option' do
114
+ expect(commander).to receive(:call).with(
115
+ :merge_and_update, configuration, {:index_names => ['users']}, stream
116
+ )
117
+
118
+ interface.merge
119
+ end
96
120
  end
97
121
  end
98
122
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Masks; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Masks; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  class Search; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  end
@@ -16,7 +18,6 @@ require 'active_support/core_ext/string/inflections'
16
18
  require 'thinking_sphinx/middlewares/middleware'
17
19
  require 'thinking_sphinx/middlewares/sphinxql'
18
20
  require 'thinking_sphinx/errors'
19
- require 'thinking_sphinx/sphinxql'
20
21
 
21
22
  describe ThinkingSphinx::Middlewares::SphinxQL do
22
23
  let(:app) { double('app', :call => true) }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  class Search; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Middlewares; end
3
5
  class Search; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe ThinkingSphinx::Middlewares::ValidOptions do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Panes; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Panes; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Panes; end
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThinkingSphinx
2
4
  module Panes; end
3
5
  end
@@ -12,7 +14,7 @@ describe ThinkingSphinx::Panes::WeightPane do
12
14
 
13
15
  describe '#weight' do
14
16
  it "returns the object's weight by default" do
15
- raw[ThinkingSphinx::SphinxQL.weight[:column]] = 101
17
+ raw["weight()"] = 101
16
18
 
17
19
  expect(pane.weight).to eq(101)
18
20
  end
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ThinkingSphinx::RakeInterface do
4
- let(:interface) { ThinkingSphinx::RakeInterface.new }
5
-
6
- describe '#configure' do
7
- let(:command) { double 'command', :call => true }
6
+ let(:interface) { ThinkingSphinx::RakeInterface.new }
7
+ let(:commander) { double :call => nil }
8
8
 
9
- before :each do
10
- stub_const 'ThinkingSphinx::Commands::Configure', command
11
- end
9
+ before :each do
10
+ stub_const 'ThinkingSphinx::Commander', commander
11
+ end
12
12
 
13
+ describe '#configure' do
13
14
  it 'sends the configure command' do
14
- expect(command).to receive(:call)
15
+ expect(commander).to receive(:call).
16
+ with(:configure, anything, {:verbose => true})
15
17
 
16
18
  interface.configure
17
19
  end