thinking-sphinx 2.1.0 → 3.0.0.pre

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 (352) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +13 -0
  3. data/Appraisals +7 -0
  4. data/Gemfile +10 -0
  5. data/HISTORY +2 -267
  6. data/LICENCE +1 -1
  7. data/README.textile +194 -226
  8. data/Rakefile +24 -0
  9. data/gemfiles/.gitignore +1 -0
  10. data/gemfiles/rails_3_1.gemfile +11 -0
  11. data/gemfiles/rails_3_2.gemfile +11 -0
  12. data/lib/thinking-sphinx.rb +1 -1
  13. data/lib/thinking_sphinx.rb +34 -292
  14. data/lib/thinking_sphinx/active_record.rb +22 -383
  15. data/lib/thinking_sphinx/active_record/association.rb +9 -0
  16. data/lib/thinking_sphinx/active_record/association_proxy.rb +68 -0
  17. data/lib/thinking_sphinx/active_record/associations.rb +68 -0
  18. data/lib/thinking_sphinx/active_record/attribute.rb +20 -0
  19. data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +32 -0
  20. data/lib/thinking_sphinx/active_record/attribute/type.rb +79 -0
  21. data/lib/thinking_sphinx/active_record/attribute/values.rb +18 -0
  22. data/lib/thinking_sphinx/active_record/base.rb +36 -0
  23. data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +31 -0
  24. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +55 -0
  25. data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +59 -0
  26. data/lib/thinking_sphinx/active_record/column.rb +30 -0
  27. data/lib/thinking_sphinx/active_record/database_adapters.rb +51 -0
  28. data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +13 -0
  29. data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +23 -0
  30. data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +25 -0
  31. data/lib/thinking_sphinx/active_record/field.rb +11 -0
  32. data/lib/thinking_sphinx/active_record/index.rb +55 -0
  33. data/lib/thinking_sphinx/active_record/interpreter.rb +47 -0
  34. data/lib/thinking_sphinx/active_record/log_subscriber.rb +10 -58
  35. data/lib/thinking_sphinx/active_record/property.rb +28 -0
  36. data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +60 -0
  37. data/lib/thinking_sphinx/active_record/sql_builder.rb +159 -0
  38. data/lib/thinking_sphinx/active_record/sql_source.rb +138 -0
  39. data/lib/thinking_sphinx/active_record/sql_source/template.rb +46 -0
  40. data/lib/thinking_sphinx/batched_search.rb +26 -0
  41. data/lib/thinking_sphinx/callbacks.rb +15 -0
  42. data/lib/thinking_sphinx/configuration.rb +80 -331
  43. data/lib/thinking_sphinx/configuration/consistent_ids.rb +31 -0
  44. data/lib/thinking_sphinx/configuration/defaults.rb +5 -0
  45. data/lib/thinking_sphinx/core.rb +6 -0
  46. data/lib/thinking_sphinx/core/index.rb +68 -0
  47. data/lib/thinking_sphinx/core/interpreter.rb +19 -0
  48. data/lib/thinking_sphinx/deltas.rb +35 -26
  49. data/lib/thinking_sphinx/deltas/default_delta.rb +56 -56
  50. data/lib/thinking_sphinx/excerpter.rb +23 -21
  51. data/lib/thinking_sphinx/facet.rb +22 -127
  52. data/lib/thinking_sphinx/facet_search.rb +95 -162
  53. data/lib/thinking_sphinx/index.rb +39 -143
  54. data/lib/thinking_sphinx/index_set.rb +51 -0
  55. data/lib/thinking_sphinx/masks.rb +8 -0
  56. data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +23 -0
  57. data/lib/thinking_sphinx/masks/pagination_mask.rb +60 -0
  58. data/lib/thinking_sphinx/masks/scopes_mask.rb +35 -0
  59. data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +11 -0
  60. data/lib/thinking_sphinx/middlewares.rb +36 -0
  61. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +73 -0
  62. data/lib/thinking_sphinx/middlewares/geographer.rb +53 -0
  63. data/lib/thinking_sphinx/middlewares/glazier.rb +39 -0
  64. data/lib/thinking_sphinx/middlewares/ids_only.rb +13 -0
  65. data/lib/thinking_sphinx/middlewares/inquirer.rb +62 -0
  66. data/lib/thinking_sphinx/middlewares/middleware.rb +9 -0
  67. data/lib/thinking_sphinx/middlewares/sphinxql.rb +149 -0
  68. data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +45 -0
  69. data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +46 -0
  70. data/lib/thinking_sphinx/panes.rb +8 -0
  71. data/lib/thinking_sphinx/panes/attributes_pane.rb +9 -0
  72. data/lib/thinking_sphinx/panes/distance_pane.rb +13 -0
  73. data/lib/thinking_sphinx/panes/excerpts_pane.rb +37 -0
  74. data/lib/thinking_sphinx/panes/weight_pane.rb +9 -0
  75. data/lib/thinking_sphinx/railtie.rb +6 -40
  76. data/lib/thinking_sphinx/rake_interface.rb +47 -0
  77. data/lib/thinking_sphinx/real_time.rb +11 -0
  78. data/lib/thinking_sphinx/real_time/attribute.rb +5 -0
  79. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +48 -0
  80. data/lib/thinking_sphinx/real_time/field.rb +3 -0
  81. data/lib/thinking_sphinx/real_time/index.rb +47 -0
  82. data/lib/thinking_sphinx/real_time/index/template.rb +33 -0
  83. data/lib/thinking_sphinx/real_time/interpreter.rb +23 -0
  84. data/lib/thinking_sphinx/real_time/property.rb +16 -0
  85. data/lib/thinking_sphinx/scopes.rb +22 -0
  86. data/lib/thinking_sphinx/search.rb +90 -1028
  87. data/lib/thinking_sphinx/search/batch_inquirer.rb +27 -0
  88. data/lib/thinking_sphinx/search/context.rb +26 -0
  89. data/lib/thinking_sphinx/search/glaze.rb +32 -0
  90. data/lib/thinking_sphinx/search/merger.rb +24 -0
  91. data/lib/thinking_sphinx/search/query.rb +43 -0
  92. data/lib/thinking_sphinx/search/stale_ids_exception.rb +11 -0
  93. data/lib/thinking_sphinx/search/translator.rb +50 -0
  94. data/lib/thinking_sphinx/tasks.rb +22 -125
  95. data/lib/thinking_sphinx/test.rb +9 -19
  96. data/sketchpad.rb +58 -0
  97. data/spec/acceptance/association_scoping_spec.rb +23 -0
  98. data/spec/acceptance/attribute_access_spec.rb +39 -0
  99. data/spec/acceptance/attribute_updates_spec.rb +16 -0
  100. data/spec/acceptance/batch_searching_spec.rb +21 -0
  101. data/spec/acceptance/big_integers_spec.rb +27 -0
  102. data/spec/acceptance/excerpts_spec.rb +14 -0
  103. data/spec/acceptance/facets_spec.rb +122 -0
  104. data/spec/acceptance/geosearching_spec.rb +39 -0
  105. data/spec/acceptance/grouping_by_attributes_spec.rb +77 -0
  106. data/spec/acceptance/paginating_search_results_spec.rb +24 -0
  107. data/spec/acceptance/remove_deleted_records_spec.rb +23 -0
  108. data/spec/acceptance/search_counts_spec.rb +18 -0
  109. data/spec/acceptance/search_for_just_ids_spec.rb +19 -0
  110. data/spec/acceptance/searching_across_models_spec.rb +28 -0
  111. data/spec/acceptance/searching_on_fields_spec.rb +56 -0
  112. data/spec/acceptance/searching_with_filters_spec.rb +109 -0
  113. data/spec/acceptance/searching_with_sti_spec.rb +55 -0
  114. data/spec/acceptance/searching_within_a_model_spec.rb +52 -0
  115. data/spec/acceptance/sorting_search_results_spec.rb +41 -0
  116. data/spec/acceptance/spec_helper.rb +4 -0
  117. data/spec/acceptance/specifying_sql_spec.rb +62 -0
  118. data/spec/acceptance/sphinx_scopes_spec.rb +49 -0
  119. data/spec/acceptance/sql_deltas_spec.rb +43 -0
  120. data/spec/acceptance/support/database_cleaner.rb +11 -0
  121. data/spec/acceptance/support/sphinx_controller.rb +39 -0
  122. data/spec/acceptance/support/sphinx_helpers.rb +24 -0
  123. data/spec/acceptance/suspended_deltas_spec.rb +20 -0
  124. data/spec/internal/.gitignore +1 -0
  125. data/spec/internal/app/indices/animal_index.rb +3 -0
  126. data/spec/internal/app/indices/article_index.rb +24 -0
  127. data/spec/internal/app/indices/book_index.rb +8 -0
  128. data/spec/internal/app/indices/city_index.rb +6 -0
  129. data/spec/internal/app/indices/product_index.rb +3 -0
  130. data/spec/internal/app/indices/tee_index.rb +4 -0
  131. data/spec/internal/app/indices/user_index.rb +5 -0
  132. data/spec/internal/app/models/animal.rb +2 -0
  133. data/spec/internal/app/models/article.rb +5 -0
  134. data/spec/internal/app/models/bird.rb +2 -0
  135. data/spec/internal/app/models/book.rb +11 -0
  136. data/spec/internal/app/models/city.rb +2 -0
  137. data/spec/internal/app/models/colour.rb +3 -0
  138. data/spec/internal/app/models/flightless_bird.rb +2 -0
  139. data/spec/internal/app/models/mammal.rb +2 -0
  140. data/spec/internal/app/models/product.rb +3 -0
  141. data/spec/internal/app/models/tag.rb +4 -0
  142. data/{features/thinking_sphinx → spec/internal/app}/models/tagging.rb +1 -1
  143. data/spec/internal/app/models/tee.rb +3 -0
  144. data/spec/internal/app/models/tweet.rb +3 -0
  145. data/spec/internal/app/models/user.rb +3 -0
  146. data/spec/internal/config/database.yml +5 -0
  147. data/spec/internal/db/schema.rb +65 -0
  148. data/spec/internal/log/.gitignore +1 -0
  149. data/spec/spec_helper.rb +8 -49
  150. data/spec/support/sphinx_yaml_helpers.rb +9 -0
  151. data/spec/thinking_sphinx/active_record/association_spec.rb +12 -0
  152. data/spec/thinking_sphinx/active_record/associations_spec.rb +184 -0
  153. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +147 -0
  154. data/spec/thinking_sphinx/active_record/base_spec.rb +61 -0
  155. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +80 -0
  156. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +147 -0
  157. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +69 -0
  158. data/spec/thinking_sphinx/active_record/column_spec.rb +47 -0
  159. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +31 -0
  160. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +43 -0
  161. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +45 -0
  162. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +108 -0
  163. data/spec/thinking_sphinx/active_record/field_spec.rb +36 -0
  164. data/spec/thinking_sphinx/active_record/index_spec.rb +208 -0
  165. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +293 -0
  166. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +162 -0
  167. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +666 -0
  168. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +401 -0
  169. data/spec/thinking_sphinx/configuration_spec.rb +264 -171
  170. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +116 -0
  171. data/spec/thinking_sphinx/deltas_spec.rb +58 -0
  172. data/spec/thinking_sphinx/excerpter_spec.rb +40 -38
  173. data/spec/thinking_sphinx/facet_search_spec.rb +49 -151
  174. data/spec/thinking_sphinx/index_set_spec.rb +68 -0
  175. data/spec/thinking_sphinx/index_spec.rb +91 -155
  176. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +121 -0
  177. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +68 -0
  178. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +132 -0
  179. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +89 -0
  180. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +62 -0
  181. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +55 -0
  182. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +271 -0
  183. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +47 -0
  184. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +91 -0
  185. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +21 -0
  186. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +41 -0
  187. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
  188. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +20 -0
  189. data/spec/thinking_sphinx/rake_interface_spec.rb +147 -0
  190. data/spec/thinking_sphinx/real_time/attribute_spec.rb +62 -0
  191. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +76 -0
  192. data/spec/thinking_sphinx/real_time/field_spec.rb +54 -0
  193. data/spec/thinking_sphinx/real_time/index_spec.rb +154 -0
  194. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +147 -0
  195. data/spec/thinking_sphinx/scopes_spec.rb +38 -0
  196. data/spec/thinking_sphinx/search/glaze_spec.rb +55 -0
  197. data/spec/thinking_sphinx/search/query_spec.rb +46 -0
  198. data/spec/thinking_sphinx/search_spec.rb +65 -1357
  199. data/spec/thinking_sphinx_spec.rb +19 -182
  200. data/thinking-sphinx.gemspec +33 -0
  201. metadata +318 -431
  202. data/features/abstract_inheritance.feature +0 -10
  203. data/features/alternate_primary_key.feature +0 -27
  204. data/features/attribute_transformation.feature +0 -22
  205. data/features/attribute_updates.feature +0 -79
  206. data/features/deleting_instances.feature +0 -70
  207. data/features/direct_attributes.feature +0 -11
  208. data/features/excerpts.feature +0 -21
  209. data/features/extensible_delta_indexing.feature +0 -9
  210. data/features/facets.feature +0 -88
  211. data/features/facets_across_model.feature +0 -29
  212. data/features/field_sorting.feature +0 -18
  213. data/features/handling_edits.feature +0 -97
  214. data/features/retry_stale_indexes.feature +0 -24
  215. data/features/searching_across_models.feature +0 -20
  216. data/features/searching_by_index.feature +0 -41
  217. data/features/searching_by_model.feature +0 -175
  218. data/features/searching_with_find_arguments.feature +0 -56
  219. data/features/sphinx_detection.feature +0 -25
  220. data/features/sphinx_scopes.feature +0 -68
  221. data/features/step_definitions/alpha_steps.rb +0 -16
  222. data/features/step_definitions/beta_steps.rb +0 -7
  223. data/features/step_definitions/common_steps.rb +0 -205
  224. data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
  225. data/features/step_definitions/facet_steps.rb +0 -96
  226. data/features/step_definitions/find_arguments_steps.rb +0 -36
  227. data/features/step_definitions/gamma_steps.rb +0 -15
  228. data/features/step_definitions/scope_steps.rb +0 -19
  229. data/features/step_definitions/search_steps.rb +0 -94
  230. data/features/step_definitions/sphinx_steps.rb +0 -35
  231. data/features/sti_searching.feature +0 -19
  232. data/features/support/env.rb +0 -24
  233. data/features/support/lib/generic_delta_handler.rb +0 -8
  234. data/features/thinking_sphinx/database.example.yml +0 -3
  235. data/features/thinking_sphinx/db/.gitignore +0 -1
  236. data/features/thinking_sphinx/db/fixtures/alphas.rb +0 -8
  237. data/features/thinking_sphinx/db/fixtures/authors.rb +0 -1
  238. data/features/thinking_sphinx/db/fixtures/betas.rb +0 -11
  239. data/features/thinking_sphinx/db/fixtures/boxes.rb +0 -9
  240. data/features/thinking_sphinx/db/fixtures/categories.rb +0 -1
  241. data/features/thinking_sphinx/db/fixtures/cats.rb +0 -3
  242. data/features/thinking_sphinx/db/fixtures/comments.rb +0 -24
  243. data/features/thinking_sphinx/db/fixtures/developers.rb +0 -31
  244. data/features/thinking_sphinx/db/fixtures/dogs.rb +0 -3
  245. data/features/thinking_sphinx/db/fixtures/extensible_betas.rb +0 -10
  246. data/features/thinking_sphinx/db/fixtures/foxes.rb +0 -3
  247. data/features/thinking_sphinx/db/fixtures/gammas.rb +0 -10
  248. data/features/thinking_sphinx/db/fixtures/music.rb +0 -4
  249. data/features/thinking_sphinx/db/fixtures/people.rb +0 -1001
  250. data/features/thinking_sphinx/db/fixtures/post_keywords.txt +0 -1
  251. data/features/thinking_sphinx/db/fixtures/posts.rb +0 -10
  252. data/features/thinking_sphinx/db/fixtures/robots.rb +0 -8
  253. data/features/thinking_sphinx/db/fixtures/tags.rb +0 -27
  254. data/features/thinking_sphinx/db/migrations/create_alphas.rb +0 -8
  255. data/features/thinking_sphinx/db/migrations/create_animals.rb +0 -5
  256. data/features/thinking_sphinx/db/migrations/create_authors.rb +0 -3
  257. data/features/thinking_sphinx/db/migrations/create_authors_posts.rb +0 -6
  258. data/features/thinking_sphinx/db/migrations/create_betas.rb +0 -5
  259. data/features/thinking_sphinx/db/migrations/create_boxes.rb +0 -5
  260. data/features/thinking_sphinx/db/migrations/create_categories.rb +0 -3
  261. data/features/thinking_sphinx/db/migrations/create_comments.rb +0 -10
  262. data/features/thinking_sphinx/db/migrations/create_developers.rb +0 -7
  263. data/features/thinking_sphinx/db/migrations/create_extensible_betas.rb +0 -5
  264. data/features/thinking_sphinx/db/migrations/create_gammas.rb +0 -3
  265. data/features/thinking_sphinx/db/migrations/create_genres.rb +0 -3
  266. data/features/thinking_sphinx/db/migrations/create_music.rb +0 -6
  267. data/features/thinking_sphinx/db/migrations/create_people.rb +0 -13
  268. data/features/thinking_sphinx/db/migrations/create_posts.rb +0 -6
  269. data/features/thinking_sphinx/db/migrations/create_robots.rb +0 -4
  270. data/features/thinking_sphinx/db/migrations/create_taggings.rb +0 -5
  271. data/features/thinking_sphinx/db/migrations/create_tags.rb +0 -4
  272. data/features/thinking_sphinx/models/alpha.rb +0 -23
  273. data/features/thinking_sphinx/models/andrew.rb +0 -17
  274. data/features/thinking_sphinx/models/animal.rb +0 -5
  275. data/features/thinking_sphinx/models/author.rb +0 -3
  276. data/features/thinking_sphinx/models/beta.rb +0 -13
  277. data/features/thinking_sphinx/models/box.rb +0 -8
  278. data/features/thinking_sphinx/models/cat.rb +0 -3
  279. data/features/thinking_sphinx/models/category.rb +0 -4
  280. data/features/thinking_sphinx/models/comment.rb +0 -10
  281. data/features/thinking_sphinx/models/developer.rb +0 -21
  282. data/features/thinking_sphinx/models/dog.rb +0 -3
  283. data/features/thinking_sphinx/models/extensible_beta.rb +0 -9
  284. data/features/thinking_sphinx/models/fox.rb +0 -5
  285. data/features/thinking_sphinx/models/gamma.rb +0 -5
  286. data/features/thinking_sphinx/models/genre.rb +0 -3
  287. data/features/thinking_sphinx/models/medium.rb +0 -5
  288. data/features/thinking_sphinx/models/music.rb +0 -10
  289. data/features/thinking_sphinx/models/person.rb +0 -24
  290. data/features/thinking_sphinx/models/post.rb +0 -22
  291. data/features/thinking_sphinx/models/robot.rb +0 -12
  292. data/features/thinking_sphinx/models/tag.rb +0 -3
  293. data/lib/cucumber/thinking_sphinx/external_world.rb +0 -12
  294. data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -137
  295. data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -28
  296. data/lib/thinking_sphinx/action_controller.rb +0 -31
  297. data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -54
  298. data/lib/thinking_sphinx/active_record/collection_proxy.rb +0 -47
  299. data/lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb +0 -27
  300. data/lib/thinking_sphinx/active_record/delta.rb +0 -67
  301. data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -44
  302. data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
  303. data/lib/thinking_sphinx/active_record/scopes.rb +0 -110
  304. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -94
  305. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -62
  306. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -188
  307. data/lib/thinking_sphinx/association.rb +0 -230
  308. data/lib/thinking_sphinx/attribute.rb +0 -405
  309. data/lib/thinking_sphinx/auto_version.rb +0 -40
  310. data/lib/thinking_sphinx/bundled_search.rb +0 -40
  311. data/lib/thinking_sphinx/class_facet.rb +0 -20
  312. data/lib/thinking_sphinx/connection.rb +0 -71
  313. data/lib/thinking_sphinx/context.rb +0 -81
  314. data/lib/thinking_sphinx/core/string.rb +0 -15
  315. data/lib/thinking_sphinx/deltas/delete_job.rb +0 -16
  316. data/lib/thinking_sphinx/deltas/index_job.rb +0 -17
  317. data/lib/thinking_sphinx/deploy/capistrano.rb +0 -99
  318. data/lib/thinking_sphinx/field.rb +0 -98
  319. data/lib/thinking_sphinx/index/builder.rb +0 -315
  320. data/lib/thinking_sphinx/index/faux_column.rb +0 -118
  321. data/lib/thinking_sphinx/join.rb +0 -37
  322. data/lib/thinking_sphinx/property.rb +0 -187
  323. data/lib/thinking_sphinx/search_methods.rb +0 -439
  324. data/lib/thinking_sphinx/sinatra.rb +0 -7
  325. data/lib/thinking_sphinx/source.rb +0 -194
  326. data/lib/thinking_sphinx/source/internal_properties.rb +0 -51
  327. data/lib/thinking_sphinx/source/sql.rb +0 -174
  328. data/spec/fixtures/data.sql +0 -32
  329. data/spec/fixtures/database.yml.default +0 -3
  330. data/spec/fixtures/models.rb +0 -164
  331. data/spec/fixtures/structure.sql +0 -146
  332. data/spec/sphinx_helper.rb +0 -60
  333. data/spec/support/rails.rb +0 -25
  334. data/spec/thinking_sphinx/active_record/delta_spec.rb +0 -123
  335. data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +0 -173
  336. data/spec/thinking_sphinx/active_record/scopes_spec.rb +0 -177
  337. data/spec/thinking_sphinx/active_record_spec.rb +0 -573
  338. data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +0 -163
  339. data/spec/thinking_sphinx/association_spec.rb +0 -250
  340. data/spec/thinking_sphinx/attribute_spec.rb +0 -552
  341. data/spec/thinking_sphinx/auto_version_spec.rb +0 -103
  342. data/spec/thinking_sphinx/connection_spec.rb +0 -77
  343. data/spec/thinking_sphinx/context_spec.rb +0 -127
  344. data/spec/thinking_sphinx/core/array_spec.rb +0 -9
  345. data/spec/thinking_sphinx/core/string_spec.rb +0 -9
  346. data/spec/thinking_sphinx/facet_spec.rb +0 -359
  347. data/spec/thinking_sphinx/field_spec.rb +0 -127
  348. data/spec/thinking_sphinx/index/builder_spec.rb +0 -532
  349. data/spec/thinking_sphinx/index/faux_column_spec.rb +0 -36
  350. data/spec/thinking_sphinx/search_methods_spec.rb +0 -156
  351. data/spec/thinking_sphinx/source_spec.rb +0 -267
  352. data/spec/thinking_sphinx/test_spec.rb +0 -20
