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,275 +0,0 @@
1
- shared_examples_for "scoped query" do
2
- it 'scopes by exact match with a string' do
3
- search do
4
- with :title, 'My Pet Post'
5
- end
6
- connection.should have_last_search_including(:fq, 'title_ss:My\ Pet\ Post')
7
- end
8
-
9
- it 'scopes by exact match with a special string' do
10
- search do
11
- with :title, 'OR'
12
- end
13
- connection.should have_last_search_including(:fq, 'title_ss:"OR"')
14
- end
15
-
16
- it 'scopes by exact match with time' do
17
- time = Time.parse('1983-07-08 05:00:00 -0400')
18
- search do
19
- with :published_at, time
20
- end
21
- connection.should have_last_search_including(
22
- :fq,
23
- 'published_at_dt:1983\-07\-08T09\:00\:00Z'
24
- )
25
- end
26
-
27
- it 'scopes by exact match with date' do
28
- date = Date.new(1983, 7, 8)
29
- search do
30
- with :expire_date, date
31
- end
32
- connection.should have_last_search_including(
33
- :fq,
34
- 'expire_date_d:1983\-07\-08T00\:00\:00Z'
35
- )
36
- end
37
-
38
- it 'scopes by exact match with boolean' do
39
- search do
40
- with :featured, false
41
- end
42
- connection.should have_last_search_including(:fq, 'featured_bs:false')
43
- end
44
-
45
- it 'scopes by less than match with float' do
46
- search do
47
- with(:average_rating).less_than 3.0
48
- end
49
- connection.should have_last_search_including(:fq, 'average_rating_ft:{* TO 3\.0}')
50
- end
51
-
52
- it 'should quote string with space in a less than match' do
53
- search do
54
- with(:title).less_than('test value')
55
- end
56
- connection.should have_last_search_including(:fq, 'title_ss:{* TO "test\ value"}')
57
- end
58
-
59
- it 'scopes by greater than match with float' do
60
- search do
61
- with(:average_rating).greater_than 3.0
62
- end
63
- connection.should have_last_search_including(:fq, 'average_rating_ft:{3\.0 TO *}')
64
- end
65
-
66
- it 'scopes by short-form between match with integers' do
67
- search do
68
- with :blog_id, 2..4
69
- end
70
- connection.should have_last_search_including(:fq, 'blog_id_i:[2 TO 4]')
71
- end
72
-
73
- it 'scopes by between match with float' do
74
- search do
75
- with(:average_rating).between 2.0..4.0
76
- end
77
- connection.should have_last_search_including(:fq, 'average_rating_ft:[2\.0 TO 4\.0]')
78
- end
79
-
80
- it 'scopes by any match with integer' do
81
- search do
82
- with(:category_ids).any_of [2, 7, 12]
83
- end
84
- connection.should have_last_search_including(:fq, 'category_ids_im:(2 OR 7 OR 12)')
85
- end
86
-
87
- it 'scopes by short-form any-of match with integers' do
88
- search do
89
- with :category_ids, [2, 7, 12]
90
- end
91
- connection.should have_last_search_including(:fq, 'category_ids_im:(2 OR 7 OR 12)')
92
- end
93
-
94
- it 'scopes by all match with integer' do
95
- search do
96
- with(:category_ids).all_of [2, 7, 12]
97
- end
98
- connection.should have_last_search_including(:fq, 'category_ids_im:(2 AND 7 AND 12)')
99
- end
100
-
101
- it 'scopes by prefix match with string' do
102
- search do
103
- with(:title).starting_with('tes')
104
- end
105
- connection.should have_last_search_including(:fq, 'title_ss:tes*')
106
- end
107
-
108
- it 'scopes by not equal match with string' do
109
- search do
110
- without :title, 'Bad Post'
111
- end
112
- connection.should have_last_search_including(:fq, '-title_ss:Bad\ Post')
113
- end
114
-
115
- it 'scopes by not less than match with float' do
116
- search do
117
- without(:average_rating).less_than 3.0
118
- end
119
- connection.should have_last_search_including(:fq, '-average_rating_ft:{* TO 3\.0}')
120
- end
121
-
122
- it 'scopes by not greater than match with float' do
123
- search do
124
- without(:average_rating).greater_than 3.0
125
- end
126
- connection.should have_last_search_including(:fq, '-average_rating_ft:{3\.0 TO *}')
127
- end
128
-
129
- it 'scopes by not between match with shorthand' do
130
- search do
131
- without(:blog_id, 2..4)
132
- end
133
- connection.should have_last_search_including(:fq, '-blog_id_i:[2 TO 4]')
134
- end
135
-
136
- it 'scopes by not between match with float' do
137
- search do
138
- without(:average_rating).between 2.0..4.0
139
- end
140
- connection.should have_last_search_including(:fq, '-average_rating_ft:[2\.0 TO 4\.0]')
141
- end
142
-
143
- it 'scopes by not any match with integer' do
144
- search do
145
- without(:category_ids).any_of [2, 7, 12]
146
- end
147
- connection.should have_last_search_including(:fq, '-category_ids_im:(2 OR 7 OR 12)')
148
- end
149
-
150
- it 'scopes by not all match with integer' do
151
- search do
152
- without(:category_ids).all_of [2, 7, 12]
153
- end
154
- connection.should have_last_search_including(:fq, '-category_ids_im:(2 AND 7 AND 12)')
155
- end
156
-
157
- it 'scopes by empty field' do
158
- search do
159
- with :average_rating, nil
160
- end
161
- connection.should have_last_search_including(:fq, '-average_rating_ft:[* TO *]')
162
- end
163
-
164
- it 'scopes by non-empty field' do
165
- search do
166
- without :average_rating, nil
167
- end
168
- connection.should have_last_search_including(:fq, 'average_rating_ft:[* TO *]')
169
- end
170
-
171
- it 'includes by object identity' do
172
- post = Post.new
173
- search do
174
- with post
175
- end
176
- connection.should have_last_search_including(:fq, "id:(Post\\ #{post.id})")
177
- end
178
-
179
- it 'includes multiple objects passed as varargs by object identity' do
180
- post1, post2 = Post.new, Post.new
181
- search do
182
- with post1, post2
183
- end
184
- connection.should have_last_search_including(
185
- :fq, "id:(Post\\ #{post1.id} OR Post\\ #{post2.id})"
186
- )
187
- end
188
-
189
- it 'includes multiple objects passed as array by object identity' do
190
- posts = [Post.new, Post.new]
191
- search do
192
- with posts
193
- end
194
- connection.should have_last_search_including(
195
- :fq, "id:(Post\\ #{posts.first.id} OR Post\\ #{posts.last.id})"
196
- )
197
- end
198
-
199
- it 'excludes by object identity' do
200
- post = Post.new
201
- search do
202
- without post
203
- end
204
- connection.should have_last_search_including(:fq, "-id:(Post\\ #{post.id})")
205
- end
206
-
207
- it 'excludes multiple objects passed as varargs by object identity' do
208
- post1, post2 = Post.new, Post.new
209
- search do
210
- without post1, post2
211
- end
212
- connection.should have_last_search_including(
213
- :fq,
214
- "-id:(Post\\ #{post1.id} OR Post\\ #{post2.id})"
215
- )
216
- end
217
-
218
- it 'excludes multiple objects passed as array by object identity' do
219
- posts = [Post.new, Post.new]
220
- search do
221
- without posts
222
- end
223
- connection.should have_last_search_including(
224
- :fq,
225
- "-id:(Post\\ #{posts.first.id} OR Post\\ #{posts.last.id})"
226
- )
227
- end
228
-
229
- it 'allows scoping on fields common to all types' do
230
- time = Time.parse('1983-07-08 05:00:00 -0400')
231
- search Post, Namespaced::Comment do
232
- with :published_at, time
233
- end
234
- connection.should have_last_search_including(:fq, 'published_at_dt:1983\-07\-08T09\:00\:00Z')
235
- end
236
-
237
- it 'allows scoping on field not common to all types' do
238
- search Post, Namespaced::Comment do
239
- with :blog_id, 1
240
- end
241
- connection.should have_last_search_including(:fq, 'blog_id_i:1')
242
- end
243
-
244
- it 'raises Sunspot::UnrecognizedFieldError if search scoped to field configured differently between types' do
245
- lambda do
246
- search Post, Namespaced::Comment do
247
- with :average_rating, 2.2 # this is a float in Post but an integer in Comment
248
- end
249
- end.should raise_error(Sunspot::UnrecognizedFieldError)
250
- end
251
-
252
- it 'raises Sunspot::UnrecognizedFieldError for nonexistant fields in block scope' do
253
- lambda do
254
- search do
255
- with :bogus, 'Field'
256
- end
257
- end.should raise_error(Sunspot::UnrecognizedFieldError)
258
- end
259
-
260
- it 'raises NoMethodError if bogus operator referenced' do
261
- lambda do
262
- search do
263
- with(:category_ids).resembling :bogus_condition
264
- end
265
- end.should raise_error(NoMethodError)
266
- end
267
-
268
- it 'should raise ArgumentError if more than two arguments passed to scope method' do
269
- lambda do
270
- search do
271
- with(:category_ids, 4, 5)
272
- end
273
- end.should raise_error(ArgumentError)
274
- end
275
- end
@@ -1,27 +0,0 @@
1
- require 'bigdecimal'
2
-
3
- shared_examples_for "spatial query" do
4
- it 'filters by radius' do
5
- search do
6
- with(:coordinates_new).in_radius(23, -46, 100)
7
- end
8
-
9
- connection.should have_last_search_including(:fq, "{!geofilt sfield=coordinates_new_ll pt=23,-46 d=100}")
10
- end
11
-
12
- it 'filters by radius via bbox (inexact)' do
13
- search do
14
- with(:coordinates_new).in_radius(23, -46, 100, :bbox => true)
15
- end
16
-
17
- connection.should have_last_search_including(:fq, "{!bbox sfield=coordinates_new_ll pt=23,-46 d=100}")
18
- end
19
-
20
- it 'filters by bounding box' do
21
- search do
22
- with(:coordinates_new).in_bounding_box([45, -94], [46, -93])
23
- end
24
-
25
- connection.should have_last_search_including(:fq, "coordinates_new_ll:[45,-94 TO 46,-93]")
26
- end
27
- end
@@ -1 +0,0 @@
1
- require File.expand_path('spec_helper', File.join(File.dirname(__FILE__), '..'))
@@ -1,29 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
-
3
- describe 'standard query', :type => :query do
4
- it_should_behave_like "scoped query"
5
- it_should_behave_like "query with advanced manipulation"
6
- it_should_behave_like "query with connective scope"
7
- it_should_behave_like "query with dynamic field support"
8
- it_should_behave_like "facetable query"
9
- it_should_behave_like "fulltext query"
10
- it_should_behave_like "query with highlighting support"
11
- it_should_behave_like "sortable query"
12
- it_should_behave_like "query with text field scoping"
13
- it_should_behave_like "geohash query"
14
- it_should_behave_like "spatial query"
15
-
16
- it 'adds a no-op query to :q parameter when no :q provided' do
17
- session.search Post do
18
- with :title, 'My Pet Post'
19
- end
20
- connection.should have_last_search_with(:q => '*:*')
21
- end
22
-
23
- private
24
-
25
- def search(*classes, &block)
26
- classes[0] ||= Post
27
- session.search(*classes, &block)
28
- end
29
- end
@@ -1,30 +0,0 @@
1
- shared_examples_for 'query with text field scoping' do
2
- it 'should scope with a text field' do
3
- search do
4
- text_fields do
5
- with(:body, 'test')
6
- end
7
- end
8
- connection.should have_last_search_including(:fq, 'body_textsv:test')
9
- end
10
-
11
- it 'should raise an UnrecognizedFieldError if differently configured text field is used' do
12
- lambda do
13
- search(Post, Namespaced::Comment) do
14
- text_fields do
15
- with(:body, 'test')
16
- end
17
- end
18
- end.should raise_error(Sunspot::UnrecognizedFieldError)
19
- end
20
-
21
- it 'should raise an UnrecognizedFieldError if no field exists' do
22
- lambda do
23
- search do
24
- text_fields do
25
- with(:bogus, 'test')
26
- end
27
- end
28
- end.should raise_error(Sunspot::UnrecognizedFieldError)
29
- end
30
- end
@@ -1,20 +0,0 @@
1
- describe 'typed query' do
2
- it 'properly escapes namespaced type names' do
3
- session.search(Namespaced::Comment)
4
- connection.should have_last_search_with(:fq => ['type:Namespaced\:\:Comment'])
5
- end
6
-
7
- it 'builds search for multiple types' do
8
- session.search(Post, Namespaced::Comment)
9
- connection.should have_last_search_with(:fq => ['type:(Post OR Namespaced\:\:Comment)'])
10
- end
11
-
12
- it 'searches type of subclass when superclass is configured' do
13
- session.search PhotoPost
14
- connection.should have_last_search_with(:fq => ['type:PhotoPost'])
15
- end
16
-
17
- it 'raises an ArgumentError if no types given to search' do
18
- lambda { session.search }.should raise_error(ArgumentError)
19
- end
20
- end
@@ -1,33 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
-
3
- describe 'search with dynamic fields' do
4
- it 'returns dynamic string facet' do
5
- stub_facet(:"custom_string:test_ss", 'two' => 2, 'one' => 1)
6
- result = session.search(Post) { dynamic(:custom_string) { facet(:test) }}
7
- result.facet(:custom_string, :test).rows.map { |row| row.value }.should == ['two', 'one']
8
- end
9
-
10
- it 'returns dynamic field facet with custom label' do
11
- stub_facet(:"bogus", 'two' => 2, 'one' => 1)
12
- result = session.search(Post) { dynamic(:custom_string) { facet(:test, :name => :bogus) }}
13
- result.facet(:bogus).rows.map { |row| row.value }.should == ['two', 'one']
14
- end
15
-
16
- it 'returns query facet specified in dynamic call' do
17
- stub_query_facet(
18
- 'custom_string\:test_ss:(foo OR bar)' => 3
19
- )
20
- search = session.search(Post) do
21
- dynamic :custom_string do
22
- facet :test do
23
- row :foo_bar do
24
- with :test, %w(foo bar)
25
- end
26
- end
27
- end
28
- end
29
- facet = search.facet(:test)
30
- facet.rows.first.value.should == :foo_bar
31
- facet.rows.first.count.should == 3
32
- end
33
- end
@@ -1,360 +0,0 @@
1
- require File.expand_path('spec_helper', File.dirname(__FILE__))
2
-
3
- describe 'faceting', :type => :search do
4
- it 'returns field name for facet' do
5
- stub_facet(:title_ss, {})
6
- result = session.search Post do
7
- facet :title
8
- end
9
- result.facet(:title).field_name.should == :title
10
- end
11
-
12
- it 'returns facet specified by string' do
13
- stub_facet(:title_ss, {})
14
- result = session.search Post do
15
- facet :title
16
- end
17
- result.facet('title').field_name.should == :title
18
- end
19
-
20
- it 'returns all facets specified by search' do
21
- stub_facet(:title_ss, { 'Author 1' => 1 })
22
- stub_facet(:blog_id_i, { '1' => 3 })
23
- result = session.search(Post) do
24
- facet :title
25
- facet :blog_id
26
- end
27
- result.facets.first.field_name.should == :title
28
- result.facets.last.field_name.should == :blog_id
29
- end
30
-
31
- it 'returns string facet' do
32
- stub_facet(:title_ss, 'Author 1' => 2, 'Author 2' => 1)
33
- result = session.search Post do
34
- facet :title
35
- end
36
- facet_values(result, :title).should == ['Author 1', 'Author 2']
37
- end
38
-
39
- it 'returns counts for facet' do
40
- stub_facet(:title_ss, 'Author 1' => 2, 'Author 2' => 1)
41
- result = session.search Post do
42
- facet :title
43
- end
44
- facet_counts(result, :title).should == [2, 1]
45
- end
46
-
47
- it 'returns integer facet' do
48
- stub_facet(:blog_id_i, '3' => 2, '1' => 1)
49
- result = session.search Post do
50
- facet :blog_id
51
- end
52
- facet_values(result, :blog_id).should == [3, 1]
53
- end
54
-
55
- it 'returns float facet' do
56
- stub_facet(:average_rating_ft, '9.3' => 2, '1.1' => 1)
57
- result = session.search Post do
58
- facet :average_rating
59
- end
60
- facet_values(result, :average_rating).should == [9.3, 1.1]
61
- end
62
-
63
- it 'returns time facet' do
64
- stub_facet(
65
- :published_at_dt,
66
- '2009-04-07T20:25:23Z' => 3,
67
- '2009-04-07T20:26:19Z' => 2,
68
- '2050-04-07T20:27:15Z' => 1
69
- )
70
- result = session.search Post do
71
- facet :published_at
72
- end
73
- # In JRuby, Time doesn't have 32-bit range constraint, apparently.
74
- future_time =
75
- begin
76
- Time.gm(2050, 4, 7, 20, 27, 15)
77
- rescue ArgumentError
78
- DateTime.civil(2050, 4, 7, 20, 27, 15)
79
- end
80
- facet_values(result, :published_at).should ==
81
- [Time.gm(2009, 4, 7, 20, 25, 23),
82
- Time.gm(2009, 4, 7, 20, 26, 19),
83
- future_time]
84
- end
85
-
86
- it 'returns date facet' do
87
- stub_facet(
88
- :expire_date_d,
89
- '2009-07-13T00:00:00Z' => 3,
90
- '2009-04-01T00:00:00Z' => 1
91
- )
92
- result = session.search(Post) do
93
- facet :expire_date
94
- end
95
- facet_values(result, :expire_date).should ==
96
- [Date.new(2009, 07, 13),
97
- Date.new(2009, 04, 01)]
98
- end
99
-
100
- it 'returns trie integer facet' do
101
- stub_facet(:size_it, '3' => 2, '1' => 1)
102
- result = session.search Photo do
103
- facet :size
104
- end
105
- facet_values(result, :size).should == [3, 1]
106
- end
107
-
108
- it 'returns float facet' do
109
- stub_facet(:average_rating_ft, '9.3' => 2, '1.1' => 1)
110
- result = session.search Photo do
111
- facet :average_rating
112
- end
113
- facet_values(result, :average_rating).should == [9.3, 1.1]
114
- end
115
-
116
- it 'returns time facet' do
117
- stub_facet(
118
- :created_at_dt,
119
- '2009-04-07T20:25:23Z' => 3,
120
- '2009-04-07T20:26:19Z' => 1
121
- )
122
- result = session.search Photo do
123
- facet :created_at
124
- end
125
- facet_values(result, :created_at).should ==
126
- [Time.gm(2009, 04, 07, 20, 25, 23),
127
- Time.gm(2009, 04, 07, 20, 26, 19)]
128
- end
129
-
130
- it 'returns boolean facet' do
131
- stub_facet(:featured_bs, 'true' => 3, 'false' => 1)
132
- result = session.search(Post) { facet(:featured) }
133
- facet_values(result, :featured).should == [true, false]
134
- end
135
-
136
-
137
- { 'string' => 'blog', 'symbol' => :blog }.each_pair do |type, name|
138
- it "returns field facet with #{type} custom name" do
139
- stub_facet(:blog, '2' => 1, '1' => 4)
140
- result = session.search(Post) { facet(:blog_id, :name => name) }
141
- facet_values(result, :blog).should == [1, 2]
142
- end
143
-
144
- it "assigns #{type} custom name to field facet" do
145
- stub_facet(:blog, '2' => 1)
146
- result = session.search(Post) { facet(:blog_id, :name => name) }
147
- result.facet(:blog).name.should == :blog
148
- end
149
-
150
- it "retains field name for #{type} custom-named field facet" do
151
- stub_facet(:blog, '2' => 1)
152
- result = session.search(Post) { facet(:blog_id, :name => name) }
153
- result.facet(:blog).field_name.should == :blog_id
154
- end
155
- end
156
-
157
- it 'returns class facet' do
158
- stub_facet(:class_name, 'Post' => 3, 'Namespaced::Comment' => 1)
159
- result = session.search(Post) { facet(:class) }
160
- facet_values(result, :class).should == [Post, Namespaced::Comment]
161
- end
162
-
163
- it 'returns special :any facet' do
164
- stub_query_facet(
165
- 'category_ids_im:[* TO *]' => 3
166
- )
167
- search = session.search(Post) { facet(:category_ids, :extra => :any) }
168
- row = search.facet(:category_ids).rows.first
169
- row.value.should == :any
170
- row.count.should == 3
171
- end
172
-
173
- it 'returns special :none facet' do
174
- stub_query_facet(
175
- '-category_ids_im:[* TO *]' => 3
176
- )
177
- search = session.search(Post) { facet(:category_ids, :extra => :none) }
178
- row = search.facet(:category_ids).rows.first
179
- row.value.should == :none
180
- row.count.should == 3
181
- end
182
-
183
- it 'returns date range facet' do
184
- stub_date_facet(:published_at_dt, 60*60*24, '2009-07-08T04:00:00Z' => 2, '2009-07-07T04:00:00Z' => 1)
185
- start_time = Time.utc(2009, 7, 7, 4)
186
- end_time = start_time + 2*24*60*60
187
- result = session.search(Post) { facet(:published_at, :time_range => start_time..end_time) }
188
- facet = result.facet(:published_at)
189
- facet.rows.first.value.should == (start_time..(start_time+24*60*60))
190
- facet.rows.last.value.should == ((start_time+24*60*60)..end_time)
191
- end
192
-
193
- it 'returns date range facet sorted by count' do
194
- stub_date_facet(:published_at_dt, 60*60*24, '2009-07-08T04:00:00Z' => 2, '2009-07-07T04:00:00Z' => 1)
195
- start_time = Time.utc(2009, 7, 7, 4)
196
- end_time = start_time + 2*24*60*60
197
- result = session.search(Post) { facet(:published_at, :time_range => start_time..end_time, :sort => :count) }
198
- facet = result.facet(:published_at)
199
- facet.rows.first.value.should == ((start_time+24*60*60)..end_time)
200
- facet.rows.last.value.should == (start_time..(start_time+24*60*60))
201
- end
202
-
203
- it 'returns query facet' do
204
- stub_query_facet(
205
- 'average_rating_ft:[3\.0 TO 5\.0]' => 3,
206
- 'average_rating_ft:[1\.0 TO 3\.0]' => 1
207
- )
208
- search = session.search(Post) do
209
- facet :average_rating do
210
- row 3.0..5.0 do
211
- with :average_rating, 3.0..5.0
212
- end
213
- row 1.0..3.0 do
214
- with :average_rating, 1.0..3.0
215
- end
216
- end
217
- end
218
- facet = search.facet(:average_rating)
219
- facet.rows.first.value.should == (3.0..5.0)
220
- facet.rows.first.count.should == 3
221
- facet.rows.last.value.should == (1.0..3.0)
222
- facet.rows.last.count.should == 1
223
- end
224
-
225
- describe 'query facet option handling' do
226
- def facet_values_from_options(options = {})
227
- session.search(Post) do
228
- facet :average_rating, options do
229
- row(1) { with(:average_rating, 1.0..2.0) }
230
- row(3) { with(:average_rating, 3.0..4.0) }
231
- row(2) { with(:average_rating, 2.0..3.0) }
232
- row(4) { with(:average_rating, 4.0..5.0) }
233
- end
234
- end.facet(:average_rating).rows.map { |row| row.value }
235
- end
236
-
237
- before :each do
238
- stub_query_facet(
239
- 'average_rating_ft:[1\.0 TO 2\.0]' => 2,
240
- 'average_rating_ft:[2\.0 TO 3\.0]' => 3,
241
- 'average_rating_ft:[3\.0 TO 4\.0]' => 1,
242
- 'average_rating_ft:[4\.0 TO 5\.0]' => 0
243
- )
244
- end
245
-
246
- it 'sorts in order of specification if no limit is given' do
247
- facet_values_from_options.should == [1, 3, 2]
248
- end
249
-
250
- it 'sorts lexically if lexical option is specified' do
251
- facet_values_from_options(:sort => :index).should == [1, 2, 3]
252
- end
253
-
254
- it 'sorts by count by default if limit is given' do
255
- facet_values_from_options(:limit => 2).should == [2, 1]
256
- end
257
-
258
- it 'sorts by count if count option is specified' do
259
- facet_values_from_options(:sort => :count).should == [2, 1, 3]
260
- end
261
-
262
- it 'sorts lexically if lexical option is specified even if limit is given' do
263
- facet_values_from_options(:sort => :index, :limit => 2).should == [1, 2]
264
- end
265
-
266
- it 'limits facets if limit option is given' do
267
- facet_values_from_options(:limit => 1).should == [2]
268
- end
269
-
270
- it 'does not limit facets if limit option is negative' do
271
- facet_values_from_options(:limit => -2).should == [1, 3, 2]
272
- end
273
-
274
- it 'returns all facets if limit greater than number of facets' do
275
- facet_values_from_options(:limit => 10).should == [2, 1, 3]
276
- end
277
-
278
- it 'allows zero count if specified' do
279
- facet_values_from_options(:zeros => true).should == [1, 3, 2, 4]
280
- end
281
-
282
- it 'sets minimum count' do
283
- facet_values_from_options(:minimum_count => 2).should == [1, 2]
284
- end
285
- end
286
-
287
- it 'returns limited field facet' do
288
- stub_query_facet(
289
- 'category_ids_im:1' => 3,
290
- 'category_ids_im:3' => 1
291
- )
292
- search = session.search(Post) do
293
- facet :category_ids, :only => [1, 3, 5]
294
- end
295
- facet = search.facet(:category_ids)
296
- facet.rows.first.value.should == 1
297
- facet.rows.first.count.should == 3
298
- facet.rows.last.value.should == 3
299
- facet.rows.last.count.should == 1
300
- end
301
-
302
- it 'returns instantiated facet values' do
303
- blogs = Array.new(2) { Blog.new }
304
- stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
305
- search = session.search(Post) { facet(:blog_id) }
306
- search.facet(:blog_id).rows.map { |row| row.instance }.should == blogs
307
- end
308
-
309
- it 'returns all instantiated facet rows, whether or not the instances exist' do
310
- blogs = Array.new(2) { Blog.new }
311
- blogs.last.destroy
312
- stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
313
- search = session.search(Post) { facet(:blog_id) }
314
- search.facet(:blog_id).rows.map { |row| row.instance }.should == [blogs.first, nil]
315
- end
316
-
317
- it 'returns only rows with available instances if specified' do
318
- blogs = Array.new(2) { Blog.new }
319
- blogs.last.destroy
320
- stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
321
- search = session.search(Post) { facet(:blog_id) }
322
- search.facet(:blog_id).rows(:verify => true).map { |row| row.instance }.should == blogs[0..0]
323
- end
324
-
325
- it 'returns both verified and unverified rows from the same facet' do
326
- blogs = Array.new(2) { Blog.new }
327
- blogs.last.destroy
328
- stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
329
- search = session.search(Post) { facet(:blog_id) }
330
- search.facet(:blog_id).rows(:verify => true).map { |row| row.instance }.should == blogs[0..0]
331
- search.facet(:blog_id).rows.map { |row| row.instance }.should == [blogs.first, nil]
332
- end
333
-
334
- it 'ignores :verify option if facet not a reference facet' do
335
- stub_facet(:category_ids_im, '1' => 2, '2' => 1)
336
- search = session.search(Post) { facet(:category_ids) }
337
- search.facet(:category_ids).should have(2).rows(:verify => true)
338
- end
339
-
340
- it 'returns instantiated facet values for limited field facet' do
341
- blogs = Array.new(2) { Blog.new }
342
- stub_query_facet(
343
- "blog_id_i:#{blogs[0].id}" => 3,
344
- "blog_id_i:#{blogs[1].id}" => 1
345
- )
346
- search = session.search(Post) do
347
- facet(:blog_id, :only => blogs.map { |blog| blog.id })
348
- end
349
- search.facet(:blog_id).rows.map { |row| row.instance }.should == blogs
350
- end
351
-
352
- it 'only queries the persistent store once for an instantiated facet' do
353
- query_count = Blog.query_count
354
- blogs = Array.new(2) { Blog.new }
355
- stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
356
- result = session.search(Post) { facet(:blog_id) }
357
- result.facet(:blog_id).rows.each { |row| row.instance }
358
- (Blog.query_count - query_count).should == 1
359
- end
360
- end