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

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