@@ -0,0 +1,43 @@
1
+ require 'acceptance/spec_helper'
2
+
3
+ describe 'SQL delta indexing', :live => true do
4
+ it "automatically indexes new records" do
5
+ guards = Book.create(
6
+ :title => 'Guards! Guards!', :author => 'Terry Pratchett'
7
+ )
8
+ index
9
+
10
+ Book.search('Terry Pratchett').to_a.should == [guards]
11
+
12
+ men = Book.create(
13
+ :title => 'Men At Arms', :author => 'Terry Pratchett'
14
+ )
15
+ sleep 0.25
16
+
17
+ Book.search('Terry Pratchett').to_a.should == [guards, men]
18
+ end
19
+
20
+ it "automatically indexes updated records" do
21
+ book = Book.create :title => 'Night Watch', :author => 'Harry Pritchett'
22
+ index
23
+
24
+ Book.search('Harry').to_a.should == [book]
25
+
26
+ book.reload.update_attributes(:author => 'Terry Pratchett')
27
+ sleep 0.25
28
+
29
+ Book.search('Terry').to_a.should == [book]
30
+ end
31
+
32
+ it "does not match on old values" do
33
+ book = Book.create :title => 'Night Watch', :author => 'Harry Pritchett'
34
+ index
35
+
36
+ Book.search('Harry').to_a.should == [book]
37
+
38
+ book.reload.update_attributes(:author => 'Terry Pratchett')
39
+ sleep 0.25
40
+
41
+ Book.search('Harry').should be_empty
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ RSpec.configure do |config|
2
+ config.before(:suite) do
3
+ DatabaseCleaner.strategy = :truncation
4
+ end
5
+
6
+ config.after(:each) do
7
+ if example.example_group_instance.class.metadata[:live]
8
+ DatabaseCleaner.clean
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ class SphinxController
2
+ def initialize
3
+ config.searchd.mysql41 = 9307
4
+ end
5
+
6
+ def setup
7
+ FileUtils.mkdir_p config.indices_location
8
+ config.render_to_file && index
9
+
10
+ ThinkingSphinx::Configuration.reset
11
+ ActiveSupport::Dependencies.clear
12
+
13
+ config.index_paths.each do |path|
14
+ Dir["#{path}/**/*.rb"].each { |file| $LOADED_FEATURES.delete file }
15
+ end
16
+
17
+ config.searchd.mysql41 = 9307
18
+ config.settings['quiet_deltas'] = true
19
+ config.settings['attribute_updates'] = true
20
+ end
21
+
22
+ def start
23
+ config.controller.start
24
+ end
25
+
26
+ def stop
27
+ config.controller.stop
28
+ end
29
+
30
+ def index(*indices)
31
+ config.controller.index *indices
32
+ end
33
+
34
+ private
35
+
36
+ def config
37
+ ThinkingSphinx::Configuration.instance
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ module SphinxHelpers
2
+ def sphinx
3
+ @sphinx ||= SphinxController.new
4
+ end
5
+
6
+ def index(*indices)
7
+ yield if block_given?
8
+
9
+ sphinx.index *indices
10
+ sleep 0.25
11
+ end
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.include SphinxHelpers
16
+
17
+ config.before :all do |group|
18
+ sphinx.setup && sphinx.start if group.class.metadata[:live]
19
+ end
20
+
21
+ config.after :all do |group|
22
+ sphinx.stop if group.class.metadata[:live]
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ require 'acceptance/spec_helper'
2
+
3
+ describe 'Suspend deltas for a given action', :live => true do
4
+ it "does not update the delta indices until after the block is finished" do
5
+ book = Book.create :title => 'Night Watch', :author => 'Harry Pritchett'
6
+ index
7
+
8
+ Book.search('Harry').to_a.should == [book]
9
+
10
+ ThinkingSphinx::Deltas.suspend :book do
11
+ book.reload.update_attributes(:author => 'Terry Pratchett')
12
+ sleep 0.25
13
+
14
+ Book.search('Terry').to_a.should == []
15
+ end
16
+
17
+ sleep 0.25
18
+ Book.search('Terry').to_a.should == [book]
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ tmp
@@ -0,0 +1,3 @@
1
+ ThinkingSphinx::Index.define :animal, :with => :active_record do
2
+ indexes name
3
+ end
@@ -0,0 +1,24 @@
1
+ ThinkingSphinx::Index.define :article, :with => :active_record do
2
+ indexes title, content
3
+ indexes user.name, :as => :user
4
+ indexes user.articles.title, :as => :related_titles
5
+
6
+ has published, user_id
7
+ has taggings.tag_id, :as => :tag_ids
8
+ has taggings.created_at, :as => :taggings_at
9
+
10
+ set_property :min_infix_len => 4
11
+ set_property :enable_star => true
12
+ end
13
+
14
+ ThinkingSphinx::Index.define :article, :with => :active_record,
15
+ :name => 'stemmed_article' do
16
+
17
+ indexes title
18
+
19
+ has published, user_id
20
+ has taggings.tag_id, :as => :tag_ids
21
+ has taggings.created_at, :as => :taggings_at
22
+
23
+ set_property :morphology => 'stem_en'
24
+ end
@@ -0,0 +1,8 @@
1
+ ThinkingSphinx::Index.define :book, :with => :active_record, :delta => true do
2
+ indexes title, :sortable => true
3
+ indexes author, :facet => true
4
+ indexes [title, author], :as => :info
5
+ indexes blurb_file, :file => true
6
+
7
+ has year, created_at
8
+ end
@@ -0,0 +1,6 @@
1
+ ThinkingSphinx::Index.define :city, :with => :active_record do
2
+ indexes name
3
+ has lat, lng
4
+
5
+ set_property :charset_table => '0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+0130'
6
+ end
@@ -0,0 +1,3 @@
1
+ # ThinkingSphinx::Index.define :product, :with => :real_time do
2
+ # indexes name
3
+ # end
@@ -0,0 +1,4 @@
1
+ ThinkingSphinx::Index.define :tee, :with => :active_record do
2
+ index colour.name
3
+ has colour_id, :facet => true
4
+ end
@@ -0,0 +1,5 @@
1
+ ThinkingSphinx::Index.define :user, :with => :active_record do
2
+ indexes name
3
+
4
+ has articles.taggings.tag_id, :as => :tag_ids, :facet => true
5
+ end
@@ -0,0 +1,2 @@
1
+ class Animal < ActiveRecord::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ class Article < ActiveRecord::Base
2
+ belongs_to :user
3
+ has_many :taggings
4
+ has_many :tags, :through => :taggings
5
+ end
@@ -0,0 +1,2 @@
1
+ class Bird < Animal
2
+ end
@@ -0,0 +1,11 @@
1
+ class Book < ActiveRecord::Base
2
+ include ThinkingSphinx::Scopes
3
+
4
+ sphinx_scope(:by_query) { |query| query }
5
+ sphinx_scope(:by_year) do |year|
6
+ {:with => {:year => year}}
7
+ end
8
+ sphinx_scope(:by_query_and_year) do |query, year|
9
+ [query, {:with => {:year =>year}}]
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class City < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class Colour < ActiveRecord::Base
2
+ has_many :tees
3
+ end
@@ -0,0 +1,2 @@
1
+ class FlightlessBird < Bird
2
+ end
@@ -0,0 +1,2 @@
1
+ class Mammal < Animal
2
+ end
@@ -0,0 +1,3 @@
1
+ class Product < ActiveRecord::Base
2
+ #
3
+ end
@@ -0,0 +1,4 @@
1
+ class Tag < ActiveRecord::Base
2
+ has_many :taggings
3
+ has_many :articles, :through => :taggings
4
+ end
@@ -1,4 +1,4 @@
1
1
  class Tagging < ActiveRecord::Base
