friendlyfashion-thinking-sphinx 2.0.13

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 (175) hide show
  1. data/HISTORY +244 -0
  2. data/LICENCE +20 -0
  3. data/README.textile +235 -0
  4. data/features/abstract_inheritance.feature +10 -0
  5. data/features/alternate_primary_key.feature +27 -0
  6. data/features/attribute_transformation.feature +22 -0
  7. data/features/attribute_updates.feature +77 -0
  8. data/features/deleting_instances.feature +67 -0
  9. data/features/direct_attributes.feature +11 -0
  10. data/features/excerpts.feature +21 -0
  11. data/features/extensible_delta_indexing.feature +9 -0
  12. data/features/facets.feature +88 -0
  13. data/features/facets_across_model.feature +29 -0
  14. data/features/field_sorting.feature +18 -0
  15. data/features/handling_edits.feature +94 -0
  16. data/features/retry_stale_indexes.feature +24 -0
  17. data/features/searching_across_models.feature +20 -0
  18. data/features/searching_by_index.feature +40 -0
  19. data/features/searching_by_model.feature +175 -0
  20. data/features/searching_with_find_arguments.feature +56 -0
  21. data/features/sphinx_detection.feature +25 -0
  22. data/features/sphinx_scopes.feature +68 -0
  23. data/features/step_definitions/alpha_steps.rb +16 -0
  24. data/features/step_definitions/beta_steps.rb +7 -0
  25. data/features/step_definitions/common_steps.rb +201 -0
  26. data/features/step_definitions/extensible_delta_indexing_steps.rb +7 -0
  27. data/features/step_definitions/facet_steps.rb +96 -0
  28. data/features/step_definitions/find_arguments_steps.rb +36 -0
  29. data/features/step_definitions/gamma_steps.rb +15 -0
  30. data/features/step_definitions/scope_steps.rb +19 -0
  31. data/features/step_definitions/search_steps.rb +94 -0
  32. data/features/step_definitions/sphinx_steps.rb +35 -0
  33. data/features/sti_searching.feature +19 -0
  34. data/features/support/env.rb +27 -0
  35. data/features/support/lib/generic_delta_handler.rb +8 -0
  36. data/features/thinking_sphinx/database.example.yml +3 -0
  37. data/features/thinking_sphinx/db/.gitignore +1 -0
  38. data/features/thinking_sphinx/db/fixtures/alphas.rb +8 -0
  39. data/features/thinking_sphinx/db/fixtures/authors.rb +1 -0
  40. data/features/thinking_sphinx/db/fixtures/betas.rb +11 -0
  41. data/features/thinking_sphinx/db/fixtures/boxes.rb +9 -0
  42. data/features/thinking_sphinx/db/fixtures/categories.rb +1 -0
  43. data/features/thinking_sphinx/db/fixtures/cats.rb +3 -0
  44. data/features/thinking_sphinx/db/fixtures/comments.rb +24 -0
  45. data/features/thinking_sphinx/db/fixtures/developers.rb +31 -0
  46. data/features/thinking_sphinx/db/fixtures/dogs.rb +3 -0
  47. data/features/thinking_sphinx/db/fixtures/extensible_betas.rb +10 -0
  48. data/features/thinking_sphinx/db/fixtures/foxes.rb +3 -0
  49. data/features/thinking_sphinx/db/fixtures/gammas.rb +10 -0
  50. data/features/thinking_sphinx/db/fixtures/music.rb +4 -0
  51. data/features/thinking_sphinx/db/fixtures/people.rb +1001 -0
  52. data/features/thinking_sphinx/db/fixtures/post_keywords.txt +1 -0
  53. data/features/thinking_sphinx/db/fixtures/posts.rb +10 -0
  54. data/features/thinking_sphinx/db/fixtures/robots.rb +8 -0
  55. data/features/thinking_sphinx/db/fixtures/tags.rb +27 -0
  56. data/features/thinking_sphinx/db/migrations/create_alphas.rb +8 -0
  57. data/features/thinking_sphinx/db/migrations/create_animals.rb +5 -0
  58. data/features/thinking_sphinx/db/migrations/create_authors.rb +3 -0
  59. data/features/thinking_sphinx/db/migrations/create_authors_posts.rb +6 -0
  60. data/features/thinking_sphinx/db/migrations/create_betas.rb +5 -0
  61. data/features/thinking_sphinx/db/migrations/create_boxes.rb +5 -0
  62. data/features/thinking_sphinx/db/migrations/create_categories.rb +3 -0
  63. data/features/thinking_sphinx/db/migrations/create_comments.rb +10 -0
  64. data/features/thinking_sphinx/db/migrations/create_developers.rb +7 -0
  65. data/features/thinking_sphinx/db/migrations/create_extensible_betas.rb +5 -0
  66. data/features/thinking_sphinx/db/migrations/create_gammas.rb +3 -0
  67. data/features/thinking_sphinx/db/migrations/create_genres.rb +3 -0
  68. data/features/thinking_sphinx/db/migrations/create_music.rb +6 -0
  69. data/features/thinking_sphinx/db/migrations/create_people.rb +13 -0
  70. data/features/thinking_sphinx/db/migrations/create_posts.rb +6 -0
  71. data/features/thinking_sphinx/db/migrations/create_robots.rb +4 -0
  72. data/features/thinking_sphinx/db/migrations/create_taggings.rb +5 -0
  73. data/features/thinking_sphinx/db/migrations/create_tags.rb +4 -0
  74. data/features/thinking_sphinx/models/alpha.rb +23 -0
  75. data/features/thinking_sphinx/models/andrew.rb +17 -0
  76. data/features/thinking_sphinx/models/animal.rb +5 -0
  77. data/features/thinking_sphinx/models/author.rb +3 -0
  78. data/features/thinking_sphinx/models/beta.rb +13 -0
  79. data/features/thinking_sphinx/models/box.rb +8 -0
  80. data/features/thinking_sphinx/models/cat.rb +3 -0
  81. data/features/thinking_sphinx/models/category.rb +4 -0
  82. data/features/thinking_sphinx/models/comment.rb +10 -0
  83. data/features/thinking_sphinx/models/developer.rb +21 -0
  84. data/features/thinking_sphinx/models/dog.rb +3 -0
  85. data/features/thinking_sphinx/models/extensible_beta.rb +9 -0
  86. data/features/thinking_sphinx/models/fox.rb +5 -0
  87. data/features/thinking_sphinx/models/gamma.rb +5 -0
  88. data/features/thinking_sphinx/models/genre.rb +3 -0
  89. data/features/thinking_sphinx/models/medium.rb +5 -0
  90. data/features/thinking_sphinx/models/music.rb +10 -0
  91. data/features/thinking_sphinx/models/person.rb +24 -0
  92. data/features/thinking_sphinx/models/post.rb +22 -0
  93. data/features/thinking_sphinx/models/robot.rb +12 -0
  94. data/features/thinking_sphinx/models/tag.rb +3 -0
  95. data/features/thinking_sphinx/models/tagging.rb +4 -0
  96. data/lib/cucumber/thinking_sphinx/external_world.rb +12 -0
  97. data/lib/cucumber/thinking_sphinx/internal_world.rb +137 -0
  98. data/lib/cucumber/thinking_sphinx/sql_logger.rb +28 -0
  99. data/lib/thinking-sphinx.rb +1 -0
  100. data/lib/thinking_sphinx/action_controller.rb +31 -0
  101. data/lib/thinking_sphinx/active_record/attribute_updates.rb +53 -0
  102. data/lib/thinking_sphinx/active_record/collection_proxy.rb +47 -0
  103. data/lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb +27 -0
  104. data/lib/thinking_sphinx/active_record/delta.rb +67 -0
  105. data/lib/thinking_sphinx/active_record/has_many_association.rb +44 -0
  106. data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +21 -0
  107. data/lib/thinking_sphinx/active_record/log_subscriber.rb +61 -0
  108. data/lib/thinking_sphinx/active_record/scopes.rb +110 -0
  109. data/lib/thinking_sphinx/active_record.rb +386 -0
  110. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +87 -0
  111. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +62 -0
  112. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +188 -0
  113. data/lib/thinking_sphinx/association.rb +230 -0
  114. data/lib/thinking_sphinx/attribute.rb +405 -0
  115. data/lib/thinking_sphinx/auto_version.rb +40 -0
  116. data/lib/thinking_sphinx/bundled_search.rb +44 -0
  117. data/lib/thinking_sphinx/class_facet.rb +20 -0
  118. data/lib/thinking_sphinx/configuration.rb +375 -0
  119. data/lib/thinking_sphinx/context.rb +76 -0
  120. data/lib/thinking_sphinx/core/string.rb +15 -0
  121. data/lib/thinking_sphinx/deltas/default_delta.rb +62 -0
  122. data/lib/thinking_sphinx/deltas.rb +28 -0
  123. data/lib/thinking_sphinx/deploy/capistrano.rb +99 -0
  124. data/lib/thinking_sphinx/excerpter.rb +23 -0
  125. data/lib/thinking_sphinx/facet.rb +135 -0
  126. data/lib/thinking_sphinx/facet_search.rb +170 -0
  127. data/lib/thinking_sphinx/field.rb +98 -0
  128. data/lib/thinking_sphinx/index/builder.rb +315 -0
  129. data/lib/thinking_sphinx/index/faux_column.rb +118 -0
  130. data/lib/thinking_sphinx/index.rb +159 -0
  131. data/lib/thinking_sphinx/join.rb +37 -0
  132. data/lib/thinking_sphinx/property.rb +187 -0
  133. data/lib/thinking_sphinx/railtie.rb +43 -0
  134. data/lib/thinking_sphinx/search.rb +1061 -0
  135. data/lib/thinking_sphinx/search_methods.rb +439 -0
  136. data/lib/thinking_sphinx/sinatra.rb +7 -0
  137. data/lib/thinking_sphinx/source/internal_properties.rb +51 -0
  138. data/lib/thinking_sphinx/source/sql.rb +174 -0
  139. data/lib/thinking_sphinx/source.rb +194 -0
  140. data/lib/thinking_sphinx/tasks.rb +142 -0
  141. data/lib/thinking_sphinx/test.rb +55 -0
  142. data/lib/thinking_sphinx/version.rb +3 -0
  143. data/lib/thinking_sphinx.rb +297 -0
  144. data/spec/fixtures/data.sql +32 -0
  145. data/spec/fixtures/database.yml.default +3 -0
  146. data/spec/fixtures/models.rb +164 -0
  147. data/spec/fixtures/structure.sql +146 -0
  148. data/spec/spec_helper.rb +61 -0
  149. data/spec/sphinx_helper.rb +60 -0
  150. data/spec/support/rails.rb +25 -0
  151. data/spec/thinking_sphinx/active_record/delta_spec.rb +122 -0
  152. data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +173 -0
  153. data/spec/thinking_sphinx/active_record/scopes_spec.rb +176 -0
  154. data/spec/thinking_sphinx/active_record_spec.rb +573 -0
  155. data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +145 -0
  156. data/spec/thinking_sphinx/association_spec.rb +250 -0
  157. data/spec/thinking_sphinx/attribute_spec.rb +552 -0
  158. data/spec/thinking_sphinx/auto_version_spec.rb +103 -0
  159. data/spec/thinking_sphinx/configuration_spec.rb +326 -0
  160. data/spec/thinking_sphinx/context_spec.rb +126 -0
  161. data/spec/thinking_sphinx/core/array_spec.rb +9 -0
  162. data/spec/thinking_sphinx/core/string_spec.rb +9 -0
  163. data/spec/thinking_sphinx/excerpter_spec.rb +49 -0
  164. data/spec/thinking_sphinx/facet_search_spec.rb +176 -0
  165. data/spec/thinking_sphinx/facet_spec.rb +359 -0
  166. data/spec/thinking_sphinx/field_spec.rb +127 -0
  167. data/spec/thinking_sphinx/index/builder_spec.rb +532 -0
  168. data/spec/thinking_sphinx/index/faux_column_spec.rb +36 -0
  169. data/spec/thinking_sphinx/index_spec.rb +189 -0
  170. data/spec/thinking_sphinx/search_methods_spec.rb +156 -0
  171. data/spec/thinking_sphinx/search_spec.rb +1455 -0
  172. data/spec/thinking_sphinx/source_spec.rb +267 -0
  173. data/spec/thinking_sphinx/test_spec.rb +20 -0
  174. data/spec/thinking_sphinx_spec.rb +204 -0
  175. metadata +524 -0
