sunspot_rails 2.0.0.pre.120924 → 2.0.0.pre.120925

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 (293) hide show
  1. data/.gitignore +6 -10
  2. data/{sunspot_rails/.rspec → .rspec} +0 -0
  3. data/{sunspot_rails/History.txt → History.txt} +0 -0
  4. data/{sunspot/LICENSE → LICENSE} +0 -0
  5. data/{sunspot_rails/MIT-LICENSE → MIT-LICENSE} +0 -0
  6. data/{sunspot_rails/README.rdoc → README.rdoc} +0 -0
  7. data/Rakefile +12 -32
  8. data/{sunspot_rails/TODO → TODO} +0 -0
  9. data/{sunspot_rails/dev_tasks → dev_tasks}/rdoc.rake +0 -0
  10. data/{sunspot_rails/dev_tasks → dev_tasks}/release.rake +0 -0
  11. data/{sunspot_rails/dev_tasks → dev_tasks}/spec.rake +0 -0
  12. data/{sunspot/tasks → dev_tasks}/todo.rake +0 -0
  13. data/{sunspot_rails/gemfiles → gemfiles}/rails-2.3.14 +0 -0
  14. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.0.15 +0 -0
  15. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.1.6 +0 -0
  16. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.2.6 +0 -0
  17. data/{sunspot_rails/generators → generators}/sunspot/sunspot_generator.rb +0 -0
  18. data/{sunspot_rails/generators → generators}/sunspot/templates/sunspot.yml +0 -0
  19. data/{sunspot_rails/install.rb → install.rb} +0 -0
  20. data/{sunspot_rails/lib → lib}/generators/sunspot_rails.rb +0 -0
  21. data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/install_generator.rb +0 -0
  22. data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/templates/config/sunspot.yml +0 -0
  23. data/{sunspot_rails/lib → lib}/sunspot/rails.rb +0 -0
  24. data/{sunspot_rails/lib → lib}/sunspot/rails/adapters.rb +0 -0
  25. data/{sunspot_rails/lib → lib}/sunspot/rails/configuration.rb +0 -0
  26. data/{sunspot_rails/lib → lib}/sunspot/rails/init.rb +0 -0
  27. data/{sunspot_rails/lib → lib}/sunspot/rails/log_subscriber.rb +0 -0
  28. data/{sunspot_rails/lib → lib}/sunspot/rails/railtie.rb +0 -0
  29. data/{sunspot_rails/lib → lib}/sunspot/rails/railties/controller_runtime.rb +0 -0
  30. data/{sunspot_rails/lib → lib}/sunspot/rails/request_lifecycle.rb +0 -0
  31. data/{sunspot_rails/lib → lib}/sunspot/rails/searchable.rb +0 -0
  32. data/{sunspot_rails/lib → lib}/sunspot/rails/server.rb +0 -0
  33. data/{sunspot_rails/lib → lib}/sunspot/rails/solr_instrumentation.rb +0 -0
  34. data/{sunspot_rails/lib → lib}/sunspot/rails/solr_logging.rb +0 -0
  35. data/{sunspot_rails/lib → lib}/sunspot/rails/spec_helper.rb +0 -0
  36. data/{sunspot_rails/lib → lib}/sunspot/rails/stub_session_proxy.rb +0 -0
  37. data/{sunspot_rails/lib → lib}/sunspot/rails/tasks.rb +0 -0
  38. data/{sunspot_rails/lib → lib}/sunspot_rails.rb +0 -0
  39. data/{sunspot_rails/spec → spec}/configuration_spec.rb +0 -0
  40. data/{sunspot_rails/spec → spec}/model_lifecycle_spec.rb +0 -0
  41. data/{sunspot_rails/spec → spec}/model_spec.rb +0 -0
  42. data/{sunspot_rails/spec → spec}/rails_template/app/controllers/application_controller.rb +0 -0
  43. data/{sunspot_rails/spec → spec}/rails_template/app/controllers/posts_controller.rb +0 -0
  44. data/{sunspot_rails/spec → spec}/rails_template/app/models/author.rb +0 -0
  45. data/{sunspot_rails/spec → spec}/rails_template/app/models/blog.rb +0 -0
  46. data/{sunspot_rails/spec → spec}/rails_template/app/models/location.rb +0 -0
  47. data/{sunspot_rails/spec → spec}/rails_template/app/models/photo_post.rb +0 -0
  48. data/{sunspot_rails/spec → spec}/rails_template/app/models/post.rb +0 -0
  49. data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_auto.rb +0 -0
  50. data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_default_scope.rb +0 -0
  51. data/{sunspot_rails/spec → spec}/rails_template/config/boot.rb +0 -0
  52. data/{sunspot_rails/spec → spec}/rails_template/config/preinitializer.rb +0 -0
  53. data/{sunspot_rails/spec → spec}/rails_template/config/routes.rb +0 -0
  54. data/{sunspot_rails/spec → spec}/rails_template/config/sunspot.yml +0 -0
  55. data/{sunspot_rails/spec → spec}/rails_template/db/schema.rb +0 -0
  56. data/{sunspot_rails/spec → spec}/request_lifecycle_spec.rb +0 -0
  57. data/{sunspot_rails/spec → spec}/schema.rb +0 -0
  58. data/{sunspot_rails/spec → spec}/searchable_spec.rb +0 -0
  59. data/{sunspot_rails/spec → spec}/server_spec.rb +0 -0
  60. data/{sunspot_rails/spec → spec}/session_spec.rb +0 -0
  61. data/{sunspot_rails/spec → spec}/shared_examples/indexed_after_save.rb +0 -0
  62. data/{sunspot_rails/spec → spec}/shared_examples/not_indexed_after_save.rb +0 -0
  63. data/{sunspot_rails/spec → spec}/spec_helper.rb +0 -0
  64. data/{sunspot_rails/spec → spec}/stub_session_proxy_spec.rb +0 -0
  65. data/{sunspot_rails/sunspot_rails.gemspec → sunspot_rails.gemspec} +0 -0
  66. metadata +102 -305
  67. data/.travis.yml +0 -35
  68. data/README.md +0 -863
  69. data/ci/travis.sh +0 -67
  70. data/sunspot/.gitignore +0 -13
  71. data/sunspot/Gemfile +0 -5
  72. data/sunspot/History.txt +0 -258
  73. data/sunspot/Rakefile +0 -13
  74. data/sunspot/TODO +0 -13
  75. data/sunspot/lib/light_config.rb +0 -40
  76. data/sunspot/lib/sunspot.rb +0 -579
  77. data/sunspot/lib/sunspot/adapters.rb +0 -349
  78. data/sunspot/lib/sunspot/batcher.rb +0 -62
  79. data/sunspot/lib/sunspot/class_set.rb +0 -23
  80. data/sunspot/lib/sunspot/composite_setup.rb +0 -202
  81. data/sunspot/lib/sunspot/configuration.rb +0 -53
  82. data/sunspot/lib/sunspot/data_extractor.rb +0 -50
  83. data/sunspot/lib/sunspot/dsl.rb +0 -5
  84. data/sunspot/lib/sunspot/dsl/adjustable.rb +0 -47
  85. data/sunspot/lib/sunspot/dsl/field_group.rb +0 -57
  86. data/sunspot/lib/sunspot/dsl/field_query.rb +0 -345
  87. data/sunspot/lib/sunspot/dsl/fields.rb +0 -103
  88. data/sunspot/lib/sunspot/dsl/fulltext.rb +0 -243
  89. data/sunspot/lib/sunspot/dsl/function.rb +0 -27
  90. data/sunspot/lib/sunspot/dsl/functional.rb +0 -44
  91. data/sunspot/lib/sunspot/dsl/more_like_this_query.rb +0 -56
  92. data/sunspot/lib/sunspot/dsl/paginatable.rb +0 -32
  93. data/sunspot/lib/sunspot/dsl/query_facet.rb +0 -36
  94. data/sunspot/lib/sunspot/dsl/restriction.rb +0 -25
  95. data/sunspot/lib/sunspot/dsl/restriction_with_near.rb +0 -160
  96. data/sunspot/lib/sunspot/dsl/scope.rb +0 -214
  97. data/sunspot/lib/sunspot/dsl/search.rb +0 -30
  98. data/sunspot/lib/sunspot/dsl/standard_query.rb +0 -122
  99. data/sunspot/lib/sunspot/field.rb +0 -193
  100. data/sunspot/lib/sunspot/field_factory.rb +0 -129
  101. data/sunspot/lib/sunspot/indexer.rb +0 -136
  102. data/sunspot/lib/sunspot/query.rb +0 -11
  103. data/sunspot/lib/sunspot/query/abstract_field_facet.rb +0 -55
  104. data/sunspot/lib/sunspot/query/bbox.rb +0 -15
  105. data/sunspot/lib/sunspot/query/boost_query.rb +0 -24
  106. data/sunspot/lib/sunspot/query/common_query.rb +0 -96
  107. data/sunspot/lib/sunspot/query/composite_fulltext.rb +0 -36
  108. data/sunspot/lib/sunspot/query/connective.rb +0 -206
  109. data/sunspot/lib/sunspot/query/date_field_facet.rb +0 -14
  110. data/sunspot/lib/sunspot/query/dismax.rb +0 -132
  111. data/sunspot/lib/sunspot/query/field_facet.rb +0 -41
  112. data/sunspot/lib/sunspot/query/field_group.rb +0 -37
  113. data/sunspot/lib/sunspot/query/filter.rb +0 -38
  114. data/sunspot/lib/sunspot/query/function_query.rb +0 -52
  115. data/sunspot/lib/sunspot/query/geo.rb +0 -53
  116. data/sunspot/lib/sunspot/query/geofilt.rb +0 -16
  117. data/sunspot/lib/sunspot/query/highlighting.rb +0 -62
  118. data/sunspot/lib/sunspot/query/more_like_this.rb +0 -61
  119. data/sunspot/lib/sunspot/query/more_like_this_query.rb +0 -12
  120. data/sunspot/lib/sunspot/query/pagination.rb +0 -42
  121. data/sunspot/lib/sunspot/query/query_facet.rb +0 -53
  122. data/sunspot/lib/sunspot/query/range_facet.rb +0 -15
  123. data/sunspot/lib/sunspot/query/restriction.rb +0 -308
  124. data/sunspot/lib/sunspot/query/scope.rb +0 -9
  125. data/sunspot/lib/sunspot/query/sort.rb +0 -109
  126. data/sunspot/lib/sunspot/query/sort_composite.rb +0 -34
  127. data/sunspot/lib/sunspot/query/standard_query.rb +0 -16
  128. data/sunspot/lib/sunspot/query/text_field_boost.rb +0 -17
  129. data/sunspot/lib/sunspot/schema.rb +0 -151
  130. data/sunspot/lib/sunspot/search.rb +0 -9
  131. data/sunspot/lib/sunspot/search/abstract_search.rb +0 -286
  132. data/sunspot/lib/sunspot/search/date_facet.rb +0 -35
  133. data/sunspot/lib/sunspot/search/facet_row.rb +0 -27
  134. data/sunspot/lib/sunspot/search/field_facet.rb +0 -88
  135. data/sunspot/lib/sunspot/search/field_group.rb +0 -70
  136. data/sunspot/lib/sunspot/search/group.rb +0 -54
  137. data/sunspot/lib/sunspot/search/highlight.rb +0 -38
  138. data/sunspot/lib/sunspot/search/hit.rb +0 -150
  139. data/sunspot/lib/sunspot/search/hit_enumerable.rb +0 -68
  140. data/sunspot/lib/sunspot/search/more_like_this_search.rb +0 -31
  141. data/sunspot/lib/sunspot/search/paginated_collection.rb +0 -57
  142. data/sunspot/lib/sunspot/search/query_facet.rb +0 -67
  143. data/sunspot/lib/sunspot/search/range_facet.rb +0 -37
  144. data/sunspot/lib/sunspot/search/standard_search.rb +0 -21
  145. data/sunspot/lib/sunspot/session.rb +0 -262
  146. data/sunspot/lib/sunspot/session_proxy.rb +0 -95
  147. data/sunspot/lib/sunspot/session_proxy/abstract_session_proxy.rb +0 -29
  148. data/sunspot/lib/sunspot/session_proxy/class_sharding_session_proxy.rb +0 -66
  149. data/sunspot/lib/sunspot/session_proxy/id_sharding_session_proxy.rb +0 -89
  150. data/sunspot/lib/sunspot/session_proxy/master_slave_session_proxy.rb +0 -43
  151. data/sunspot/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +0 -67
  152. data/sunspot/lib/sunspot/session_proxy/sharding_session_proxy.rb +0 -222
  153. data/sunspot/lib/sunspot/session_proxy/silent_fail_session_proxy.rb +0 -42
  154. data/sunspot/lib/sunspot/session_proxy/thread_local_session_proxy.rb +0 -37
  155. data/sunspot/lib/sunspot/setup.rb +0 -350
  156. data/sunspot/lib/sunspot/text_field_setup.rb +0 -29
  157. data/sunspot/lib/sunspot/type.rb +0 -393
  158. data/sunspot/lib/sunspot/util.rb +0 -252
  159. data/sunspot/lib/sunspot/version.rb +0 -3
  160. data/sunspot/script/console +0 -10
  161. data/sunspot/spec/api/adapters_spec.rb +0 -68
  162. data/sunspot/spec/api/batcher_spec.rb +0 -112
  163. data/sunspot/spec/api/binding_spec.rb +0 -50
  164. data/sunspot/spec/api/class_set_spec.rb +0 -24
  165. data/sunspot/spec/api/hit_enumerable_spec.rb +0 -47
  166. data/sunspot/spec/api/indexer/attributes_spec.rb +0 -149
  167. data/sunspot/spec/api/indexer/batch_spec.rb +0 -72
  168. data/sunspot/spec/api/indexer/dynamic_fields_spec.rb +0 -42
  169. data/sunspot/spec/api/indexer/fixed_fields_spec.rb +0 -57
  170. data/sunspot/spec/api/indexer/fulltext_spec.rb +0 -43
  171. data/sunspot/spec/api/indexer/removal_spec.rb +0 -53
  172. data/sunspot/spec/api/indexer/spec_helper.rb +0 -1
  173. data/sunspot/spec/api/indexer_spec.rb +0 -14
  174. data/sunspot/spec/api/query/advanced_manipulation_examples.rb +0 -35
  175. data/sunspot/spec/api/query/connectives_examples.rb +0 -201
  176. data/sunspot/spec/api/query/dsl_spec.rb +0 -18
  177. data/sunspot/spec/api/query/dynamic_fields_examples.rb +0 -165
  178. data/sunspot/spec/api/query/faceting_examples.rb +0 -497
  179. data/sunspot/spec/api/query/fulltext_examples.rb +0 -313
  180. data/sunspot/spec/api/query/function_spec.rb +0 -79
  181. data/sunspot/spec/api/query/geo_examples.rb +0 -68
  182. data/sunspot/spec/api/query/group_spec.rb +0 -32
  183. data/sunspot/spec/api/query/highlighting_examples.rb +0 -245
  184. data/sunspot/spec/api/query/more_like_this_spec.rb +0 -140
  185. data/sunspot/spec/api/query/ordering_pagination_examples.rb +0 -116
  186. data/sunspot/spec/api/query/scope_examples.rb +0 -275
  187. data/sunspot/spec/api/query/spatial_examples.rb +0 -27
  188. data/sunspot/spec/api/query/spec_helper.rb +0 -1
  189. data/sunspot/spec/api/query/standard_spec.rb +0 -29
  190. data/sunspot/spec/api/query/text_field_scoping_examples.rb +0 -30
  191. data/sunspot/spec/api/query/types_spec.rb +0 -20
  192. data/sunspot/spec/api/search/dynamic_fields_spec.rb +0 -33
  193. data/sunspot/spec/api/search/faceting_spec.rb +0 -360
  194. data/sunspot/spec/api/search/highlighting_spec.rb +0 -69
  195. data/sunspot/spec/api/search/hits_spec.rb +0 -147
  196. data/sunspot/spec/api/search/paginated_collection_spec.rb +0 -36
  197. data/sunspot/spec/api/search/results_spec.rb +0 -72
  198. data/sunspot/spec/api/search/search_spec.rb +0 -23
  199. data/sunspot/spec/api/search/spec_helper.rb +0 -1
  200. data/sunspot/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +0 -85
  201. data/sunspot/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +0 -30
  202. data/sunspot/spec/api/session_proxy/master_slave_session_proxy_spec.rb +0 -41
  203. data/sunspot/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +0 -78
  204. data/sunspot/spec/api/session_proxy/sharding_session_proxy_spec.rb +0 -77
  205. data/sunspot/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +0 -24
  206. data/sunspot/spec/api/session_proxy/spec_helper.rb +0 -9
  207. data/sunspot/spec/api/session_proxy/thread_local_session_proxy_spec.rb +0 -39
  208. data/sunspot/spec/api/session_spec.rb +0 -232
  209. data/sunspot/spec/api/spec_helper.rb +0 -3
  210. data/sunspot/spec/api/sunspot_spec.rb +0 -29
  211. data/sunspot/spec/ext.rb +0 -11
  212. data/sunspot/spec/helpers/indexer_helper.rb +0 -17
  213. data/sunspot/spec/helpers/integration_helper.rb +0 -8
  214. data/sunspot/spec/helpers/mock_session_helper.rb +0 -13
  215. data/sunspot/spec/helpers/query_helper.rb +0 -26
  216. data/sunspot/spec/helpers/search_helper.rb +0 -68
  217. data/sunspot/spec/integration/dynamic_fields_spec.rb +0 -57
  218. data/sunspot/spec/integration/faceting_spec.rb +0 -330
  219. data/sunspot/spec/integration/field_grouping_spec.rb +0 -100
  220. data/sunspot/spec/integration/geospatial_spec.rb +0 -96
  221. data/sunspot/spec/integration/highlighting_spec.rb +0 -44
  222. data/sunspot/spec/integration/indexing_spec.rb +0 -55
  223. data/sunspot/spec/integration/keyword_search_spec.rb +0 -317
  224. data/sunspot/spec/integration/local_search_spec.rb +0 -64
  225. data/sunspot/spec/integration/more_like_this_spec.rb +0 -43
  226. data/sunspot/spec/integration/scoped_search_spec.rb +0 -386
  227. data/sunspot/spec/integration/stored_fields_spec.rb +0 -12
  228. data/sunspot/spec/integration/test_pagination.rb +0 -43
  229. data/sunspot/spec/integration/unicode_spec.rb +0 -15
  230. data/sunspot/spec/mocks/adapters.rb +0 -33
  231. data/sunspot/spec/mocks/blog.rb +0 -3
  232. data/sunspot/spec/mocks/comment.rb +0 -21
  233. data/sunspot/spec/mocks/connection.rb +0 -126
  234. data/sunspot/spec/mocks/mock_adapter.rb +0 -30
  235. data/sunspot/spec/mocks/mock_class_sharding_session_proxy.rb +0 -24
  236. data/sunspot/spec/mocks/mock_record.rb +0 -52
  237. data/sunspot/spec/mocks/mock_sharding_session_proxy.rb +0 -15
  238. data/sunspot/spec/mocks/photo.rb +0 -11
  239. data/sunspot/spec/mocks/post.rb +0 -86
  240. data/sunspot/spec/mocks/super_class.rb +0 -2
  241. data/sunspot/spec/mocks/user.rb +0 -13
  242. data/sunspot/spec/spec_helper.rb +0 -40
  243. data/sunspot/sunspot.gemspec +0 -37
  244. data/sunspot/tasks/rdoc.rake +0 -27
  245. data/sunspot/tasks/schema.rake +0 -19
  246. data/sunspot_rails/.gitignore +0 -7
  247. data/sunspot_rails/LICENSE +0 -18
  248. data/sunspot_rails/Rakefile +0 -17
  249. data/sunspot_rails/dev_tasks/todo.rake +0 -4
  250. data/sunspot_solr/Gemfile +0 -3
  251. data/sunspot_solr/README.rdoc +0 -24
  252. data/sunspot_solr/bin/sunspot-installer +0 -20
  253. data/sunspot_solr/bin/sunspot-solr +0 -80
  254. data/sunspot_solr/lib/sunspot/solr/installer.rb +0 -25
  255. data/sunspot_solr/lib/sunspot/solr/installer/config_installer.rb +0 -46
  256. data/sunspot_solr/lib/sunspot/solr/installer/task_helper.rb +0 -13
  257. data/sunspot_solr/lib/sunspot/solr/java.rb +0 -10
  258. data/sunspot_solr/lib/sunspot/solr/railtie.rb +0 -15
  259. data/sunspot_solr/lib/sunspot/solr/server.rb +0 -223
  260. data/sunspot_solr/lib/sunspot/solr/tasks.rb +0 -49
  261. data/sunspot_solr/lib/sunspot_solr.rb +0 -5
  262. data/sunspot_solr/solr/README.txt +0 -42
  263. data/sunspot_solr/solr/etc/jetty.xml +0 -219
  264. data/sunspot_solr/solr/etc/webdefault.xml +0 -379
  265. data/sunspot_solr/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar +0 -0
  266. data/sunspot_solr/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar +0 -0
  267. data/sunspot_solr/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
  268. data/sunspot_solr/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
  269. data/sunspot_solr/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
  270. data/sunspot_solr/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
  271. data/sunspot_solr/solr/lib/servlet-api-2.5-20081211.jar +0 -0
  272. data/sunspot_solr/solr/solr/.gitignore +0 -1
  273. data/sunspot_solr/solr/solr/README.txt +0 -54
  274. data/sunspot_solr/solr/solr/conf/admin-extra.html +0 -31
  275. data/sunspot_solr/solr/solr/conf/elevate.xml +0 -36
  276. data/sunspot_solr/solr/solr/conf/mapping-ISOLatin1Accent.txt +0 -246
  277. data/sunspot_solr/solr/solr/conf/protwords.txt +0 -21
  278. data/sunspot_solr/solr/solr/conf/schema.xml +0 -250
  279. data/sunspot_solr/solr/solr/conf/scripts.conf +0 -24
  280. data/sunspot_solr/solr/solr/conf/solrconfig.xml +0 -934
  281. data/sunspot_solr/solr/solr/conf/spellings.txt +0 -2
  282. data/sunspot_solr/solr/solr/conf/stopwords.txt +0 -58
  283. data/sunspot_solr/solr/solr/conf/synonyms.txt +0 -31
  284. data/sunspot_solr/solr/solr/conf/xslt/example.xsl +0 -132
  285. data/sunspot_solr/solr/solr/conf/xslt/example_atom.xsl +0 -67
  286. data/sunspot_solr/solr/solr/conf/xslt/example_rss.xsl +0 -66
  287. data/sunspot_solr/solr/solr/conf/xslt/luke.xsl +0 -337
  288. data/sunspot_solr/solr/start.jar +0 -0
  289. data/sunspot_solr/solr/webapps/solr.war +0 -0
  290. data/sunspot_solr/spec/server_spec.rb +0 -98
  291. data/sunspot_solr/spec/spec_helper.rb +0 -18
  292. data/sunspot_solr/sunspot_solr.gemspec +0 -37
  293. data/tools/gem_tasks.rb +0 -69