2
2
  belongs_to :tag
3
- belongs_to :taggable, :polymorphic => true
3
+ belongs_to :article
4
4
  end
@@ -0,0 +1,3 @@
1
+ class Tee < ActiveRecord::Base
2
+ belongs_to :colour
3
+ end
@@ -0,0 +1,3 @@
1
+ class Tweet < ActiveRecord::Base
2
+ #
3
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ has_many :articles
3
+ end
@@ -0,0 +1,5 @@
1
+ test:
2
+ adapter: <%= ENV['DATABASE'] || 'mysql2' %>
3
+ database: thinking_sphinx
4
+ username: <%= ENV['DATABASE'] == 'postgresql' ? ENV['USER'] : 'root' %>
5
+ min_messages: warning
@@ -0,0 +1,65 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table(:animals, :force => true) do |t|
3
+ t.string :name
4
+ t.string :type
5
+ end
6
+
7
+ create_table(:articles, :force => true) do |t|
8
+ t.string :title
9
+ t.text :content
10
+ t.boolean :published
11
+ t.integer :user_id
12
+ t.timestamps
13
+ end
14
+
15
+ create_table(:books, :force => true) do |t|
16
+ t.string :title
17
+ t.string :author
18
+ t.integer :year
19
+ t.string :blurb_file
20
+ t.boolean :delta, :default => true, :null => false
21
+ t.timestamps
22
+ end
23
+
24
+ create_table(:cities, :force => true) do |t|
25
+ t.string :name
26
+ t.float :lat
27
+ t.float :lng
28
+ end
29
+
30
+ create_table(:colours, :force => true) do |t|
31
+ t.string :name
32
+ t.timestamps
33
+ end
34
+
35
+ create_table(:products, :force => true) do |t|
36
+ t.string :name
37
+ end
38
+
39
+ create_table(:taggings, :force => true) do |t|
40
+ t.integer :tag_id
41
+ t.integer :article_id
42
+ t.timestamps
43
+ end
44
+
45
+ create_table(:tags, :force => true) do |t|
46
+ t.string :name
47
+ t.timestamps
48
+ end
49
+
50
+ create_table(:tees, :force => true) do |t|
51
+ t.integer :colour_id
52
+ t.timestamps
53
+ end
54
+
55
+ create_table(:tweets, :force => true, :id => false) do |t|
56
+ t.column :id, :bigint, :null => false
57
+ t.string :text
58
+ t.timestamps
59
+ end
60
+
61
+ create_table(:users, :force => true) do |t|
62
+ t.string :name
63
+ t.timestamps
64
+ end
65
+ end
@@ -0,0 +1 @@
1
+ *.log
@@ -1,58 +1,17 @@
1
- $:.unshift File.dirname(__FILE__) + '/../lib'
2
-
3
- require 'fileutils'
4
- require 'logger'
1
+ require 'rubygems'
5
2
  require 'bundler'