@@ -0,0 +1,67 @@
1
+ Feature: Keeping Sphinx in line with deleted model instances
2
+ In order to avoid deleted items being returned by Sphinx
3
+ Thinking Sphinx
4
+ Should keep deleted items out of search results
5
+
6
+ Scenario: Deleting instances from the core index
7
+ Given Sphinx is running
8
+ And I am searching on betas
9
+ When I search for three
10
+ Then I should get 1 result
11
+
12
+ When I destroy beta three
13
+ And I wait for Sphinx to catch up
14
+ And I search for three
15
+ Then I should get 0 results
16
+
17
+ Scenario: Deleting subclasses when the parent class is indexed
18
+ Given Sphinx is running
19
+ And I am searching on cats
20
+ When I search for moggy
21
+ Then I should get 1 result
22
+
23
+ When I destroy cat moggy
24
+ And I wait for Sphinx to catch up
25
+ And I search for moggy
26
+ Then I should get 0 results
27
+
28
+ Scenario: Deleting created instances from the delta index
29
+ Given Sphinx is running
30
+ And I am searching on betas
31
+ When I create a new beta named eleven
32
+ And I wait for Sphinx to catch up
33
+ And I search for eleven
34
+ Then I should get 1 result
35
+
36
+ When I destroy beta eleven
37
+ And I wait for Sphinx to catch up
38
+ And I search for eleven
39
+ Then I should get 0 results
40
+
41
+ Scenario: Deleting edited instances from the delta index
42
+ Given Sphinx is running
43
+ And I am searching on betas
44
+ When I change the name of beta four to fourteen
45
+ And I wait for Sphinx to catch up
46
+ And I search for fourteen
47
+ Then I should get 1 result
48
+
49
+ When I destroy beta fourteen
50
+ And I wait for Sphinx to catch up
51
+ And I search for fourteen
52
+ Then I should get 0 results
53
+
54
+ Scenario: Deleting created instances from the delta index when deltas are disabled
55
+ Given Sphinx is running
56
+ And I am searching on betas
57
+ When I create a new beta named thirteen
58
+ And I wait for Sphinx to catch up
59
+ And I search for thirteen
60
+ Then I should get 1 result
61
+
62
+ And I disable delta updates
63
+ And I destroy beta thirteen
64
+ And I wait for Sphinx to catch up
65
+ And I enable delta updates
66
+ And I search for thirteen
67
+ Then I should get 0 results
@@ -0,0 +1,11 @@
1
+ Feature: Direct Attributes
2
+ In order to avoid unnecessary SQL queries
3
+ I want to access attribute values from Sphinx's response
4
+
5
+ Scenario: Accessing attribute values directly
6
+ Given Sphinx is running
7
+ And I am searching on posts
8
+ When I search
9
+ Then the first result should have a comments count of 9
10
+
11
+
@@ -0,0 +1,21 @@
1
+ Feature: Generate excerpts for search results
2
+
3
+ Scenario: Basic Excerpts Syntax
4
+ Given Sphinx is running
5
+ And I am searching on comments
6
+ And I search for "lorem punto"
7
+ Then the content excerpt of the first result is "de un sitio mientras que mira su diseño. El <span class="match">punto</span> de usar <span class="match">Lorem</span> Ipsum es que tiene una distribución"
8
+
9
+ Scenario: Integrated Excerpts Syntax
10
+ Given Sphinx is running
11
+ And I am searching on comments
12
+ And I search for "lorem"
13
+ Then calling content on the first result excerpts object should return "de un sitio mientras que mira su diseño. El punto de usar <span class="match">Lorem</span> Ipsum es que tiene una distribución"
14
+
15
+ Scenario: Excerpt Options
16
+ Given Sphinx is running
17
+ And I am searching on comments
18
+ And I search for "lorem"
19
+ And I provide excerpt option "before_match" with value "<em>"
20
+ And I provide excerpt option "after_match" with value "</em>"
21
+ Then calling content on the first result excerpts object should return "de un sitio mientras que mira su diseño. El punto de usar <em>Lorem</em> Ipsum es que tiene una distribución"
@@ -0,0 +1,9 @@
1
+ Feature: Delayed Delta Indexing
2
+ In order to have delta indexing on frequently-updated sites
3
+ Developers
4
+ Should be able to create their own handlers for delta indexing
5
+
6
+ Scenario: I specify a valid handler for delta indexing
7
+ Given Sphinx is running
8
+ When I change the name of extensible beta one to eleven
9
+ Then the generic delta handler should handle the delta indexing
@@ -0,0 +1,88 @@
1
+ Feature: Search and browse models by their defined facets
2
+
3
+ Background:
4
+ Given Sphinx is running
5
+
6
+ Scenario: Requesting facets
7
+ Given I am searching on developers
8
+ When I am requesting facet results
9
+ Then I should have valid facet results
10
+ And I should have 6 facets
11
+ And I should have the facet State
12
+ And I should have the facet Country
13
+ And I should have the facet Age
14
+ And I should have the facet City
15
+ And I should have the facet Tag Ids
16
+ And I should have the facet Tags
17
+
18
+ Scenario: Requesting specific facets
19
+ Given I am searching on developers
20
+ When I am requesting facet results
21
+ And I am requesting just the facet State
22
+ Then I should have valid facet results
23
+ And I should have 1 facet
24
+ And I should have the facet State
25
+ When I am requesting just the facets State and Age
26
+ Then I should have valid facet results
27
+ And I should have 2 facet
28
+ And I should have the facet State
29
+ And I should have the facet Age
30
+
31
+ Scenario: Requesting float facets
32
+ Given I am searching on alphas
33
+ When I am requesting facet results
34
+ Then I should have 1 facet
35
+ And the Cost facet should have a 5.55 key
36
+
37
+ Scenario: Requesting facet results
38
+ Given I am searching on developers
39
+ When I am requesting facet results
40
+ And I drill down where Country is Australia
41
+ Then I should get 11 results
42
+
43
+ Scenario: Requesting facet results by multiple facets
44
+ Given I am searching on developers
45
+ When I am requesting facet results
46
+ And I drill down where Country is Australia and Age is 30
47
+ Then I should get 4 results
48
+
49
+ Scenario: Requesting facets with classes included
50
+ Given I am searching on developers
51
+ When I am requesting facet results
52
+ And I want classes included
53
+ Then I should have valid facet results
54
+ And I should have 7 facets
55
+ And I should have the facet Class
56
+
57
+ Scenario: Requesting MVA facets
58
+ Given I am searching on developers
59
+ When I am requesting facet results
60
+ And I drill down where tag_ids includes the id of tag Australia
61
+ Then I should get 11 results
62
+ When I am requesting facet results
63
+ And I drill down where tag_ids includes the id of tags Melbourne or Sydney
64
+ Then I should get 5 results
65
+
66
+ Scenario: Requesting MVA string facets
67
+ Given I am searching on developers
68
+ When I am requesting facet results
69
+ Then the Tags facet should have an "Australia" key
70
+ Then the Tags facet should have an "Melbourne" key
71
+ Then the Tags facet should have an "Victoria" key
72
+
73
+ Scenario: Requesting MVA facets from source queries
74
+ Given I am searching on posts
75
+ When I am requesting facet results
76
+ Then the Comment Ids facet should have 9 keys
77
+
78
+ Scenario: Requesting facets from a subclass
79
+ Given I am searching on animals
80
+ When I am requesting facet results
81
+ And I want classes included
82
+ Then I should have the facet Class
83
+
84
+ Scenario: Requesting facets with explicit value sources
85
+ Given I am searching on developers
86
+ When I am requesting facet results
87
+ Then the City facet should have a "Melbourne" key
88
+
@@ -0,0 +1,29 @@
1
+ Feature: Search and browse across models by their defined facets
2
+
3
+ Scenario: Requesting facets across multiple models
4
+ Given Sphinx is running
5
+ When I am requesting facet results
6
+ And I want all possible attributes
7
+ Then I should have valid facet results
8
+ And I should have 12 facets
9
+ And I should have the facet Class
10
+ And the Class facet should have a "Person" key
11
+ And I should have the facet Gender
12
+ And the Gender facet should have a "female" key
13
+ And I should have the facet Country
14
+ And I should have the facet Category Name
15
+ And the Category Name facet should have a "hello" key with 10 hits
16
+
17
+ Scenario: Requesting facets across models without class results
18
+ Given Sphinx is running
19
+ When I am requesting facet results
20
+ And I want all possible attributes
21
+ And I don't want classes included
22
+ Then I should have 11 facets
23
+ And I should not have the facet Class
24
+
25
+ Scenario: Requesting facets common to all indexed models
26
+ Given Sphinx is running
27
+ When I am requesting facet results
28
+ Then I should have the facet Class
29
+ And I should have 1 facet
@@ -0,0 +1,18 @@
1
+ Feature: Field Sorting
2
+ In order to sort by strings
3
+ As a developer
4
+ I want to enable sorting by existing fields
5
+
6
+ Background:
7
+ Given Sphinx is running
8
+ And I am searching on people
9
+
10
+ Scenario: Searching with ordering on a sortable field
11
+ When I order by first_name
12
+ Then I should get 20 results
13
+ And the first_name of each result should indicate order
14
+
15
+ Scenario: Sort on a case insensitive sortable field
16
+ When I order by last_name
17
+ Then the first result's "last_name" should be "abbott"
18
+
@@ -0,0 +1,94 @@
1
+ Feature: Keeping Sphinx in line with model changes when requested
2
+ In order to keep indexes as up to date as possible
3
+ Thinking Sphinx
4
+ Should return the expected results depending on whether delta indexes are used
5
+
6
+ Scenario: Returning instance from old data if there is no delta
7
+ Given Sphinx is running
8
+ And I am searching on alphas
9
+ When I search for two
10
+ Then I should get 1 result
11
+
12
+ When I change the name of alpha two to twelve
13
+ And I wait for Sphinx to catch up
14
+ And I search for two
15
+ Then I should get 1 result
16
+
17
+ Scenario: Not returning an instance from old data if there is a delta
18
+ Given Sphinx is running
19
+ And I am searching on betas
20
+ When I search for two
21
+ Then I should get 1 result
22
+
23
+ When I change the name of beta two to twelve
24
+ And I wait for Sphinx to catch up
25
+ And I search for two
26
+ Then I should get 0 results
27
+
28
+ Scenario: Returning instance from new data if there is a delta
29
+ Given Sphinx is running
30
+ And I am searching on betas
31
+ When I search for one
32
+ Then I should get 1 result
33
+
34
+ When I change the name of beta one to eleventeen
35
+ And I wait for Sphinx to catch up
36
+ And I search for one
37
+ Then I should get 0 results
38
+
39
+ When I search for eleventeen
40
+ Then I should get 1 result
41
+
42
+ Scenario: Returning new records if there's a delta
43
+ Given Sphinx is running
44
+ And I am searching on betas
45
+ When I search for fifteen
46
+ Then I should get 0 results
47
+
48
+ When I create a new beta named fifteen
49
+ And I wait for Sphinx to catch up
50
+ And I search for fifteen
51
+ Then I should get 1 result
52
+
53
+ Scenario: Avoiding delta updates if there hasn't been changes
54
+ Given Sphinx is running
55
+ And I am searching on betas
56
+ When I search for five
57
+ Then I should get 1 result
58
+
59
+ When I change the name of beta five to five
60
+ And I wait for Sphinx to catch up
61
+ And I search for five
62
+ Then I should get 1 result
63
+
64
+ When I search for the document id of beta five in the beta_core index
65
+ Then it should exist if using Rails 2.1 or newer
66
+ When I search for the document id of beta five in the secondary_beta_core index
67
+ Then it should exist if using Rails 2.1 or newer
68
+ When I search for the document id of beta five in the secondary_beta_delta index
69
+ Then it should not exist if using Rails 2.1 or newer
70
+
71
+ Scenario: Handling edits with a delta when Sphinx isn't running
72
+ Given Sphinx is running
73
+ And I am searching on betas
74
+ When I stop Sphinx
75
+ And I change the name of beta six to sixteen
76
+ And I start Sphinx
77
+ And I search for sixteen
78
+ Then I should get 1 result
79
+
80
+ Scenario: Handling edits when updates are disabled
81
+ Given Sphinx is running
82
+ And updates are disabled
83
+ And I am searching on betas
84
+
85
+ When I search for seven
86
+ Then I should get 1 result
87
+
88
+ When I change the name of beta seven to seventeen
89
+ And I wait for Sphinx to catch up
90
+ And I search for seven
91
+ Then I should get 1 result
92
+
93
+ When I search for seventeen
94
+ Then I should get 0 results
@@ -0,0 +1,24 @@
1
+ Feature: Manually updating Sphinx indexes to handle uncaught deletions
2
+ In order to keep indexes as up to date as possible
3
+ Thinking Sphinx
4
+ Should automatically update the indexes and retry the search if it gets a nil result
5
+
6
+ Scenario: Changing retry_stale settings
7
+ Given Sphinx is running
8
+ And I am searching on gammas
9
+ Then I should not get 0 results
10
+
11
+ When I set retry stale to false
12
+ And I set per page to 1
13
+ And I order by "sphinx_internal_id ASC"
14
+ And I destroy gamma one without callbacks
15
+ Then I should get a single result of nil
16
+
17
+ When I set retry stale to 1
18
+ Then I should get a single gamma result with a name of two
19
+
20
+ When I destroy gamma two without callbacks
21
+ Then I should get a single result of nil
22
+
23
+ When I set retry stale to true
24
+ Then I should get a single gamma result with a name of three
@@ -0,0 +1,20 @@
1
+ Feature: Searching across multiple model
2
+ In order to use Thinking Sphinx's core functionality
3
+ A developer
4
+ Should be able to search on multiple models
5
+
6
+ Scenario: Retrieving total result count
7
+ Given Sphinx is running
8
+ When I search for James
9
+ And I am retrieving the result count
10
+ Then I should get a value of 6
11
+
12
+ Scenario: Confirming existance of a document id in a given index
13
+ Given Sphinx is running
14
+ When I search for the document id of alpha one in the alpha_core index
15
+ Then it should exist
16
+
17
+ Scenario: Retrieving results from multiple models
18
+ Given Sphinx is running
19
+ When I search for ten
20
+ Then I should get 4 results
@@ -0,0 +1,40 @@
1
+ Feature: Searching within a single index
2
+ In order to use Thinking Sphinx's core functionality
3
+ A developer
4
+ Should be able to search on a single index
5
+
6
+ Scenario: Searching with alternative index
7
+ Given Sphinx is running
8
+ And I am searching on alphas
9
+ When I order by value
10
+ And I use index alternative_core
11
+ Then I should get 7 results
12
+
13
+ Scenario: Searching with default index
14
+ Given Sphinx is running
15
+ And I am searching on alphas
16
+ When I order by value
17
+ And I use index alpha_core
18
+ Then I should get 10 results
19
+
20
+ Scenario: Searching without specified index
21
+ Given Sphinx is running
22
+ And I am searching on alphas
23
+ When I order by value
24
+ Then I should get 10 results
25
+
26
+ Scenario: Deleting instances from the core index
27
+ Given Sphinx is running
28
+ And I am searching on alphas
29
+
30
+ When I create a new alpha named eleven
31
+ And I process the alpha_core index
32
+ And I process the alternative_core index
33
+ And I wait for Sphinx to catch up
34
+ And I search for eleven
35
+ Then I should get 1 result
36
+
37
+ When I destroy alpha eleven
38
+ And I wait for Sphinx to catch up
39
+ And I search for eleven
40
+ Then I should get 0 results
@@ -0,0 +1,175 @@
1
+ Feature: Searching on a single model
2
+ In order to use Thinking Sphinx's core functionality
3
+ A developer
4
+ Should be able to search on a single model
5
+
6
+ Scenario: Searching using a basic query
7
+ Given Sphinx is running
8
+ And I am searching on people
9
+ When I search for James
10
+ Then I should get 3 results
11
+
12
+ Scenario: Searching on a specific field
13
+ Given Sphinx is running
14
+ And I am searching on people
15
+ When I search for James on first_name
16
+ Then I should get 2 results
17
+
18
+ Scenario: Searching on multiple fields
19
+ Given Sphinx is running
20
+ And I am searching on people
21
+ When I search for James on first_name
22
+ And I search for Chamberlain on last_name
23
+ Then I should get 1 result
24
+
25
+ Scenario: Searching on association content
26
+ Given Sphinx is running
27
+ And I am searching on posts
28
+
29
+ When I search for "Waffles"
30
+ Then I should get 1 result
31
+
32
+ When I search for "Turtle"
33
+ Then I should get 1 result
34
+
35
+ Scenario: Searching with a filter
36
+ Given Sphinx is running
37
+ And I am searching on alphas
38
+ When I filter by 1 on value
39
+ Then I should get 1 result
40
+
41
+ Scenario: Searching with multiple filters
42
+ Given Sphinx is running
43
+ And I am searching on boxes
44
+ When I filter by 2 on width
45
+ And I filter by 2 on length
46
+ Then I should get 1 result
47
+
48
+ Scenario: Searching with a ranged time filter
49
+ Given Sphinx is running
50
+ And I am searching on people
51
+ When I filter by birthday between 1975 and 1976
52
+ Then I should get 16 results
53
+
54
+ Scenario: Searching to filter multiple values on an MVA
55
+ Given Sphinx is running
56
+ And I am searching on boxes
57
+ When I filter by 11 and 12 on dimensions
58
+ Then I should get 2 results
59
+ When I clear existing filters
60
+ And I filter by both 11 and 12 on dimensions
61
+ Then I should get 1 result
62
+
63
+ Scenario: Filtering on timestamp MVAs
64
+ Given Sphinx is running
65
+ And I am searching on posts
66
+ When I filter by 2001-01-01 on comments_created_at
67
+ Then I should get 1 result
68
+
69
+ Scenario: Searching by NULL/0 values in MVAs
70
+ Given Sphinx is running
71
+ And I am searching on boxes
72
+ When I filter by 0 on dimensions
73
+ Then I should get 1 result
74
+
75
+ Given Sphinx is running
76
+ And I am searching on developers
77
+ When I clear existing filters
78
+ And I filter by 0 on tag_ids
79
+ Then I should get 1 result
80
+
81
+ Scenario: Searching on a MVA configured as ranged_query
82
+ Given Sphinx is running
83
+ And I am searching on posts
84
+ When I filter by 1 on comment_ids
85
+ Then I should get 1 result
86
+ When I clear existing filters
87
+ And I filter by both 1 and 2 on comment_ids
88
+ Then I should get 1 results
89
+ When I clear existing filters
90
+ And I filter by 10 on comment_ids
91
+ Then I should get 0 results
92
+
93
+ Scenario: Searching with ordering by attribute
94
+ Given Sphinx is running
95
+ And I am searching on alphas
96
+ When I order by value
97
+ Then I should get 10 results
98
+ And the value of each result should indicate order
99
+
100
+ Scenario: Intepreting Sphinx Internal Identifiers
101
+ Given Sphinx is running
102
+ And I am searching on people
103
+ Then I should get 20 results
104
+ And each result id should match the corresponding sphinx internal id
105
+
106
+ Scenario: Retrieving weightings
107
+ Given Sphinx is running
108
+ And I am searching on people
109
+ When I search for "Ellie Ford"
110
+ And I set match mode to any
111
+ Then I can iterate by result and weighting
112
+
113
+ Scenario: Retrieving group counts
114
+ Given Sphinx is running
115
+ And I am searching on people
116
+ When I group results by the birthday attribute
117
+ Then I can iterate by result and count
118
+
119
+ Scenario: Retrieving group values
120
+ Given Sphinx is running
121
+ And I am searching on people
122
+ When I group results by the birthday attribute
123
+ Then I can iterate by result and group
124
+
125
+ Scenario: Retrieving both group values and counts
126
+ Given Sphinx is running
127
+ And I am searching on people
128
+ When I group results by the birthday attribute
129
+ Then I can iterate by result and group and count
130
+
131
+ Scenario: Searching for ids
132
+ Given Sphinx is running
133
+ And I am searching on people
134
+ When I search for Ellie
135
+ And I am searching for ids
136
+ Then I should have an array of integers
137
+
138
+ Scenario: Search results should match Sphinx's order
139
+ Given Sphinx is running
140
+ And I am searching on people
141
+ When I search for Ellie
142
+ And I order by "sphinx_internal_id DESC"
143
+ Then searching for ids should match the record ids of the normal search results
144
+
145
+ Scenario: Retrieving total result count when total is less than a page
146
+ Given Sphinx is running
147
+ And I am searching on people
148
+ When I search for James
149
+ And I am retrieving the result count
150
+ Then I should get a value of 3
151
+
152
+ Scenario: Retrieving total result count for more than a page
153
+ Given Sphinx is running
154
+ And I am searching on people
155
+ When I am retrieving the result count
156
+ Then I should get a value of 1000
157
+
158
+ Scenario: Searching with Unicode Characters
159
+ Given Sphinx is running
160
+ And I am searching on people
161
+ When I search for "José* "
162
+ Then I should get 1 result
163
+
164
+ Scenario: Searching by fields from HABTM joins
165
+ Given Sphinx is running
166
+ And I am searching on posts
167
+ When I search for "Shakespeare"
168
+ Then I should get 1 result
169
+
170
+ Scenario: Searching on content from file field
171
+ Given Sphinx is running
172
+ And I am searching on posts
173
+ When I search for "foo bar baz"
174
+ Then I should get 1 result
175
+
@@ -0,0 +1,56 @@
1
+ Feature: Keeping AR::Base.find arguments in search calls
2
+ To keep things as streamlined as possible
3
+ Thinking Sphinx
4
+ Should respect particular arguments to AR::Base.find calls
5
+
6
+ Scenario: Respecting the include option
7
+ Given Sphinx is running
8
+ And I am searching on posts
9
+ Then I should get 1 result
10
+
11
+ When I get the first comment
12
+ And I track queries
13
+ And I compare comments
14
+ Then I should have 1 query
15
+
16
+ When I include comments
17
+ Then I should get 1 result
18
+ When I track queries
19
+ And I compare comments
20
+ Then I should have 0 queries
21
+
22
+ Scenario: Respecting the include option without using a specific model
23
+ Given Sphinx is running
24
+ And I search for "Hello World"
25
+ Then I should get 1 result
26
+
27
+ When I get the first comment
28
+ And I track queries
29
+ And I compare comments
30
+ Then I should have 1 query
31
+
32
+ When I include comments
33
+ Then I should get 1 result
34
+ When I track queries
35
+ And I compare comments
36
+ Then I should have 0 queries
37
+
38
+ Scenario: Respecting the select option
39
+ Given Sphinx is running
40
+ And I am searching on posts
41
+ Then I should get 1 result
42
+ And I should not get an error accessing the subject
43
+
44
+ When I select only content
45
+ Then I should get 1 result
46
+ And I should get an error accessing the subject
47
+
48
+ Scenario: Respecting the select option without using a specific model
49
+ Given Sphinx is running
50
+ When I search for "Hello World"
51
+ Then I should get 1 result
52
+ And I should not get an error accessing the subject
53
+
54
+ When I select only content
55
+ Then I should get 1 result
56
+ And I should get an error accessing the subject
@@ -0,0 +1,25 @@
1
+ Feature: Checking whether Sphinx is running or not
2
+ In order to avoid unnecessary errors
3
+ Thinking Sphinx
4
+ Should be able to determine whether Sphinx is running or not
5
+
6
+ Scenario: Checking Sphinx's status
7
+ Given Sphinx is running
8
+ Then Sphinx should be running
9
+
10
+ When I stop Sphinx
11
+ And I wait for Sphinx to catch up
12
+ Then Sphinx should not be running
13
+
14
+ When I start Sphinx
15
+ And I wait for Sphinx to catch up
16
+ Then Sphinx should be running
17
+
18
+ Given Sphinx is running
19
+ When I kill the Sphinx process
20
+ And I wait for Sphinx to catch up
21
+ Then Sphinx should not be running
22
+
23
+ When I start Sphinx again
24
+ And I wait for Sphinx to catch up
25
+ Then Sphinx should be running again