@@ -1,95 +0,0 @@
1
- module Sunspot
2
- #
3
- # This module contains several Session Proxy implementations, which can be
4
- # used to decorate one or more Session objects and add extra functionality.
5
- # The user can also implement their own Session Proxy classes; a Session Proxy
6
- # must simply implement the same public API as the Sunspot::Session class.
7
- #
8
- # When implementing a session proxy, some methods of Session may not be
9
- # practical, or even logical, to implement. In this case, the method should
10
- # raise a Sunspot::SessionProxy::NotSupportedError (several methods in the
11
- # built-in session proxies raise this error).
12
- #
13
- # To use a session proxy in normal Sunspot usage, you can use the
14
- # Sunspot.session= method, which will cause Sunspot to delegate all of its
15
- # session-related class methods (most of them) to the proxy. Session proxies
16
- # can also easily be chained, although the details of chaining depend on the
17
- # proxy implementation.
18
- #
19
- # ===== Example: Chain a MasterSlaveSessionProxy with a ThreadLocalSessionProxy
20
- #
21
- # master_session = Sunspot::SessionProxy::ThreadLocalSessionProxy.new
22
- # slave_session = Sunspot::SessionProxy::ThreadLocalSessionProxy.new
23
- # master_session.config.solr.url = 'http://master-solr.local:9080/solr'
24
- # slave_session.config.solr.url = 'http://slave-solr.local:9080/solr'
25
- # Sunspot.session = Sunspot::SessionProxy::MasterSlaveSessionProxy.new(master_session, slave_session)
26
- #
27
- module SessionProxy
28
- NotSupportedError = Class.new(StandardError)
29
-
30
- autoload(
31
- :AbstractSessionProxy,
32
- File.join(
33
- File.dirname(__FILE__),
34
- 'session_proxy',
35
- 'abstract_session_proxy'
36
- )
37
- )
38
- autoload(
39
- :ThreadLocalSessionProxy,
40
- File.join(
41
- File.dirname(__FILE__),
42
- 'session_proxy',
43
- 'thread_local_session_proxy'
44
- )
45
- )
46
- autoload(
47
- :MasterSlaveSessionProxy,
48
- File.join(
49
- File.dirname(__FILE__),
50
- 'session_proxy',
51
- 'master_slave_session_proxy'
52
- )
53
- )
54
- autoload(
55
- :ShardingSessionProxy,
56
- File.join(
57
- File.dirname(__FILE__),
58
- 'session_proxy',
59
- 'sharding_session_proxy'
60
- )
61
- )
62
- autoload(
63
- :ClassShardingSessionProxy,
64
- File.join(
65
- File.dirname(__FILE__),
66
- 'session_proxy',
67
- 'class_sharding_session_proxy'
68
- )
69
- )
70
- autoload(
71
- :IdShardingSessionProxy,
72
- File.join(
73
- File.dirname(__FILE__),
74
- 'session_proxy',
75
- 'id_sharding_session_proxy'
76
- )
77
- )
78
- autoload(
79
- :SilentFailSessionProxy,
80
- File.join(
81
- File.dirname(__FILE__),
82
- 'session_proxy',
83
- 'silent_fail_session_proxy'
84
- )
85
- )
86
- autoload(
87
- :Retry5xxSessionProxy,
88
- File.join(
89
- File.dirname(__FILE__),
90
- 'session_proxy',
91
- 'retry_5xx_session_proxy'
92
- )
93
- )
94
- end
95
- end
@@ -1,29 +0,0 @@
1
- module Sunspot
2
- module SessionProxy
3
- class AbstractSessionProxy #:nodoc:
4
- class <<self
5
- def delegate(*args)
6
- options = Util.extract_options_from(args)
7
- delegate = options[:to]
8
- args.each do |method|
9
- module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
10
- def #{method}(*args, &block)
11
- #{delegate}.#{method}(*args, &block)
12
- end
13
- RUBY
14
- end
15
- end
16
-
17
- def not_supported(*methods)
18
- methods.each do |method|
19
- module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
20
- def #{method}(*args, &block)
21
- raise NotSupportedError, "#{name} does not support #{method.inspect}"
22
- end
23
- RUBY
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,66 +0,0 @@
1
- module Sunspot
2
- module SessionProxy
3
- #
4
- # An abstract subclass of ShardingSessionProxy that shards by class.
5
- # Concrete subclasses should not override the #session_for method, but
6
- # should instead implement the #session_for_class method. They must also
7
- # still implement the #all_sessions method.
8
- #
9
- # Unlike its parent class, ClassShardingSessionProxy implements
10
- # #remove_by_id and all flavors of #remove_all.
11
- #
12
- class ClassShardingSessionProxy < ShardingSessionProxy
13
- #
14
- # Remove the Session object pointing at the shard that indexes the given
15
- # class.
16
- #
17
- # <strong>Concrete subclasses must implement this method.</strong>
18
- #
19
- def session_for_class(clazz)
20
- raise NotImplementedError
21
- end
22
-
23
- #
24
- # See Sunspot.remove_by_id
25
- #
26
- def remove_by_id(clazz, id)
27
- session_for_class(clazz).remove_by_id(clazz, id)
28
- end
29
-
30
- #
31
- # See Sunspot.remove_by_id!
32
- #
33
- def remove_by_id!(clazz, id)
34
- session_for_class(clazz).remove_by_id!(clazz, id)
35
- end
36
-
37
- #
38
- # See Sunspot.remove_all
39
- #
40
- def remove_all(clazz = nil)
41
- if clazz
42
- session_for_class(clazz).remove_all(clazz)
43
- else
44
- all_sessions.each { |session| session.remove_all }
45
- end
46
- end
47
-
48
- #
49
- # See Sunspot.remove_all!
50
- #
51
- def remove_all!(clazz = nil)
52
- if clazz
53
- session_for_class(clazz).remove_all!(clazz)
54
- else
55
- all_sessions.each { |session| session.remove_all! }
56
- end
57
- end
58
-
59
- private
60
-
61
- def session_for(object)
62
- session_for_class(object.class)
63
- end
64
- end
65
- end
66
- end
@@ -1,89 +0,0 @@
1
- module Sunspot
2
- module SessionProxy
3
- #
4
- # A concrete implementation of ShardingSessionProxy that determines the
5
- # shard for a given object based on the hash of its class and ID.
6
- #
7
- # <strong>If you change the number of shard sessions that this proxy
8
- # encapsulates, all objects will point to a different shard.</strong> If you
9
- # plan on adding more shards over time, consider your own
10
- # ShardingSessionProxy implementation that does not determine the session
11
- # using modular arithmetic (e.g., IDs 1-10000 go to shard 1, 10001-20000 go
12
- # to shard 2, etc.)
13
- #
14
- # This implementation will, on average, yield an even distribution of
15
- # objects across shards.
16
- #
17
- # Unlike the abstract ShardingSessionProxy, this proxy supports the
18
- # #remove_by_id method.
19
- #
20
- class IdShardingSessionProxy < ShardingSessionProxy
21
- #
22
- # The shard sessions encapsulated by this class.
23
- #
24
- attr_reader :sessions
25
- alias_method :all_sessions, :sessions #:nodoc:
26
-
27
- #
28
- # Initialize with a search session (see ShardingSessionProxy.new) and a
29
- # collection of one or more shard sessions. See note about changing the
30
- # number of shard sessions in the documentation for this class.
31
- #
32
- def initialize(search_session, shard_sessions)
33
- super(search_session)
34
- @sessions = shard_sessions
35
- end
36
-
37
- #
38
- # Return a session based on the hash of the class and ID, modulo the
39
- # number of shard sessions.
40
- #
41
- def session_for(object) #:nodoc:
42
- session_for_index_id(Adapters::InstanceAdapter.adapt(object).index_id)
43
- end
44
-
45
- #
46
- # See Sunspot.remove_by_id
47
- #
48
- def remove_by_id(clazz, id)
49
- session_for_index_id(
50
- Adapters::InstanceAdapter.index_id_for(clazz, id)
51
- ).remove_by_id(clazz, id)
52
- end
53
-
54
- #
55
- # See Sunspot.remove_by_id!
56
- #
57
- def remove_by_id!(clazz, id)
58
- session_for_index_id(
59
- Adapters::InstanceAdapter.index_id_for(clazz, id)
60
- ).remove_by_id!(clazz, id)
61
- end
62
-
63
- private
64
-
65
- def session_for_index_id(index_id)
66
- @sessions[id_hash(index_id) % @sessions.length]
67
- end
68
-
69
- #
70
- # This method is implemented explicitly instead of using String#hash to
71
- # give predictable behavior across different Ruby interpreters.
72
- #
73
- if "".respond_to?(:bytes) # Ruby 1.9
74
- def id_hash(id)
75
- id.bytes.inject { |hash, byte| hash * 31 + byte }
76
- end
77
- else
78
- def id_hash(id)
79
- hash, i, len = 0, 0, id.length
80
- while i < len
81
- hash = hash * 31 + id[i]
82
- i += 1
83
- end
84
- hash
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,43 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'abstract_session_proxy')
2
-
3
- module Sunspot
4
- module SessionProxy
5
- #
6
- # This session proxy implementation allows Sunspot to be used with a
7
- # master/slave Solr deployment. All write methods are delegated to a master
8
- # session, and read methods are delegated to a slave session.
9
- #
10
- class MasterSlaveSessionProxy < AbstractSessionProxy
11
- #
12
- # The session that connects to the master Solr instance.
13
- #
14
- attr_reader :master_session
15
- #
16
- # The session that connects to the slave Solr instance.
17
- #
18
- attr_reader :slave_session
19
-
20
- delegate :batch, :commit, :commit_if_delete_dirty, :commit_if_dirty,
21
- :config, :delete_dirty?, :dirty?, :index, :index!, :optimize, :remove,
22
- :remove!, :remove_all, :remove_all!, :remove_by_id,
23
- :remove_by_id!, :to => :master_session
24
- delegate :new_search, :search, :new_more_like_this, :more_like_this, :to => :slave_session
25
-
26
- def initialize(master_session, slave_session)
27
- @master_session, @slave_session = master_session, slave_session
28
- end
29
-
30
- #
31
- # By default, return the configuration for the master session. If the
32
- # +delegate+ param is +:slave+, then return config for the slave session.
33
- #
34
- def config(delegate = :master)
35
- case delegate
36
- when :master then @master_session.config
37
- when :slave then @slave_session.config
38
- else raise(ArgumentError, "Expected :master or :slave")
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,67 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'abstract_session_proxy')
2
-
3
- module Sunspot
4
- module SessionProxy
5
- class Retry5xxSessionProxy < AbstractSessionProxy
6
-
7
- class RetryHandler
8
- attr_reader :search_session
9
-
10
- def initialize(search_session)
11
- @search_session = search_session
12
- end
13
-
14
- def method_missing(m, *args, &block)
15
- retry_count = 1
16
- begin
17
- search_session.send(m, *args, &block)
18
- rescue Errno::ECONNRESET => e
19
- if retry_count > 0
20
- $stderr.puts "Error - #{e.message[/^.*$/]} - retrying..."
21
- retry_count -= 1
22
- retry
23
- else
24
- $stderr.puts "Error - #{e.message[/^.*$/]} - ignoring..."
25
- end
26
- rescue RSolr::Error::Http => e
27
- if (500..599).include?(e.response[:status].to_i)
28
- if retry_count > 0
29
- $stderr.puts "Error - #{e.message[/^.*$/]} - retrying..."
30
- retry_count -= 1
31
- retry
32
- else
33
- $stderr.puts "Error - #{e.message[/^.*$/]} - ignoring..."
34
- e.response
35
- end
36
- else
37
- raise e
38
- end
39
- end
40
- end
41
- end
42
-
43
- attr_reader :search_session
44
- attr_reader :retry_handler
45
-
46
- delegate :new_search, :search, :config,
47
- :new_more_like_this, :more_like_this,
48
- :delete_dirty, :delete_dirty?,
49
- :to => :search_session
50
-
51
- def initialize(search_session = Sunspot.session)
52
- @search_session = search_session
53
- @retry_handler = RetryHandler.new(search_session)
54
- end
55
-
56
- def rescued_exception(method, e)
57
- $stderr.puts("Exception in #{method}: #{e.message}")
58
- end
59
-
60
- delegate :batch, :commit, :commit_if_dirty, :commit_if_delete_dirty,
61
- :dirty?, :index!, :index, :optimize, :remove!, :remove, :remove_all!,
62
- :remove_all, :remove_by_id!, :remove_by_id,
63
- :to => :retry_handler
64
-
65
- end
66
- end
67
- end
@@ -1,222 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'abstract_session_proxy')
2
-
3
- module Sunspot
4
- module SessionProxy
5
- #
6
- # This is a generic abstract implementation of a session proxy that allows
7
- # Sunspot to be used with a distributed (sharded) Solr deployment. Concrete
8
- # subclasses should implement the #session_for method, which takes a
9
- # searchable object and returns a Session that points to the appropriate
10
- # Solr shard for that object. Subclasses should also implement the
11
- # #all_sessions object, which returns the collection of all sharded Session
12
- # objects.
13
- #
14
- # The class is initialized with a session that points to the Solr instance
15
- # used to perform searches. Searches will have the +:shards+ param injected,
16
- # containing references to the Solr instances returned by #all_sessions.
17
- #
18
- # For more on distributed search, see:
19
- # http://wiki.apache.org/solr/DistributedSearch
20
- #
21
- # The following methods are not supported (although subclasses may in some
22
- # cases be able to support them):
23
- #
24
- # * batch
25
- # * config
26
- # * remove_by_id
27
- # * remove_by_id!
28
- # * remove_all with an argument
29
- # * remove_all! with an argument
30
- #
31
- class ShardingSessionProxy < AbstractSessionProxy
32
- not_supported :batch, :config, :remove_by_id, :remove_by_id!
33
-
34
- #
35
- # +search_session+ is the session that should be used for searching.
36
- #
37
- def initialize(search_session = Sunspot.session.new)
38
- @search_session = search_session
39
- end
40
-
41
- #
42
- # Return the appropriate shard session for the object.
43
- #
44
- # <strong>Concrete subclasses must implement this method.</strong>
45
- #
46
- def session_for(object)
47
- raise NotImplementedError
48
- end
49
-
50
- #
51
- # Return all shard sessions.
52
- #
53
- # <strong>Concrete subclasses must implement this method.</strong>
54
- #
55
- def all_sessions
56
- raise NotImplementedError
57
- end
58
-
59
- #
60
- # See Sunspot.index
61
- #
62
- def index(*objects)
63
- using_sharded_session(objects) { |session, group| session.index(group) }
64
- end
65
-
66
- #
67
- # See Sunspot.index!
68
- #
69
- def index!(*objects)
70
- using_sharded_session(objects) { |session, group| session.index!(group) }
71
- end
72
-
73
- #
74
- # See Sunspot.remove
75
- #
76
- def remove(*objects)
77
- using_sharded_session(objects) { |session, group| session.remove(group) }
78
- end
79
-
80
- #
81
- # See Sunspot.remove!
82
- #
83
- def remove!(*objects)
84
- using_sharded_session(objects) { |session, group| session.remove!(group) }
85
- end
86
-
87
- #
88
- # If no argument is passed, behaves like Sunspot.remove_all
89
- #
90
- # If an argument is passed, will raise NotSupportedError, as the proxy
91
- # does not know which session(s) to which to delegate this operation.
92
- #
93
- def remove_all(clazz = nil)
94
- if clazz
95
- raise NotSupportedError, "Sharding session proxy does not support remove_all with an argument."
96
- else
97
- all_sessions.each { |session| session.remove_all }
98
- end
99
- end
100
-
101
- #
102
- # If no argument is passed, behaves like Sunspot.remove_all!
103
- #
104
- # If an argument is passed, will raise NotSupportedError, as the proxy
105
- # does not know which session(s) to which to delegate this operation.
106
- #
107
- def remove_all!(clazz = nil)
108
- if clazz
109
- raise NotSupportedError, "Sharding session proxy does not support remove_all! with an argument."
110
- else
111
- all_sessions.each { |session| session.remove_all! }
112
- end
113
- end
114
-
115
- #
116
- # Commit all shards. See Sunspot.commit
117
- #
118
- def commit
119
- all_sessions.each { |session| session.commit }
120
- end
121
-
122
- #
123
- # Optimize all shards. See Sunspot.optimize
124
- #
125
- def optimize
126
- all_sessions.each { |session| session.optimize }
127
- end
128
-
129
- #
130
- # Commit all dirty sessions. Only dirty sessions will be committed.
131
- #
132
- # See Sunspot.commit_if_dirty
133
- #
134
- def commit_if_dirty
135
- all_sessions.each { |session| session.commit_if_dirty }
136
- end
137
-
138
- #
139
- # Commit all delete-dirty sessions. Only delete-dirty sessions will be
140
- # committed.
141
- #
142
- # See Sunspot.commit_if_delete_dirty
143
- #
144
- def commit_if_delete_dirty
145
- all_sessions.each { |session| session.commit_if_delete_dirty }
146
- end
147
-
148
- #
149
- # Instantiate a new Search object, but don't execute it. The search will
150
- # have an extra :shards param injected into the query, which will tell the
151
- # Solr instance referenced by the search session to search across all
152
- # shards.
153
- #
154
- # See Sunspot.new_search
155
- #
156
- def new_search(*types)
157
- shard_urls = all_sessions.map { |session| session.config.solr.url }
158
- search = @search_session.new_search(*types)
159
- search.build do
160
- adjust_solr_params { |params| params[:shards] = shard_urls.join(',') }
161
- # I feel a little dirty doing this.
162
- end
163
- search
164
- end
165
-
166
- #
167
- # Build and execute a new Search. The search will have an extra :shards
168
- # param injected into the query, which will tell the Solr instance
169
- # referenced by the search session to search across all shards.
170
- #
171
- # See Sunspot.search
172
- #
173
- def search(*types, &block)
174
- new_search(*types).execute
175
- end
176
-
177
- def more_like_this(object, &block)
178
- #FIXME should use shards
179
- new_more_like_this(object, &block).execute
180
- end
181
-
182
- def new_more_like_this(object, &block)
183
- @search_session.new_more_like_this(object, &block)
184
- end
185
-
186
- #
187
- # True if any shard session is dirty. Note that directly using the
188
- # #commit_if_dirty method is more efficient if that's what you're
189
- # trying to do, since in that case only the dirty sessions are committed.
190
- #
191
- # See Sunspot.dirty?
192
- #
193
- def dirty?
194
- all_sessions.any? { |session| session.dirty? }
195
- end
196
-
197
- #
198
- # True if any shard session is delete-dirty. Note that directly using the
199
- # #commit_if_delete_dirty method is more efficient if that's what you're
200
- # trying to do, since in that case only the delete-dirty sessions are
201
- # committed.
202
- #
203
- def delete_dirty?
204
- all_sessions.any? { |session| session.delete_dirty? }
205
- end
206
-
207
- private
208
-
209
- #
210
- # Group the objects by which shard session they correspond to, and yield
211
- # each session and is corresponding group of objects.
212
- #
213
- def using_sharded_session(objects)
214
- grouped_objects = Hash.new { |h, k| h[k] = [] }
215
- objects.flatten.each { |object| grouped_objects[session_for(object)] << object }
216
- grouped_objects.each_pair do |session, group|
217
- yield(session, group)
218
- end
219
- end
220
- end
221
- end
222
- end