6
3
 
7
4
  Bundler.require :default, :development
8
5
 
9
- require 'active_support/core_ext/module/attribute_accessors'
10
- require "#{File.dirname(__FILE__)}/sphinx_helper"
6
+ require 'thinking_sphinx/railtie'
11
7
 
12
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
8
+ Combustion.initialize! :active_record
13
9
 
14
- ThinkingSphinx::Configuration.instance
15
- ThinkingSphinx::ActiveRecord::LogSubscriber.logger = Logger.new(StringIO.new)
10
+ root = File.expand_path File.dirname(__FILE__)
11
+ Dir["#{root}/support/**/*.rb"].each { |file| require file }
16
12
 
17
13
  RSpec.configure do |config|
18
- %w( tmp tmp/config tmp/log tmp/db ).each do |path|
19
- FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
20
- end
21
-
22
- sphinx = SphinxHelper.new
23
- sphinx.setup_mysql
24
-
25
- ActiveRecord::Base.send(:include, ThinkingSphinx::ActiveRecord)
26
-
27
- require "#{File.dirname(__FILE__)}/fixtures/models"
28
- ThinkingSphinx.context.define_indexes
29
-
30
- config.before :each do
31
- %w( tmp tmp/config tmp/log tmp/db ).each do |path|
32
- FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
33
- end
34
-
35
- ThinkingSphinx.updates_enabled = true
36
- ThinkingSphinx.deltas_enabled = true
37
- ThinkingSphinx.suppress_delta_output = true
38
-
39
- ThinkingSphinx::Configuration.instance.reset
40
- end
41
-
42
- config.after :all do
43
- FileUtils.rm_r "#{Dir.pwd}/tmp" rescue nil
44
- end
45
- end
46
-
47
- def minimal_result_hashes(*instances)
48
- instances.collect do |instance|
49
- {
50
- :weight => 21,
51
- :attributes => {
52
- 'sphinx_internal_id' => instance.id,
53
- 'sphinx_internal_class' => instance.class.name,
54
- 'class_crc' => instance.class.name.to_crc32
55
- }
56
- }
57
- end
14
+ # enable filtering for examples
15
+ config.filter_run :wip => nil
16
+ config.run_all_when_everything_filtered = true
58
17
  end
@@ -0,0 +1,9 @@
1
+ module SphinxYamlHelpers
2
+ def write_configuration(hash)
3
+ File.stub :read => {'test' => hash}.to_yaml, :exists? => true
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |config|
8
+ config.include SphinxYamlHelpers
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe ThinkingSphinx::ActiveRecord::Association do
4
+ let(:association) { ThinkingSphinx::ActiveRecord::Association.new column }
5
+ let(:column) { double('column', :__stack => [:users], :__name => :post) }
6
+
7
+ describe '#stack' do
8
+ it "returns the column's stack and name" do
9
+ association.stack.should == [:users, :post]
10
+ end
11
+ end
12
+ end