thinking-sphinx 2.1.0 → 3.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +8 -0
- data/.travis.yml +13 -0
- data/Appraisals +7 -0
- data/Gemfile +10 -0
- data/HISTORY +2 -267
- data/LICENCE +1 -1
- data/README.textile +194 -226
- data/Rakefile +24 -0
- data/gemfiles/.gitignore +1 -0
- data/gemfiles/rails_3_1.gemfile +11 -0
- data/gemfiles/rails_3_2.gemfile +11 -0
- data/lib/thinking-sphinx.rb +1 -1
- data/lib/thinking_sphinx.rb +34 -292
- data/lib/thinking_sphinx/active_record.rb +22 -383
- data/lib/thinking_sphinx/active_record/association.rb +9 -0
- data/lib/thinking_sphinx/active_record/association_proxy.rb +68 -0
- data/lib/thinking_sphinx/active_record/associations.rb +68 -0
- data/lib/thinking_sphinx/active_record/attribute.rb +20 -0
- data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +32 -0
- data/lib/thinking_sphinx/active_record/attribute/type.rb +79 -0
- data/lib/thinking_sphinx/active_record/attribute/values.rb +18 -0
- data/lib/thinking_sphinx/active_record/base.rb +36 -0
- data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +31 -0
- data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +55 -0
- data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +59 -0
- data/lib/thinking_sphinx/active_record/column.rb +30 -0
- data/lib/thinking_sphinx/active_record/database_adapters.rb +51 -0
- data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +13 -0
- data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +23 -0
- data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +25 -0
- data/lib/thinking_sphinx/active_record/field.rb +11 -0
- data/lib/thinking_sphinx/active_record/index.rb +55 -0
- data/lib/thinking_sphinx/active_record/interpreter.rb +47 -0
- data/lib/thinking_sphinx/active_record/log_subscriber.rb +10 -58
- data/lib/thinking_sphinx/active_record/property.rb +28 -0
- data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +60 -0
- data/lib/thinking_sphinx/active_record/sql_builder.rb +159 -0
- data/lib/thinking_sphinx/active_record/sql_source.rb +138 -0
- data/lib/thinking_sphinx/active_record/sql_source/template.rb +46 -0
- data/lib/thinking_sphinx/batched_search.rb +26 -0
- data/lib/thinking_sphinx/callbacks.rb +15 -0
- data/lib/thinking_sphinx/configuration.rb +80 -331
- data/lib/thinking_sphinx/configuration/consistent_ids.rb +31 -0
- data/lib/thinking_sphinx/configuration/defaults.rb +5 -0
- data/lib/thinking_sphinx/core.rb +6 -0
- data/lib/thinking_sphinx/core/index.rb +68 -0
- data/lib/thinking_sphinx/core/interpreter.rb +19 -0
- data/lib/thinking_sphinx/deltas.rb +35 -26
- data/lib/thinking_sphinx/deltas/default_delta.rb +56 -56
- data/lib/thinking_sphinx/excerpter.rb +23 -21
- data/lib/thinking_sphinx/facet.rb +22 -127
- data/lib/thinking_sphinx/facet_search.rb +95 -162
- data/lib/thinking_sphinx/index.rb +39 -143
- data/lib/thinking_sphinx/index_set.rb +51 -0
- data/lib/thinking_sphinx/masks.rb +8 -0
- data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +23 -0
- data/lib/thinking_sphinx/masks/pagination_mask.rb +60 -0
- data/lib/thinking_sphinx/masks/scopes_mask.rb +35 -0
- data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +11 -0
- data/lib/thinking_sphinx/middlewares.rb +36 -0
- data/lib/thinking_sphinx/middlewares/active_record_translator.rb +73 -0
- data/lib/thinking_sphinx/middlewares/geographer.rb +53 -0
- data/lib/thinking_sphinx/middlewares/glazier.rb +39 -0
- data/lib/thinking_sphinx/middlewares/ids_only.rb +13 -0
- data/lib/thinking_sphinx/middlewares/inquirer.rb +62 -0
- data/lib/thinking_sphinx/middlewares/middleware.rb +9 -0
- data/lib/thinking_sphinx/middlewares/sphinxql.rb +149 -0
- data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +45 -0
- data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +46 -0
- data/lib/thinking_sphinx/panes.rb +8 -0
- data/lib/thinking_sphinx/panes/attributes_pane.rb +9 -0
- data/lib/thinking_sphinx/panes/distance_pane.rb +13 -0
- data/lib/thinking_sphinx/panes/excerpts_pane.rb +37 -0
- data/lib/thinking_sphinx/panes/weight_pane.rb +9 -0
- data/lib/thinking_sphinx/railtie.rb +6 -40
- data/lib/thinking_sphinx/rake_interface.rb +47 -0
- data/lib/thinking_sphinx/real_time.rb +11 -0
- data/lib/thinking_sphinx/real_time/attribute.rb +5 -0
- data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +48 -0
- data/lib/thinking_sphinx/real_time/field.rb +3 -0
- data/lib/thinking_sphinx/real_time/index.rb +47 -0
- data/lib/thinking_sphinx/real_time/index/template.rb +33 -0
- data/lib/thinking_sphinx/real_time/interpreter.rb +23 -0
- data/lib/thinking_sphinx/real_time/property.rb +16 -0
- data/lib/thinking_sphinx/scopes.rb +22 -0
- data/lib/thinking_sphinx/search.rb +90 -1028
- data/lib/thinking_sphinx/search/batch_inquirer.rb +27 -0
- data/lib/thinking_sphinx/search/context.rb +26 -0
- data/lib/thinking_sphinx/search/glaze.rb +32 -0
- data/lib/thinking_sphinx/search/merger.rb +24 -0
- data/lib/thinking_sphinx/search/query.rb +43 -0
- data/lib/thinking_sphinx/search/stale_ids_exception.rb +11 -0
- data/lib/thinking_sphinx/search/translator.rb +50 -0
- data/lib/thinking_sphinx/tasks.rb +22 -125
- data/lib/thinking_sphinx/test.rb +9 -19
- data/sketchpad.rb +58 -0
- data/spec/acceptance/association_scoping_spec.rb +23 -0
- data/spec/acceptance/attribute_access_spec.rb +39 -0
- data/spec/acceptance/attribute_updates_spec.rb +16 -0
- data/spec/acceptance/batch_searching_spec.rb +21 -0
- data/spec/acceptance/big_integers_spec.rb +27 -0
- data/spec/acceptance/excerpts_spec.rb +14 -0
- data/spec/acceptance/facets_spec.rb +122 -0
- data/spec/acceptance/geosearching_spec.rb +39 -0
- data/spec/acceptance/grouping_by_attributes_spec.rb +77 -0
- data/spec/acceptance/paginating_search_results_spec.rb +24 -0
- data/spec/acceptance/remove_deleted_records_spec.rb +23 -0
- data/spec/acceptance/search_counts_spec.rb +18 -0
- data/spec/acceptance/search_for_just_ids_spec.rb +19 -0
- data/spec/acceptance/searching_across_models_spec.rb +28 -0
- data/spec/acceptance/searching_on_fields_spec.rb +56 -0
- data/spec/acceptance/searching_with_filters_spec.rb +109 -0
- data/spec/acceptance/searching_with_sti_spec.rb +55 -0
- data/spec/acceptance/searching_within_a_model_spec.rb +52 -0
- data/spec/acceptance/sorting_search_results_spec.rb +41 -0
- data/spec/acceptance/spec_helper.rb +4 -0
- data/spec/acceptance/specifying_sql_spec.rb +62 -0
- data/spec/acceptance/sphinx_scopes_spec.rb +49 -0
- data/spec/acceptance/sql_deltas_spec.rb +43 -0
- data/spec/acceptance/support/database_cleaner.rb +11 -0
- data/spec/acceptance/support/sphinx_controller.rb +39 -0
- data/spec/acceptance/support/sphinx_helpers.rb +24 -0
- data/spec/acceptance/suspended_deltas_spec.rb +20 -0
- data/spec/internal/.gitignore +1 -0
- data/spec/internal/app/indices/animal_index.rb +3 -0
- data/spec/internal/app/indices/article_index.rb +24 -0
- data/spec/internal/app/indices/book_index.rb +8 -0
- data/spec/internal/app/indices/city_index.rb +6 -0
- data/spec/internal/app/indices/product_index.rb +3 -0
- data/spec/internal/app/indices/tee_index.rb +4 -0
- data/spec/internal/app/indices/user_index.rb +5 -0
- data/spec/internal/app/models/animal.rb +2 -0
- data/spec/internal/app/models/article.rb +5 -0
- data/spec/internal/app/models/bird.rb +2 -0
- data/spec/internal/app/models/book.rb +11 -0
- data/spec/internal/app/models/city.rb +2 -0
- data/spec/internal/app/models/colour.rb +3 -0
- data/spec/internal/app/models/flightless_bird.rb +2 -0
- data/spec/internal/app/models/mammal.rb +2 -0
- data/spec/internal/app/models/product.rb +3 -0
- data/spec/internal/app/models/tag.rb +4 -0
- data/{features/thinking_sphinx → spec/internal/app}/models/tagging.rb +1 -1
- data/spec/internal/app/models/tee.rb +3 -0
- data/spec/internal/app/models/tweet.rb +3 -0
- data/spec/internal/app/models/user.rb +3 -0
- data/spec/internal/config/database.yml +5 -0
- data/spec/internal/db/schema.rb +65 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/spec_helper.rb +8 -49
- data/spec/support/sphinx_yaml_helpers.rb +9 -0
- data/spec/thinking_sphinx/active_record/association_spec.rb +12 -0
- data/spec/thinking_sphinx/active_record/associations_spec.rb +184 -0
- data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +147 -0
- data/spec/thinking_sphinx/active_record/base_spec.rb +61 -0
- data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +80 -0
- data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +147 -0
- data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +69 -0
- data/spec/thinking_sphinx/active_record/column_spec.rb +47 -0
- data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +31 -0
- data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +43 -0
- data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +45 -0
- data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +108 -0
- data/spec/thinking_sphinx/active_record/field_spec.rb +36 -0
- data/spec/thinking_sphinx/active_record/index_spec.rb +208 -0
- data/spec/thinking_sphinx/active_record/interpreter_spec.rb +293 -0
- data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +162 -0
- data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +666 -0
- data/spec/thinking_sphinx/active_record/sql_source_spec.rb +401 -0
- data/spec/thinking_sphinx/configuration_spec.rb +264 -171
- data/spec/thinking_sphinx/deltas/default_delta_spec.rb +116 -0
- data/spec/thinking_sphinx/deltas_spec.rb +58 -0
- data/spec/thinking_sphinx/excerpter_spec.rb +40 -38
- data/spec/thinking_sphinx/facet_search_spec.rb +49 -151
- data/spec/thinking_sphinx/index_set_spec.rb +68 -0
- data/spec/thinking_sphinx/index_spec.rb +91 -155
- data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +121 -0
- data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +68 -0
- data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +132 -0
- data/spec/thinking_sphinx/middlewares/geographer_spec.rb +89 -0
- data/spec/thinking_sphinx/middlewares/glazier_spec.rb +62 -0
- data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +55 -0
- data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +271 -0
- data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +47 -0
- data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +91 -0
- data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +21 -0
- data/spec/thinking_sphinx/panes/distance_pane_spec.rb +41 -0
- data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
- data/spec/thinking_sphinx/panes/weight_pane_spec.rb +20 -0
- data/spec/thinking_sphinx/rake_interface_spec.rb +147 -0
- data/spec/thinking_sphinx/real_time/attribute_spec.rb +62 -0
- data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +76 -0
- data/spec/thinking_sphinx/real_time/field_spec.rb +54 -0
- data/spec/thinking_sphinx/real_time/index_spec.rb +154 -0
- data/spec/thinking_sphinx/real_time/interpreter_spec.rb +147 -0
- data/spec/thinking_sphinx/scopes_spec.rb +38 -0
- data/spec/thinking_sphinx/search/glaze_spec.rb +55 -0
- data/spec/thinking_sphinx/search/query_spec.rb +46 -0
- data/spec/thinking_sphinx/search_spec.rb +65 -1357
- data/spec/thinking_sphinx_spec.rb +19 -182
- data/thinking-sphinx.gemspec +33 -0
- metadata +318 -431
- data/features/abstract_inheritance.feature +0 -10
- data/features/alternate_primary_key.feature +0 -27
- data/features/attribute_transformation.feature +0 -22
- data/features/attribute_updates.feature +0 -79
- data/features/deleting_instances.feature +0 -70
- data/features/direct_attributes.feature +0 -11
- data/features/excerpts.feature +0 -21
- data/features/extensible_delta_indexing.feature +0 -9
- data/features/facets.feature +0 -88
- data/features/facets_across_model.feature +0 -29
- data/features/field_sorting.feature +0 -18
- data/features/handling_edits.feature +0 -97
- data/features/retry_stale_indexes.feature +0 -24
- data/features/searching_across_models.feature +0 -20
- data/features/searching_by_index.feature +0 -41
- data/features/searching_by_model.feature +0 -175
- data/features/searching_with_find_arguments.feature +0 -56
- data/features/sphinx_detection.feature +0 -25
- data/features/sphinx_scopes.feature +0 -68
- data/features/step_definitions/alpha_steps.rb +0 -16
- data/features/step_definitions/beta_steps.rb +0 -7
- data/features/step_definitions/common_steps.rb +0 -205
- data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
- data/features/step_definitions/facet_steps.rb +0 -96
- data/features/step_definitions/find_arguments_steps.rb +0 -36
- data/features/step_definitions/gamma_steps.rb +0 -15
- data/features/step_definitions/scope_steps.rb +0 -19
- data/features/step_definitions/search_steps.rb +0 -94
- data/features/step_definitions/sphinx_steps.rb +0 -35
- data/features/sti_searching.feature +0 -19
- data/features/support/env.rb +0 -24
- data/features/support/lib/generic_delta_handler.rb +0 -8
- data/features/thinking_sphinx/database.example.yml +0 -3
- data/features/thinking_sphinx/db/.gitignore +0 -1
- data/features/thinking_sphinx/db/fixtures/alphas.rb +0 -8
- data/features/thinking_sphinx/db/fixtures/authors.rb +0 -1
- data/features/thinking_sphinx/db/fixtures/betas.rb +0 -11
- data/features/thinking_sphinx/db/fixtures/boxes.rb +0 -9
- data/features/thinking_sphinx/db/fixtures/categories.rb +0 -1
- data/features/thinking_sphinx/db/fixtures/cats.rb +0 -3
- data/features/thinking_sphinx/db/fixtures/comments.rb +0 -24
- data/features/thinking_sphinx/db/fixtures/developers.rb +0 -31
- data/features/thinking_sphinx/db/fixtures/dogs.rb +0 -3
- data/features/thinking_sphinx/db/fixtures/extensible_betas.rb +0 -10
- data/features/thinking_sphinx/db/fixtures/foxes.rb +0 -3
- data/features/thinking_sphinx/db/fixtures/gammas.rb +0 -10
- data/features/thinking_sphinx/db/fixtures/music.rb +0 -4
- data/features/thinking_sphinx/db/fixtures/people.rb +0 -1001
- data/features/thinking_sphinx/db/fixtures/post_keywords.txt +0 -1
- data/features/thinking_sphinx/db/fixtures/posts.rb +0 -10
- data/features/thinking_sphinx/db/fixtures/robots.rb +0 -8
- data/features/thinking_sphinx/db/fixtures/tags.rb +0 -27
- data/features/thinking_sphinx/db/migrations/create_alphas.rb +0 -8
- data/features/thinking_sphinx/db/migrations/create_animals.rb +0 -5
- data/features/thinking_sphinx/db/migrations/create_authors.rb +0 -3
- data/features/thinking_sphinx/db/migrations/create_authors_posts.rb +0 -6
- data/features/thinking_sphinx/db/migrations/create_betas.rb +0 -5
- data/features/thinking_sphinx/db/migrations/create_boxes.rb +0 -5
- data/features/thinking_sphinx/db/migrations/create_categories.rb +0 -3
- data/features/thinking_sphinx/db/migrations/create_comments.rb +0 -10
- data/features/thinking_sphinx/db/migrations/create_developers.rb +0 -7
- data/features/thinking_sphinx/db/migrations/create_extensible_betas.rb +0 -5
- data/features/thinking_sphinx/db/migrations/create_gammas.rb +0 -3
- data/features/thinking_sphinx/db/migrations/create_genres.rb +0 -3
- data/features/thinking_sphinx/db/migrations/create_music.rb +0 -6
- data/features/thinking_sphinx/db/migrations/create_people.rb +0 -13
- data/features/thinking_sphinx/db/migrations/create_posts.rb +0 -6
- data/features/thinking_sphinx/db/migrations/create_robots.rb +0 -4
- data/features/thinking_sphinx/db/migrations/create_taggings.rb +0 -5
- data/features/thinking_sphinx/db/migrations/create_tags.rb +0 -4
- data/features/thinking_sphinx/models/alpha.rb +0 -23
- data/features/thinking_sphinx/models/andrew.rb +0 -17
- data/features/thinking_sphinx/models/animal.rb +0 -5
- data/features/thinking_sphinx/models/author.rb +0 -3
- data/features/thinking_sphinx/models/beta.rb +0 -13
- data/features/thinking_sphinx/models/box.rb +0 -8
- data/features/thinking_sphinx/models/cat.rb +0 -3
- data/features/thinking_sphinx/models/category.rb +0 -4
- data/features/thinking_sphinx/models/comment.rb +0 -10
- data/features/thinking_sphinx/models/developer.rb +0 -21
- data/features/thinking_sphinx/models/dog.rb +0 -3
- data/features/thinking_sphinx/models/extensible_beta.rb +0 -9
- data/features/thinking_sphinx/models/fox.rb +0 -5
- data/features/thinking_sphinx/models/gamma.rb +0 -5
- data/features/thinking_sphinx/models/genre.rb +0 -3
- data/features/thinking_sphinx/models/medium.rb +0 -5
- data/features/thinking_sphinx/models/music.rb +0 -10
- data/features/thinking_sphinx/models/person.rb +0 -24
- data/features/thinking_sphinx/models/post.rb +0 -22
- data/features/thinking_sphinx/models/robot.rb +0 -12
- data/features/thinking_sphinx/models/tag.rb +0 -3
- data/lib/cucumber/thinking_sphinx/external_world.rb +0 -12
- data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -137
- data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -28
- data/lib/thinking_sphinx/action_controller.rb +0 -31
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -54
- data/lib/thinking_sphinx/active_record/collection_proxy.rb +0 -47
- data/lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb +0 -27
- data/lib/thinking_sphinx/active_record/delta.rb +0 -67
- data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -44
- data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
- data/lib/thinking_sphinx/active_record/scopes.rb +0 -110
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -94
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -62
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -188
- data/lib/thinking_sphinx/association.rb +0 -230
- data/lib/thinking_sphinx/attribute.rb +0 -405
- data/lib/thinking_sphinx/auto_version.rb +0 -40
- data/lib/thinking_sphinx/bundled_search.rb +0 -40
- data/lib/thinking_sphinx/class_facet.rb +0 -20
- data/lib/thinking_sphinx/connection.rb +0 -71
- data/lib/thinking_sphinx/context.rb +0 -81
- data/lib/thinking_sphinx/core/string.rb +0 -15
- data/lib/thinking_sphinx/deltas/delete_job.rb +0 -16
- data/lib/thinking_sphinx/deltas/index_job.rb +0 -17
- data/lib/thinking_sphinx/deploy/capistrano.rb +0 -99
- data/lib/thinking_sphinx/field.rb +0 -98
- data/lib/thinking_sphinx/index/builder.rb +0 -315
- data/lib/thinking_sphinx/index/faux_column.rb +0 -118
- data/lib/thinking_sphinx/join.rb +0 -37
- data/lib/thinking_sphinx/property.rb +0 -187
- data/lib/thinking_sphinx/search_methods.rb +0 -439
- data/lib/thinking_sphinx/sinatra.rb +0 -7
- data/lib/thinking_sphinx/source.rb +0 -194
- data/lib/thinking_sphinx/source/internal_properties.rb +0 -51
- data/lib/thinking_sphinx/source/sql.rb +0 -174
- data/spec/fixtures/data.sql +0 -32
- data/spec/fixtures/database.yml.default +0 -3
- data/spec/fixtures/models.rb +0 -164
- data/spec/fixtures/structure.sql +0 -146
- data/spec/sphinx_helper.rb +0 -60
- data/spec/support/rails.rb +0 -25
- data/spec/thinking_sphinx/active_record/delta_spec.rb +0 -123
- data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +0 -173
- data/spec/thinking_sphinx/active_record/scopes_spec.rb +0 -177
- data/spec/thinking_sphinx/active_record_spec.rb +0 -573
- data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +0 -163
- data/spec/thinking_sphinx/association_spec.rb +0 -250
- data/spec/thinking_sphinx/attribute_spec.rb +0 -552
- data/spec/thinking_sphinx/auto_version_spec.rb +0 -103
- data/spec/thinking_sphinx/connection_spec.rb +0 -77
- data/spec/thinking_sphinx/context_spec.rb +0 -127
- data/spec/thinking_sphinx/core/array_spec.rb +0 -9
- data/spec/thinking_sphinx/core/string_spec.rb +0 -9
- data/spec/thinking_sphinx/facet_spec.rb +0 -359
- data/spec/thinking_sphinx/field_spec.rb +0 -127
- data/spec/thinking_sphinx/index/builder_spec.rb +0 -532
- data/spec/thinking_sphinx/index/faux_column_spec.rb +0 -36
- data/spec/thinking_sphinx/search_methods_spec.rb +0 -156
- data/spec/thinking_sphinx/source_spec.rb +0 -267
- data/spec/thinking_sphinx/test_spec.rb +0 -20
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::Index::FauxColumn do
|
|
4
|
-
describe "coerce class method" do
|
|
5
|
-
before :each do
|
|
6
|
-
@column = stub('column')
|
|
7
|
-
ThinkingSphinx::Index::FauxColumn.stub!(:new => @column)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
it "should return a single faux column if passed a string" do
|
|
11
|
-
ThinkingSphinx::Index::FauxColumn.coerce("string").should == @column
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should return a single faux column if passed a symbol" do
|
|
15
|
-
ThinkingSphinx::Index::FauxColumn.coerce(:string).should == @column
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should return an array of faux columns if passed an array of strings" do
|
|
19
|
-
ThinkingSphinx::Index::FauxColumn.coerce(["one", "two"]).should == [
|
|
20
|
-
@column, @column
|
|
21
|
-
]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should return an array of faux columns if passed an array of symbols" do
|
|
25
|
-
ThinkingSphinx::Index::FauxColumn.coerce([:one, :two]).should == [
|
|
26
|
-
@column, @column
|
|
27
|
-
]
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe '#to_ary' do
|
|
32
|
-
it "should return an array with the instance inside it" do
|
|
33
|
-
subject.to_ary.should == [subject]
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::SearchMethods do
|
|
4
|
-
it "should be included into models with indexes" do
|
|
5
|
-
Alpha.included_modules.should include(ThinkingSphinx::SearchMethods)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should not be included into models that don't have indexes" do
|
|
9
|
-
Gamma.included_modules.should_not include(ThinkingSphinx::SearchMethods)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe '.search_context' do
|
|
13
|
-
it "should return nil if not within a model" do
|
|
14
|
-
ThinkingSphinx.search_context.should be_nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should return the model if within one" do
|
|
18
|
-
Alpha.search_context.should == Alpha
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe '.search' do
|
|
23
|
-
it "should return an instance of ThinkingSphinx::Search" do
|
|
24
|
-
Alpha.search.class.should == ThinkingSphinx::Search
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should set the classes option if not already set" do
|
|
28
|
-
search = Alpha.search
|
|
29
|
-
search.options[:classes].should == [Alpha]
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "shouldn't set the classes option if already defined" do
|
|
33
|
-
search = Alpha.search :classes => [Beta]
|
|
34
|
-
search.options[:classes].should == [Beta]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should default to nil for the classes options" do
|
|
38
|
-
ThinkingSphinx.search.options[:classes].should be_nil
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe '.search_for_ids' do
|
|
43
|
-
it "should return an instance of ThinkingSphinx::Search" do
|
|
44
|
-
Alpha.search.class.should == ThinkingSphinx::Search
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should set the classes option if not already set" do
|
|
48
|
-
search = Alpha.search_for_ids
|
|
49
|
-
search.options[:classes].should == [Alpha]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "shouldn't set the classes option if already defined" do
|
|
53
|
-
search = Alpha.search_for_ids :classes => [Beta]
|
|
54
|
-
search.options[:classes].should == [Beta]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should set ids_only to true" do
|
|
58
|
-
search = Alpha.search_for_ids
|
|
59
|
-
search.options[:ids_only].should be_true
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
describe '.search_for_id' do
|
|
64
|
-
before :each do
|
|
65
|
-
@config = ThinkingSphinx::Configuration.instance
|
|
66
|
-
@client = Riddle::Client.new
|
|
67
|
-
|
|
68
|
-
ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
|
|
69
|
-
@client.stub!(:query => {:matches => [], :total_found => 0})
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should set the id range to the given id value" do
|
|
73
|
-
ThinkingSphinx.search_for_id(101, 'alpha_core')
|
|
74
|
-
|
|
75
|
-
@client.id_range.should == (101..101)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should not make any calls to the database" do
|
|
79
|
-
Alpha.should_not_receive(:find)
|
|
80
|
-
|
|
81
|
-
ThinkingSphinx.search_for_id(101, 'alpha_core', :classes => [Alpha])
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should return true if there is a record" do
|
|
85
|
-
@client.stub!(:query => {:matches => [
|
|
86
|
-
{:attributes => {'sphinx_internal_id' => 100}}
|
|
87
|
-
], :total_found => 1})
|
|
88
|
-
|
|
89
|
-
ThinkingSphinx.search_for_id(101, 'alpha_core').should be_true
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should return false if there isn't a record" do
|
|
93
|
-
ThinkingSphinx.search_for_id(101, 'alpha_core').should be_false
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
describe '.count' do
|
|
98
|
-
before :each do
|
|
99
|
-
@config = ThinkingSphinx::Configuration.instance
|
|
100
|
-
@client = Riddle::Client.new
|
|
101
|
-
|
|
102
|
-
ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
|
|
103
|
-
@client.stub!(:query => {:matches => [], :total_found => 42})
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should fall through to ActiveRecord if called on a class" do
|
|
107
|
-
@client.should_not_receive(:query)
|
|
108
|
-
|
|
109
|
-
Alpha.count
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should return the total number of results if called globally" do
|
|
113
|
-
ThinkingSphinx.count.should == 42
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
describe '.search_count' do
|
|
118
|
-
before :each do
|
|
119
|
-
@config = ThinkingSphinx::Configuration.instance
|
|
120
|
-
@client = Riddle::Client.new
|
|
121
|
-
|
|
122
|
-
ThinkingSphinx::Connection.stub!(:take).and_yield(@client)
|
|
123
|
-
@client.stub!(:query => {:matches => [], :total_found => 42})
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should return the total number of results" do
|
|
127
|
-
Alpha.search_count.should == 42
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "should not make any calls to the database" do
|
|
131
|
-
Alpha.should_not_receive(:find)
|
|
132
|
-
|
|
133
|
-
Alpha.search_count
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
describe '.facets' do
|
|
138
|
-
before :each do
|
|
139
|
-
ThinkingSphinx::Search.stub!(:bundle_searches => [])
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should return a FacetSearch instance" do
|
|
143
|
-
Alpha.facets.should be_a(ThinkingSphinx::FacetSearch)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should set the classes option if not already set" do
|
|
147
|
-
facets = Alpha.facets
|
|
148
|
-
facets.options[:classes].should == [Alpha]
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "shouldn't set the classes option if already defined" do
|
|
152
|
-
facets = Alpha.facets :classes => [Beta]
|
|
153
|
-
facets.options[:classes].should == [Beta]
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::Source do
|
|
4
|
-
before :each do
|
|
5
|
-
@index = ThinkingSphinx::Index.new(Person)
|
|
6
|
-
@source = ThinkingSphinx::Source.new(@index, :sql_range_step => 1000)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
describe '#initialize' do
|
|
10
|
-
it "should store the current connection details" do
|
|
11
|
-
config = Person.connection.instance_variable_get(:@config)
|
|
12
|
-
@source.database_configuration.should == config
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should generate the name from the model" do
|
|
17
|
-
@source.name.should == "person"
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should handle namespaced models for name generation" do
|
|
21
|
-
index = ThinkingSphinx::Index.new(Admin::Person)
|
|
22
|
-
source = ThinkingSphinx::Source.new(index)
|
|
23
|
-
source.name.should == "admin_person"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
describe "#to_riddle_for_core" do
|
|
27
|
-
before :each do
|
|
28
|
-
config = ThinkingSphinx::Configuration.instance
|
|
29
|
-
config.source_options[:sql_ranged_throttle] = 100
|
|
30
|
-
|
|
31
|
-
ThinkingSphinx::Field.new(
|
|
32
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:first_name)
|
|
33
|
-
)
|
|
34
|
-
ThinkingSphinx::Field.new(
|
|
35
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:last_name)
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
ThinkingSphinx::Attribute.new(
|
|
39
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:id), :as => :internal_id
|
|
40
|
-
)
|
|
41
|
-
ThinkingSphinx::Attribute.new(
|
|
42
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:birthday)
|
|
43
|
-
)
|
|
44
|
-
ThinkingSphinx::Attribute.new(
|
|
45
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:tags, :id), :as => :tag_ids
|
|
46
|
-
)
|
|
47
|
-
ThinkingSphinx::Attribute.new(
|
|
48
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:contacts, :id),
|
|
49
|
-
:as => :contact_ids, :source => :query
|
|
50
|
-
)
|
|
51
|
-
ThinkingSphinx::Attribute.new(
|
|
52
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:source, :id),
|
|
53
|
-
:as => :source_id, :type => :integer
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
ThinkingSphinx::Join.new(
|
|
57
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:links)
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
@source.conditions << "`birthday` <= NOW()"
|
|
61
|
-
@source.groupings << "`first_name`"
|
|
62
|
-
|
|
63
|
-
@index.local_options[:group_concat_max_len] = 1024
|
|
64
|
-
|
|
65
|
-
@riddle = @source.to_riddle_for_core(1, 0)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should generate a Riddle Source object" do
|
|
69
|
-
@riddle.should be_a_kind_of(Riddle::Configuration::SQLSource)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should use the index and name its own name" do
|
|
73
|
-
@riddle.name.should == "person_core_0"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should use the model's database connection to determine type" do
|
|
77
|
-
@riddle.type.should == "mysql"
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should match the model's database settings" do
|
|
81
|
-
config = Person.connection.instance_variable_get(:@config)
|
|
82
|
-
@riddle.sql_db.should == config[:database]
|
|
83
|
-
@riddle.sql_user.should == config[:username]
|
|
84
|
-
@riddle.sql_pass.should == config[:password].to_s
|
|
85
|
-
@riddle.sql_host.should == config[:host]
|
|
86
|
-
@riddle.sql_port.should == config[:port]
|
|
87
|
-
@riddle.sql_sock.should == config[:socket]
|
|
88
|
-
|
|
89
|
-
@riddle.mysql_ssl_ca.should == config[:sslca]
|
|
90
|
-
@riddle.mysql_ssl_cert.should == config[:sslcert]
|
|
91
|
-
@riddle.mysql_ssl_key.should == config[:sslkey]
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "should use a environment user if nothing else is provided" do
|
|
95
|
-
Person.connection.stub!(:instance_variable_get => {
|
|
96
|
-
:user => nil,
|
|
97
|
-
:username => nil
|
|
98
|
-
})
|
|
99
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
100
|
-
|
|
101
|
-
riddle = @source.to_riddle_for_core(1, 0)
|
|
102
|
-
riddle.sql_user.should == ENV['USER']
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "should assign attributes" do
|
|
106
|
-
# 3 internal attributes plus the one requested
|
|
107
|
-
@riddle.sql_attr_uint.length.should == 4
|
|
108
|
-
@riddle.sql_attr_uint.last.should == :internal_id
|
|
109
|
-
|
|
110
|
-
@riddle.sql_attr_timestamp.length.should == 1
|
|
111
|
-
@riddle.sql_attr_timestamp.first.should == :birthday
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "should not include an attribute definition for polymorphic references without data" do
|
|
115
|
-
@riddle.sql_attr_uint.select { |uint|
|
|
116
|
-
uint == :source_id
|
|
117
|
-
}.should be_empty
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should set Sphinx Source options" do
|
|
121
|
-
@riddle.sql_range_step.should == 1000
|
|
122
|
-
@riddle.sql_ranged_throttle.should == 100
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
describe "#sql_query" do
|
|
126
|
-
before :each do
|
|
127
|
-
@query = @riddle.sql_query
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "should select data from the model table" do
|
|
131
|
-
@query.should match(/FROM\s+`people`/)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "should select each of the fields" do
|
|
135
|
-
@query.should match(/`first_name`.+FROM/)
|
|
136
|
-
@query.should match(/`last_name`.+FROM/)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should select each of the attributes" do
|
|
140
|
-
@query.should match(/`id` AS `internal_id`.+FROM/)
|
|
141
|
-
@query.should match(/`birthday`.+FROM/)
|
|
142
|
-
@query.should match(/`tags`.`id`.+ AS `tag_ids`.+FROM/)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it "should not match the sourced MVA attribute" do
|
|
146
|
-
@query.should_not match(/contact_ids/)
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
it "should include joins for required associations" do
|
|
150
|
-
@query.should match(/LEFT OUTER JOIN `tags`/)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "should not include joins for the sourced MVA attribute" do
|
|
154
|
-
@query.should_not match(/LEFT OUTER JOIN `contacts`/)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "should include explicitly requested joins" do
|
|
158
|
-
@query.should match(/LEFT OUTER JOIN `links`/)
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should include any defined conditions" do
|
|
162
|
-
@query.should match(/WHERE.+`birthday` <= NOW()/)
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should include any defined groupings" do
|
|
166
|
-
@query.should match(/GROUP BY.+`first_name`/)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "should include descendants" do
|
|
170
|
-
index = ThinkingSphinx::Index.new(Child)
|
|
171
|
-
source = ThinkingSphinx::Source.new(index, :sql_range_step => 1000)
|
|
172
|
-
riddle = source.to_riddle_for_core(1, 0)
|
|
173
|
-
query = riddle.sql_query
|
|
174
|
-
|
|
175
|
-
query.should match(/WHERE.+`people`\.`type`.+'Child'.+ 'Teenager'\)/)
|
|
176
|
-
query.should_not match(/WHERE.+"users"."type" = 'Employee'/)
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
describe "#sql_query_range" do
|
|
181
|
-
before :each do
|
|
182
|
-
@query = @riddle.sql_query_range
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "should select data from the model table" do
|
|
186
|
-
@query.should match(/FROM `people`/)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it "should select the minimum and the maximum ids" do
|
|
190
|
-
@query.should match(/SELECT.+MIN.+MAX.+FROM/)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
describe "#sql_query_info" do
|
|
195
|
-
before :each do
|
|
196
|
-
@query = @riddle.sql_query_info
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "should select all fields from the model table" do
|
|
200
|
-
@query.should match(/SELECT \* FROM `people`/)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
it "should filter the primary key with the offset" do
|
|
204
|
-
model_count = ThinkingSphinx.context.indexed_models.size
|
|
205
|
-
@query.should match(/WHERE `id` = \(\(\$id - 1\) \/ #{model_count}\)/)
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
describe "#sql_query_pre" do
|
|
210
|
-
before :each do
|
|
211
|
-
@queries = @riddle.sql_query_pre
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
it "should default to just the UTF8 statement" do
|
|
215
|
-
@queries.detect { |query|
|
|
216
|
-
query == "SET NAMES utf8"
|
|
217
|
-
}.should_not be_nil
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "should set the group_concat_max_len session value for MySQL if requested" do
|
|
221
|
-
@queries.detect { |query|
|
|
222
|
-
query == "SET SESSION group_concat_max_len = 1024"
|
|
223
|
-
}.should_not be_nil
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
describe "#to_riddle_for_core with range disabled" do
|
|
229
|
-
before :each do
|
|
230
|
-
ThinkingSphinx::Field.new(
|
|
231
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:first_name)
|
|
232
|
-
)
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
describe "set per-index" do
|
|
236
|
-
before :each do
|
|
237
|
-
@index.local_options[:disable_range] = true
|
|
238
|
-
@riddle = @source.to_riddle_for_core(1, 0)
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "should not have the range in the sql_query" do
|
|
242
|
-
@riddle.sql_query.should_not match(/`people`.`id` >= \$start/)
|
|
243
|
-
@riddle.sql_query.should_not match(/`people`.`id` <= \$end/)
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it "should not have a sql_query_range" do
|
|
247
|
-
@riddle.sql_query_range.should be_nil
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
describe "set globally" do
|
|
252
|
-
before :each do
|
|
253
|
-
ThinkingSphinx::Configuration.instance.index_options[:disable_range] = true
|
|
254
|
-
@riddle = @source.to_riddle_for_core(1, 0)
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
it "should not have the range in the sql_query" do
|
|
258
|
-
@riddle.sql_query.should_not match(/`people`.`id` >= \$start/)
|
|
259
|
-
@riddle.sql_query.should_not match(/`people`.`id` <= \$end/)
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
it "should not have a sql_query_range" do
|
|
263
|
-
@riddle.sql_query_range.should be_nil
|
|
264
|
-
end
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
end
|