thinking-sphinx 1.2.13 → 6.0.0
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.
- checksums.yaml +7 -0
- data/.circleci/config.yml +99 -0
- data/.github/actions/test/action.yml +46 -0
- data/.github/workflows/ci.yml +75 -0
- data/.gitignore +18 -0
- data/.travis.yml +36 -0
- data/Appraisals +71 -0
- data/CHANGELOG.markdown +782 -0
- data/Gemfile +18 -0
- data/LICENCE +1 -1
- data/Procfile.support +2 -0
- data/README.textile +91 -136
- data/Rakefile +26 -0
- data/bin/console +15 -0
- data/bin/loadsphinx +99 -0
- data/bin/testmatrix +48 -0
- data/lib/thinking/sphinx.rb +3 -0
- data/lib/thinking-sphinx.rb +3 -0
- data/lib/thinking_sphinx/active_record/association.rb +19 -0
- data/lib/thinking_sphinx/active_record/association_proxy/attribute_finder.rb +44 -0
- data/lib/thinking_sphinx/active_record/association_proxy/attribute_matcher.rb +40 -0
- data/lib/thinking_sphinx/active_record/association_proxy.rb +34 -0
- data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +52 -0
- data/lib/thinking_sphinx/active_record/attribute/type.rb +106 -0
- data/lib/thinking_sphinx/active_record/attribute/values.rb +20 -0
- data/lib/thinking_sphinx/active_record/attribute.rb +22 -0
- data/lib/thinking_sphinx/active_record/base.rb +91 -0
- data/lib/thinking_sphinx/active_record/callbacks/association_delta_callbacks.rb +21 -0
- data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +27 -0
- data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +66 -0
- data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +78 -0
- data/lib/thinking_sphinx/active_record/column.rb +44 -0
- data/lib/thinking_sphinx/active_record/column_sql_presenter.rb +54 -0
- data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +19 -0
- data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +51 -0
- data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +47 -0
- data/lib/thinking_sphinx/active_record/database_adapters.rb +59 -0
- data/lib/thinking_sphinx/active_record/depolymorph/association_reflection.rb +32 -0
- data/lib/thinking_sphinx/active_record/depolymorph/base_reflection.rb +32 -0
- data/lib/thinking_sphinx/active_record/depolymorph/conditions_reflection.rb +40 -0
- data/lib/thinking_sphinx/active_record/depolymorph/overridden_reflection.rb +50 -0
- data/lib/thinking_sphinx/active_record/depolymorph/scoped_reflection.rb +26 -0
- data/lib/thinking_sphinx/active_record/field.rb +18 -0
- data/lib/thinking_sphinx/active_record/filter_reflection.rb +18 -0
- data/lib/thinking_sphinx/active_record/index.rb +71 -0
- data/lib/thinking_sphinx/active_record/interpreter.rb +77 -0
- data/lib/thinking_sphinx/active_record/join_association.rb +17 -0
- data/lib/thinking_sphinx/active_record/log_subscriber.rb +37 -0
- data/lib/thinking_sphinx/active_record/polymorpher.rb +64 -0
- data/lib/thinking_sphinx/active_record/property.rb +30 -0
- data/lib/thinking_sphinx/active_record/property_query.rb +149 -0
- data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +89 -0
- data/lib/thinking_sphinx/active_record/simple_many_query.rb +37 -0
- data/lib/thinking_sphinx/active_record/source_joins.rb +68 -0
- data/lib/thinking_sphinx/active_record/sql_builder/clause_builder.rb +29 -0
- data/lib/thinking_sphinx/active_record/sql_builder/query.rb +59 -0
- data/lib/thinking_sphinx/active_record/sql_builder/statement.rb +147 -0
- data/lib/thinking_sphinx/active_record/sql_builder.rb +107 -0
- data/lib/thinking_sphinx/active_record/sql_source/template.rb +55 -0
- data/lib/thinking_sphinx/active_record/sql_source.rb +173 -0
- data/lib/thinking_sphinx/active_record.rb +39 -301
- data/lib/thinking_sphinx/attribute_types.rb +72 -0
- data/lib/thinking_sphinx/batched_search.rb +28 -0
- data/lib/thinking_sphinx/callbacks/appender.rb +63 -0
- data/lib/thinking_sphinx/callbacks.rb +44 -0
- data/lib/thinking_sphinx/capistrano/v2.rb +60 -0
- data/lib/thinking_sphinx/capistrano/v3.rb +104 -0
- data/lib/thinking_sphinx/capistrano.rb +10 -0
- data/lib/thinking_sphinx/commander.rb +27 -0
- data/lib/thinking_sphinx/commands/base.rb +53 -0
- data/lib/thinking_sphinx/commands/clear_real_time.rb +22 -0
- data/lib/thinking_sphinx/commands/clear_sql.rb +18 -0
- data/lib/thinking_sphinx/commands/configure.rb +15 -0
- data/lib/thinking_sphinx/commands/index_real_time.rb +15 -0
- data/lib/thinking_sphinx/commands/index_sql.rb +25 -0
- data/lib/thinking_sphinx/commands/merge.rb +27 -0
- data/lib/thinking_sphinx/commands/merge_and_update.rb +57 -0
- data/lib/thinking_sphinx/commands/prepare.rb +15 -0
- data/lib/thinking_sphinx/commands/rotate.rb +13 -0
- data/lib/thinking_sphinx/commands/running.rb +15 -0
- data/lib/thinking_sphinx/commands/start_attached.rb +22 -0
- data/lib/thinking_sphinx/commands/start_detached.rb +21 -0
- data/lib/thinking_sphinx/commands/stop.rb +24 -0
- data/lib/thinking_sphinx/commands.rb +20 -0
- data/lib/thinking_sphinx/configuration/consistent_ids.rb +35 -0
- data/lib/thinking_sphinx/configuration/defaults.rb +7 -0
- data/lib/thinking_sphinx/configuration/distributed_indices.rb +31 -0
- data/lib/thinking_sphinx/configuration/duplicate_names.rb +36 -0
- data/lib/thinking_sphinx/configuration/minimum_fields.rb +36 -0
- data/lib/thinking_sphinx/configuration.rb +196 -269
- data/lib/thinking_sphinx/connection/client.rb +74 -0
- data/lib/thinking_sphinx/connection/jruby.rb +58 -0
- data/lib/thinking_sphinx/connection/mri.rb +26 -0
- data/lib/thinking_sphinx/connection.rb +73 -0
- data/lib/thinking_sphinx/core/field.rb +11 -0
- data/lib/thinking_sphinx/core/index.rb +110 -0
- data/lib/thinking_sphinx/core/interpreter.rb +25 -0
- data/lib/thinking_sphinx/core/property.rb +15 -0
- data/lib/thinking_sphinx/core/settings.rb +11 -0
- data/lib/thinking_sphinx/core.rb +11 -0
- data/lib/thinking_sphinx/deletion.rb +70 -0
- data/lib/thinking_sphinx/deltas/default_delta.rb +57 -66
- data/lib/thinking_sphinx/deltas/delete_job.rb +27 -0
- data/lib/thinking_sphinx/deltas/index_job.rb +28 -0
- data/lib/thinking_sphinx/deltas.rb +52 -27
- data/lib/thinking_sphinx/distributed/index.rb +46 -0
- data/lib/thinking_sphinx/distributed.rb +7 -0
- data/lib/thinking_sphinx/errors.rb +96 -0
- data/lib/thinking_sphinx/excerpter.rb +36 -19
- data/lib/thinking_sphinx/facet.rb +29 -122
- data/lib/thinking_sphinx/facet_search.rb +132 -125
- data/lib/thinking_sphinx/float_formatter.rb +35 -0
- data/lib/thinking_sphinx/frameworks/plain.rb +10 -0
- data/lib/thinking_sphinx/frameworks/rails.rb +11 -0
- data/lib/thinking_sphinx/frameworks.rb +11 -0
- data/lib/thinking_sphinx/guard/file.rb +28 -0
- data/lib/thinking_sphinx/guard/files.rb +40 -0
- data/lib/thinking_sphinx/guard/none.rb +7 -0
- data/lib/thinking_sphinx/guard.rb +9 -0
- data/lib/thinking_sphinx/hooks/guard_presence.rb +34 -0
- data/lib/thinking_sphinx/index.rb +50 -92
- data/lib/thinking_sphinx/index_set.rb +96 -0
- data/lib/thinking_sphinx/indexing_strategies/all_at_once.rb +9 -0
- data/lib/thinking_sphinx/indexing_strategies/one_at_a_time.rb +16 -0
- data/lib/thinking_sphinx/interfaces/base.rb +13 -0
- data/lib/thinking_sphinx/interfaces/daemon.rb +27 -0
- data/lib/thinking_sphinx/interfaces/real_time.rb +46 -0
- data/lib/thinking_sphinx/interfaces/sql.rb +53 -0
- data/lib/thinking_sphinx/interfaces.rb +10 -0
- data/lib/thinking_sphinx/logger.rb +9 -0
- data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +30 -0
- data/lib/thinking_sphinx/masks/pagination_mask.rb +63 -0
- data/lib/thinking_sphinx/masks/scopes_mask.rb +56 -0
- data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +17 -0
- data/lib/thinking_sphinx/masks.rb +10 -0
- data/lib/thinking_sphinx/middlewares/active_record_translator.rb +103 -0
- data/lib/thinking_sphinx/middlewares/geographer.rb +94 -0
- data/lib/thinking_sphinx/middlewares/glazier.rb +52 -0
- data/lib/thinking_sphinx/middlewares/ids_only.rb +15 -0
- data/lib/thinking_sphinx/middlewares/inquirer.rb +64 -0
- data/lib/thinking_sphinx/middlewares/middleware.rb +11 -0
- data/lib/thinking_sphinx/middlewares/sphinxql.rb +256 -0
- data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +47 -0
- data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +48 -0
- data/lib/thinking_sphinx/middlewares/valid_options.rb +25 -0
- data/lib/thinking_sphinx/middlewares.rb +35 -0
- data/lib/thinking_sphinx/panes/attributes_pane.rb +11 -0
- data/lib/thinking_sphinx/panes/distance_pane.rb +15 -0
- data/lib/thinking_sphinx/panes/excerpts_pane.rb +43 -0
- data/lib/thinking_sphinx/panes/weight_pane.rb +11 -0
- data/lib/thinking_sphinx/panes.rb +10 -0
- data/lib/thinking_sphinx/processor.rb +71 -0
- data/lib/thinking_sphinx/query.rb +11 -0
- data/lib/thinking_sphinx/railtie.rb +38 -0
- data/lib/thinking_sphinx/rake_interface.rb +34 -0
- data/lib/thinking_sphinx/real_time/attribute.rb +27 -0
- data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +60 -0
- data/lib/thinking_sphinx/real_time/field.rb +9 -0
- data/lib/thinking_sphinx/real_time/index/template.rb +52 -0
- data/lib/thinking_sphinx/real_time/index.rb +102 -0
- data/lib/thinking_sphinx/real_time/interpreter.rb +54 -0
- data/lib/thinking_sphinx/real_time/populator.rb +46 -0
- data/lib/thinking_sphinx/real_time/processor.rb +36 -0
- data/lib/thinking_sphinx/real_time/property.rb +21 -0
- data/lib/thinking_sphinx/real_time/transcribe_instance.rb +38 -0
- data/lib/thinking_sphinx/real_time/transcriber.rb +89 -0
- data/lib/thinking_sphinx/real_time/translator.rb +39 -0
- data/lib/thinking_sphinx/real_time.rb +40 -0
- data/lib/thinking_sphinx/scopes.rb +34 -0
- data/lib/thinking_sphinx/search/batch_inquirer.rb +23 -0
- data/lib/thinking_sphinx/search/context.rb +31 -0
- data/lib/thinking_sphinx/search/glaze.rb +39 -0
- data/lib/thinking_sphinx/search/merger.rb +34 -0
- data/lib/thinking_sphinx/search/query.rb +33 -0
- data/lib/thinking_sphinx/search/stale_ids_exception.rb +15 -0
- data/lib/thinking_sphinx/search.rb +166 -704
- data/lib/thinking_sphinx/settings.rb +128 -0
- data/lib/thinking_sphinx/sinatra.rb +7 -0
- data/lib/thinking_sphinx/subscribers/populator_subscriber.rb +48 -0
- data/lib/thinking_sphinx/tasks.rb +70 -150
- data/lib/thinking_sphinx/test.rb +56 -0
- data/lib/thinking_sphinx/utf8.rb +18 -0
- data/lib/thinking_sphinx/wildcard.rb +42 -0
- data/lib/thinking_sphinx/with_output.rb +13 -0
- data/lib/thinking_sphinx.rb +83 -185
- data/spec/acceptance/association_scoping_spec.rb +65 -0
- data/spec/acceptance/attribute_access_spec.rb +58 -0
- data/spec/acceptance/attribute_updates_spec.rb +18 -0
- data/spec/acceptance/batch_searching_spec.rb +23 -0
- data/spec/acceptance/big_integers_spec.rb +61 -0
- data/spec/acceptance/excerpts_spec.rb +50 -0
- data/spec/acceptance/facets_spec.rb +141 -0
- data/spec/acceptance/geosearching_spec.rb +70 -0
- data/spec/acceptance/grouping_by_attributes_spec.rb +79 -0
- data/spec/acceptance/index_options_spec.rb +154 -0
- data/spec/acceptance/indexing_spec.rb +38 -0
- data/spec/acceptance/merging_spec.rb +90 -0
- data/spec/acceptance/paginating_search_results_spec.rb +42 -0
- data/spec/acceptance/real_time_updates_spec.rb +115 -0
- data/spec/acceptance/remove_deleted_records_spec.rb +99 -0
- data/spec/acceptance/search_counts_spec.rb +20 -0
- data/spec/acceptance/search_for_just_ids_spec.rb +21 -0
- data/spec/acceptance/searching_across_models_spec.rb +47 -0
- data/spec/acceptance/searching_across_schemas_spec.rb +40 -0
- data/spec/acceptance/searching_on_fields_spec.rb +59 -0
- data/spec/acceptance/searching_with_filters_spec.rb +159 -0
- data/spec/acceptance/searching_with_sti_spec.rb +76 -0
- data/spec/acceptance/searching_within_a_model_spec.rb +117 -0
- data/spec/acceptance/sorting_search_results_spec.rb +50 -0
- data/spec/acceptance/spec_helper.rb +6 -0
- data/spec/acceptance/specifying_sql_spec.rb +516 -0
- data/spec/acceptance/sphinx_scopes_spec.rb +87 -0
- data/spec/acceptance/sql_deltas_spec.rb +78 -0
- data/spec/acceptance/support/database_cleaner.rb +13 -0
- data/spec/acceptance/support/sphinx_controller.rb +62 -0
- data/spec/acceptance/support/sphinx_helpers.rb +45 -0
- data/spec/acceptance/suspended_deltas_spec.rb +56 -0
- data/spec/fixtures/database.yml +4 -0
- data/spec/internal/app/indices/admin_person_index.rb +9 -0
- data/spec/internal/app/indices/album_index.rb +9 -0
- data/spec/internal/app/indices/animal_index.rb +5 -0
- data/spec/internal/app/indices/article_index.rb +31 -0
- data/spec/internal/app/indices/bird_index.rb +6 -0
- data/spec/internal/app/indices/book_index.rb +11 -0
- data/spec/internal/app/indices/car_index.rb +7 -0
- data/spec/internal/app/indices/city_index.rb +9 -0
- data/spec/internal/app/indices/colour_index.rb +7 -0
- data/spec/internal/app/indices/product_index.rb +27 -0
- data/spec/internal/app/indices/tee_index.rb +6 -0
- data/spec/internal/app/indices/user_index.rb +9 -0
- data/spec/internal/app/models/admin/person.rb +9 -0
- data/spec/internal/app/models/album.rb +25 -0
- data/spec/internal/app/models/animal.rb +5 -0
- data/spec/internal/app/models/article.rb +9 -0
- data/spec/internal/app/models/bird.rb +5 -0
- data/spec/internal/app/models/book.rb +18 -0
- data/spec/internal/app/models/car.rb +7 -0
- data/spec/internal/app/models/categorisation.rb +15 -0
- data/spec/internal/app/models/category.rb +6 -0
- data/spec/internal/app/models/city.rb +7 -0
- data/spec/internal/app/models/colour.rb +7 -0
- data/spec/internal/app/models/event.rb +5 -0
- data/spec/internal/app/models/flightless_bird.rb +4 -0
- data/spec/internal/app/models/genre.rb +5 -0
- data/spec/internal/app/models/hardcover.rb +5 -0
- data/spec/internal/app/models/mammal.rb +4 -0
- data/spec/internal/app/models/manufacturer.rb +5 -0
- data/spec/internal/app/models/product.rb +8 -0
- data/spec/internal/app/models/tag.rb +6 -0
- data/{features/support → spec/internal/app}/models/tagging.rb +3 -1
- data/spec/internal/app/models/tee.rb +10 -0
- data/spec/internal/app/models/tweet.rb +5 -0
- data/spec/internal/app/models/user.rb +10 -0
- data/spec/internal/config/database.yml +17 -0
- data/spec/internal/db/schema.rb +115 -0
- data/spec/internal/tmp/.gitkeep +0 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/support/json_column.rb +35 -0
- data/spec/support/multi_schema.rb +50 -0
- data/spec/support/mysql.rb +25 -0
- data/spec/support/sphinx_yaml_helpers.rb +16 -0
- data/spec/thinking_sphinx/active_record/association_spec.rb +14 -0
- data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +165 -0
- data/spec/thinking_sphinx/active_record/base_spec.rb +131 -0
- data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +128 -0
- data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +176 -0
- data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +91 -0
- data/spec/thinking_sphinx/active_record/column_spec.rb +72 -0
- data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +39 -0
- data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +33 -0
- data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +70 -0
- data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +66 -0
- data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +128 -0
- data/spec/thinking_sphinx/active_record/field_spec.rb +51 -0
- data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +207 -0
- data/spec/thinking_sphinx/active_record/index_spec.rb +220 -0
- data/spec/thinking_sphinx/active_record/interpreter_spec.rb +329 -0
- data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +87 -0
- data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +264 -0
- data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +662 -0
- data/spec/thinking_sphinx/active_record/sql_source_spec.rb +507 -0
- data/spec/thinking_sphinx/attribute_types_spec.rb +52 -0
- data/spec/thinking_sphinx/commands/clear_real_time_spec.rb +46 -0
- data/spec/thinking_sphinx/commands/clear_sql_spec.rb +52 -0
- data/spec/thinking_sphinx/commands/configure_spec.rb +31 -0
- data/spec/thinking_sphinx/commands/index_real_time_spec.rb +33 -0
- data/spec/thinking_sphinx/commands/index_sql_spec.rb +86 -0
- data/spec/thinking_sphinx/commands/merge_and_update_spec.rb +106 -0
- data/spec/thinking_sphinx/commands/merge_spec.rb +48 -0
- data/spec/thinking_sphinx/commands/prepare_spec.rb +31 -0
- data/spec/thinking_sphinx/commands/running_spec.rb +30 -0
- data/spec/thinking_sphinx/commands/start_detached_spec.rb +67 -0
- data/spec/thinking_sphinx/commands/stop_spec.rb +63 -0
- data/spec/thinking_sphinx/configuration/minimum_fields_spec.rb +60 -0
- data/spec/thinking_sphinx/configuration_spec.rb +582 -0
- data/spec/thinking_sphinx/connection/mri_spec.rb +49 -0
- data/spec/thinking_sphinx/connection_spec.rb +87 -0
- data/spec/thinking_sphinx/deletion_spec.rb +57 -0
- data/spec/thinking_sphinx/deltas/default_delta_spec.rb +123 -0
- data/spec/thinking_sphinx/deltas_spec.rb +77 -0
- data/spec/thinking_sphinx/errors_spec.rb +103 -0
- data/spec/thinking_sphinx/excerpter_spec.rb +53 -0
- data/spec/thinking_sphinx/facet_search_spec.rb +133 -0
- data/spec/thinking_sphinx/hooks/guard_presence_spec.rb +30 -0
- data/spec/thinking_sphinx/index_set_spec.rb +132 -0
- data/spec/thinking_sphinx/index_spec.rb +140 -0
- data/spec/thinking_sphinx/interfaces/daemon_spec.rb +60 -0
- data/spec/thinking_sphinx/interfaces/real_time_spec.rb +109 -0
- data/spec/thinking_sphinx/interfaces/sql_spec.rb +122 -0
- data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +123 -0
- data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +139 -0
- data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +180 -0
- data/spec/thinking_sphinx/middlewares/geographer_spec.rb +102 -0
- data/spec/thinking_sphinx/middlewares/glazier_spec.rb +65 -0
- data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +72 -0
- data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +401 -0
- data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +50 -0
- data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +113 -0
- data/spec/thinking_sphinx/middlewares/valid_options_spec.rb +51 -0
- data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +23 -0
- data/spec/thinking_sphinx/panes/distance_pane_spec.rb +43 -0
- data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
- data/spec/thinking_sphinx/panes/weight_pane_spec.rb +22 -0
- data/spec/thinking_sphinx/rake_interface_spec.rb +39 -0
- data/spec/thinking_sphinx/real_time/attribute_spec.rb +64 -0
- data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +238 -0
- data/spec/thinking_sphinx/real_time/field_spec.rb +69 -0
- data/spec/thinking_sphinx/real_time/index_spec.rb +230 -0
- data/spec/thinking_sphinx/real_time/interpreter_spec.rb +203 -0
- data/spec/thinking_sphinx/real_time/transcribe_instance_spec.rb +35 -0
- data/spec/thinking_sphinx/real_time/transcriber_spec.rb +109 -0
- data/spec/thinking_sphinx/real_time/translator_spec.rb +17 -0
- data/spec/thinking_sphinx/scopes_spec.rb +51 -0
- data/spec/thinking_sphinx/search/glaze_spec.rb +79 -0
- data/spec/thinking_sphinx/search/query_spec.rb +87 -0
- data/spec/thinking_sphinx/search_spec.rb +214 -0
- data/spec/thinking_sphinx/wildcard_spec.rb +53 -0
- data/spec/thinking_sphinx_spec.rb +44 -0
- data/thinking-sphinx.gemspec +42 -0
- metadata +656 -243
- data/VERSION.yml +0 -5
- data/features/alternate_primary_key.feature +0 -27
- data/features/attribute_transformation.feature +0 -22
- data/features/attribute_updates.feature +0 -33
- data/features/datetime_deltas.feature +0 -66
- data/features/delayed_delta_indexing.feature +0 -37
- data/features/deleting_instances.feature +0 -64
- data/features/direct_attributes.feature +0 -11
- data/features/excerpts.feature +0 -13
- data/features/extensible_delta_indexing.feature +0 -9
- data/features/facets.feature +0 -76
- data/features/facets_across_model.feature +0 -29
- data/features/handling_edits.feature +0 -92
- data/features/retry_stale_indexes.feature +0 -24
- data/features/searching_across_models.feature +0 -20
- 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 -35
- data/features/step_definitions/alpha_steps.rb +0 -3
- data/features/step_definitions/beta_steps.rb +0 -7
- data/features/step_definitions/common_steps.rb +0 -178
- data/features/step_definitions/datetime_delta_steps.rb +0 -15
- data/features/step_definitions/delayed_delta_indexing_steps.rb +0 -7
- data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
- data/features/step_definitions/facet_steps.rb +0 -92
- 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 -11
- data/features/step_definitions/search_steps.rb +0 -89
- data/features/step_definitions/sphinx_steps.rb +0 -31
- data/features/sti_searching.feature +0 -14
- data/features/support/database.example.yml +0 -3
- data/features/support/database.yml +0 -5
- data/features/support/db/active_record.rb +0 -40
- data/features/support/db/database.yml +0 -5
- data/features/support/db/fixtures/alphas.rb +0 -10
- data/features/support/db/fixtures/authors.rb +0 -1
- data/features/support/db/fixtures/betas.rb +0 -10
- data/features/support/db/fixtures/boxes.rb +0 -9
- data/features/support/db/fixtures/categories.rb +0 -1
- data/features/support/db/fixtures/cats.rb +0 -3
- data/features/support/db/fixtures/comments.rb +0 -24
- data/features/support/db/fixtures/delayed_betas.rb +0 -10
- data/features/support/db/fixtures/developers.rb +0 -29
- data/features/support/db/fixtures/dogs.rb +0 -3
- data/features/support/db/fixtures/extensible_betas.rb +0 -10
- data/features/support/db/fixtures/gammas.rb +0 -10
- data/features/support/db/fixtures/people.rb +0 -1001
- data/features/support/db/fixtures/posts.rb +0 -6
- data/features/support/db/fixtures/robots.rb +0 -14
- data/features/support/db/fixtures/tags.rb +0 -27
- data/features/support/db/fixtures/thetas.rb +0 -10
- data/features/support/db/migrations/create_alphas.rb +0 -7
- data/features/support/db/migrations/create_animals.rb +0 -5
- data/features/support/db/migrations/create_authors.rb +0 -3
- data/features/support/db/migrations/create_authors_posts.rb +0 -6
- data/features/support/db/migrations/create_betas.rb +0 -5
- data/features/support/db/migrations/create_boxes.rb +0 -5
- data/features/support/db/migrations/create_categories.rb +0 -3
- data/features/support/db/migrations/create_comments.rb +0 -10
- data/features/support/db/migrations/create_delayed_betas.rb +0 -17
- data/features/support/db/migrations/create_developers.rb +0 -9
- data/features/support/db/migrations/create_extensible_betas.rb +0 -5
- data/features/support/db/migrations/create_gammas.rb +0 -3
- data/features/support/db/migrations/create_people.rb +0 -13
- data/features/support/db/migrations/create_posts.rb +0 -5
- data/features/support/db/migrations/create_robots.rb +0 -4
- data/features/support/db/migrations/create_taggings.rb +0 -5
- data/features/support/db/migrations/create_tags.rb +0 -4
- data/features/support/db/migrations/create_thetas.rb +0 -5
- data/features/support/db/mysql.rb +0 -3
- data/features/support/db/postgresql.rb +0 -3
- data/features/support/env.rb +0 -18
- data/features/support/lib/generic_delta_handler.rb +0 -8
- data/features/support/models/alpha.rb +0 -10
- data/features/support/models/animal.rb +0 -5
- data/features/support/models/author.rb +0 -3
- data/features/support/models/beta.rb +0 -8
- data/features/support/models/box.rb +0 -8
- data/features/support/models/cat.rb +0 -3
- data/features/support/models/category.rb +0 -4
- data/features/support/models/comment.rb +0 -10
- data/features/support/models/delayed_beta.rb +0 -7
- data/features/support/models/developer.rb +0 -16
- data/features/support/models/dog.rb +0 -3
- data/features/support/models/extensible_beta.rb +0 -9
- data/features/support/models/gamma.rb +0 -5
- data/features/support/models/person.rb +0 -23
- data/features/support/models/post.rb +0 -20
- data/features/support/models/robot.rb +0 -12
- data/features/support/models/tag.rb +0 -3
- data/features/support/models/theta.rb +0 -7
- data/features/support/post_database.rb +0 -43
- data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -125
- data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -20
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -48
- data/lib/thinking_sphinx/active_record/delta.rb +0 -87
- data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -28
- data/lib/thinking_sphinx/active_record/scopes.rb +0 -39
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -42
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -54
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -143
- data/lib/thinking_sphinx/association.rb +0 -164
- data/lib/thinking_sphinx/attribute.rb +0 -341
- data/lib/thinking_sphinx/class_facet.rb +0 -15
- data/lib/thinking_sphinx/core/array.rb +0 -7
- data/lib/thinking_sphinx/core/string.rb +0 -15
- data/lib/thinking_sphinx/deltas/datetime_delta.rb +0 -50
- data/lib/thinking_sphinx/deltas/delayed_delta/delta_job.rb +0 -24
- data/lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb +0 -27
- data/lib/thinking_sphinx/deltas/delayed_delta/job.rb +0 -26
- data/lib/thinking_sphinx/deltas/delayed_delta.rb +0 -30
- data/lib/thinking_sphinx/deploy/capistrano.rb +0 -100
- data/lib/thinking_sphinx/field.rb +0 -82
- data/lib/thinking_sphinx/index/builder.rb +0 -286
- data/lib/thinking_sphinx/index/faux_column.rb +0 -110
- data/lib/thinking_sphinx/property.rb +0 -162
- data/lib/thinking_sphinx/rails_additions.rb +0 -150
- data/lib/thinking_sphinx/search_methods.rb +0 -421
- data/lib/thinking_sphinx/source/internal_properties.rb +0 -46
- data/lib/thinking_sphinx/source/sql.rb +0 -128
- data/lib/thinking_sphinx/source.rb +0 -150
- data/rails/init.rb +0 -14
- data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +0 -130
- data/spec/lib/thinking_sphinx/active_record/has_many_association_spec.rb +0 -49
- data/spec/lib/thinking_sphinx/active_record/scopes_spec.rb +0 -96
- data/spec/lib/thinking_sphinx/active_record_spec.rb +0 -353
- data/spec/lib/thinking_sphinx/association_spec.rb +0 -239
- data/spec/lib/thinking_sphinx/attribute_spec.rb +0 -507
- data/spec/lib/thinking_sphinx/configuration_spec.rb +0 -268
- data/spec/lib/thinking_sphinx/core/array_spec.rb +0 -9
- data/spec/lib/thinking_sphinx/core/string_spec.rb +0 -9
- data/spec/lib/thinking_sphinx/deltas/job_spec.rb +0 -32
- data/spec/lib/thinking_sphinx/excerpter_spec.rb +0 -57
- data/spec/lib/thinking_sphinx/facet_search_spec.rb +0 -176
- data/spec/lib/thinking_sphinx/facet_spec.rb +0 -333
- data/spec/lib/thinking_sphinx/field_spec.rb +0 -154
- data/spec/lib/thinking_sphinx/index/builder_spec.rb +0 -455
- data/spec/lib/thinking_sphinx/index/faux_column_spec.rb +0 -30
- data/spec/lib/thinking_sphinx/index_spec.rb +0 -45
- data/spec/lib/thinking_sphinx/rails_additions_spec.rb +0 -203
- data/spec/lib/thinking_sphinx/search_methods_spec.rb +0 -152
- data/spec/lib/thinking_sphinx/search_spec.rb +0 -1101
- data/spec/lib/thinking_sphinx/source_spec.rb +0 -227
- data/spec/lib/thinking_sphinx_spec.rb +0 -162
- data/tasks/distribution.rb +0 -53
- data/tasks/rails.rake +0 -1
- data/tasks/testing.rb +0 -72
- data/vendor/after_commit/LICENSE +0 -20
- data/vendor/after_commit/README +0 -16
- data/vendor/after_commit/Rakefile +0 -22
- data/vendor/after_commit/init.rb +0 -8
- data/vendor/after_commit/lib/after_commit/active_record.rb +0 -114
- data/vendor/after_commit/lib/after_commit/connection_adapters.rb +0 -103
- data/vendor/after_commit/lib/after_commit.rb +0 -45
- data/vendor/after_commit/test/after_commit_test.rb +0 -53
- data/vendor/delayed_job/lib/delayed/job.rb +0 -251
- data/vendor/delayed_job/lib/delayed/message_sending.rb +0 -7
- data/vendor/delayed_job/lib/delayed/performable_method.rb +0 -55
- data/vendor/delayed_job/lib/delayed/worker.rb +0 -54
- data/vendor/riddle/lib/riddle/client/filter.rb +0 -53
- data/vendor/riddle/lib/riddle/client/message.rb +0 -66
- data/vendor/riddle/lib/riddle/client/response.rb +0 -84
- data/vendor/riddle/lib/riddle/client.rb +0 -635
- data/vendor/riddle/lib/riddle/configuration/distributed_index.rb +0 -48
- data/vendor/riddle/lib/riddle/configuration/index.rb +0 -142
- data/vendor/riddle/lib/riddle/configuration/indexer.rb +0 -19
- data/vendor/riddle/lib/riddle/configuration/remote_index.rb +0 -17
- data/vendor/riddle/lib/riddle/configuration/searchd.rb +0 -25
- data/vendor/riddle/lib/riddle/configuration/section.rb +0 -43
- data/vendor/riddle/lib/riddle/configuration/source.rb +0 -23
- data/vendor/riddle/lib/riddle/configuration/sql_source.rb +0 -34
- data/vendor/riddle/lib/riddle/configuration/xml_source.rb +0 -28
- data/vendor/riddle/lib/riddle/configuration.rb +0 -33
- data/vendor/riddle/lib/riddle/controller.rb +0 -53
- data/vendor/riddle/lib/riddle.rb +0 -30
|
@@ -1,175 +0,0 @@
|
|
|
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 978307200 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: Searching with ordering on a sortable field
|
|
101
|
-
Given Sphinx is running
|
|
102
|
-
And I am searching on people
|
|
103
|
-
And I order by first_name
|
|
104
|
-
Then I should get 20 results
|
|
105
|
-
And the first_name of each result should indicate order
|
|
106
|
-
|
|
107
|
-
Scenario: Intepreting Sphinx Internal Identifiers
|
|
108
|
-
Given Sphinx is running
|
|
109
|
-
And I am searching on people
|
|
110
|
-
Then I should get 20 results
|
|
111
|
-
And each result id should match the corresponding sphinx internal id
|
|
112
|
-
|
|
113
|
-
Scenario: Retrieving weightings
|
|
114
|
-
Given Sphinx is running
|
|
115
|
-
And I am searching on people
|
|
116
|
-
When I search for "Ellie Ford"
|
|
117
|
-
And I set match mode to any
|
|
118
|
-
Then I can iterate by result and weighting
|
|
119
|
-
|
|
120
|
-
Scenario: Retrieving group counts
|
|
121
|
-
Given Sphinx is running
|
|
122
|
-
And I am searching on people
|
|
123
|
-
When I group results by the birthday attribute
|
|
124
|
-
Then I can iterate by result and count
|
|
125
|
-
|
|
126
|
-
Scenario: Retrieving group values
|
|
127
|
-
Given Sphinx is running
|
|
128
|
-
And I am searching on people
|
|
129
|
-
When I group results by the birthday attribute
|
|
130
|
-
Then I can iterate by result and group
|
|
131
|
-
|
|
132
|
-
Scenario: Retrieving both group values and counts
|
|
133
|
-
Given Sphinx is running
|
|
134
|
-
And I am searching on people
|
|
135
|
-
When I group results by the birthday attribute
|
|
136
|
-
Then I can iterate by result and group and count
|
|
137
|
-
|
|
138
|
-
Scenario: Searching for ids
|
|
139
|
-
Given Sphinx is running
|
|
140
|
-
And I am searching on people
|
|
141
|
-
When I search for Ellie
|
|
142
|
-
And I am searching for ids
|
|
143
|
-
Then I should have an array of integers
|
|
144
|
-
|
|
145
|
-
Scenario: Search results should match Sphinx's order
|
|
146
|
-
Given Sphinx is running
|
|
147
|
-
And I am searching on people
|
|
148
|
-
When I search for Ellie
|
|
149
|
-
And I order by "sphinx_internal_id DESC"
|
|
150
|
-
Then searching for ids should match the record ids of the normal search results
|
|
151
|
-
|
|
152
|
-
Scenario: Retrieving total result count when total is less than a page
|
|
153
|
-
Given Sphinx is running
|
|
154
|
-
And I am searching on people
|
|
155
|
-
When I search for James
|
|
156
|
-
And I am retrieving the result count
|
|
157
|
-
Then I should get a value of 3
|
|
158
|
-
|
|
159
|
-
Scenario: Retrieving total result count for more than a page
|
|
160
|
-
Given Sphinx is running
|
|
161
|
-
And I am searching on people
|
|
162
|
-
When I am retrieving the result count
|
|
163
|
-
Then I should get a value of 1000
|
|
164
|
-
|
|
165
|
-
Scenario: Searching with Unicode Characters
|
|
166
|
-
Given Sphinx is running
|
|
167
|
-
And I am searching on people
|
|
168
|
-
When I search for "José* "
|
|
169
|
-
Then I should get 1 result
|
|
170
|
-
|
|
171
|
-
Scenario: Searching by fields from HABTM joins
|
|
172
|
-
Given Sphinx is running
|
|
173
|
-
And I am searching on posts
|
|
174
|
-
When I search for "Shakespeare"
|
|
175
|
-
Then I should get 1 result
|
|
@@ -1,56 +0,0 @@
|
|
|
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
|
|
@@ -1,25 +0,0 @@
|
|
|
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
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
Feature: Sphinx Scopes
|
|
2
|
-
|
|
3
|
-
Scenario: Single Scope
|
|
4
|
-
Given Sphinx is running
|
|
5
|
-
And I am searching on people
|
|
6
|
-
When I use the with_first_name scope set to "Andrew"
|
|
7
|
-
Then I should get 7 results
|
|
8
|
-
|
|
9
|
-
Scenario: Two Field Scopes
|
|
10
|
-
Given Sphinx is running
|
|
11
|
-
And I am searching on people
|
|
12
|
-
When I use the with_first_name scope set to "Andrew"
|
|
13
|
-
And I use the with_last_name scope set to "Byrne"
|
|
14
|
-
Then I should get 1 result
|
|
15
|
-
|
|
16
|
-
Scenario: Mixing Filter and Field Scopes
|
|
17
|
-
Given Sphinx is running
|
|
18
|
-
And I am searching on people
|
|
19
|
-
When I use the with_first_name scope set to "Andrew"
|
|
20
|
-
And I use the with_id scope set to 99
|
|
21
|
-
Then I should get 1 result
|
|
22
|
-
|
|
23
|
-
Scenario: Mixing Field and ID Scopes
|
|
24
|
-
Given Sphinx is running
|
|
25
|
-
And I am searching on people
|
|
26
|
-
When I use the with_first_name scope set to "Andrew"
|
|
27
|
-
And I use the ids_only scope
|
|
28
|
-
Then I should get 7 results
|
|
29
|
-
And I should have an array of integers
|
|
30
|
-
|
|
31
|
-
Scenario: Non-field/filter Scopes
|
|
32
|
-
Given Sphinx is running
|
|
33
|
-
And I am searching on people
|
|
34
|
-
When I use the ids_only scope
|
|
35
|
-
Then I should have an array of integers
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
Before do
|
|
2
|
-
$queries_executed = []
|
|
3
|
-
ThinkingSphinx::Deltas::Job.cancel_thinking_sphinx_jobs
|
|
4
|
-
|
|
5
|
-
@model = nil
|
|
6
|
-
@method = :search
|
|
7
|
-
@query = ""
|
|
8
|
-
@conditions = {}
|
|
9
|
-
@with = {}
|
|
10
|
-
@without = {}
|
|
11
|
-
@with_all = {}
|
|
12
|
-
@options = {}
|
|
13
|
-
@results = nil
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
Given /^I am searching on (.+)$/ do |model|
|
|
17
|
-
@model = model.gsub(/\s/, '_').singularize.camelize.constantize
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
Given /^updates are (\w+)$/ do |action|
|
|
21
|
-
ThinkingSphinx.updates_enabled = (action == "enabled")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
When /^I am searching for ids$/ do
|
|
25
|
-
@results = nil
|
|
26
|
-
@method = :search_for_ids
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
When /^I am retrieving the result count$/ do
|
|
30
|
-
@result = nil
|
|
31
|
-
@method = @model ? :search_count : :count
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
When /^I search$/ do
|
|
35
|
-
@results = nil
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
When /^I search for (\w+)$/ do |query|
|
|
39
|
-
@results = nil
|
|
40
|
-
@query = query
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
When /^I search for "([^\"]*)"$/ do |query|
|
|
44
|
-
@results = nil
|
|
45
|
-
@query = query
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
When /^I search for (\w+) on (\w+)$/ do |query, field|
|
|
49
|
-
@results = nil
|
|
50
|
-
@conditions[field.to_sym] = query
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
When /^I clear existing filters$/ do
|
|
54
|
-
@with = {}
|
|
55
|
-
@without = {}
|
|
56
|
-
@with_all = {}
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
When /^I filter by (\w+) on (\w+)$/ do |filter, attribute|
|
|
60
|
-
@results = nil
|
|
61
|
-
@with[attribute.to_sym] = filter.to_i
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
When /^I filter by (\d+) and (\d+) on (\w+)$/ do |value_one, value_two, attribute|
|
|
65
|
-
@results = nil
|
|
66
|
-
@with[attribute.to_sym] = [value_one.to_i, value_two.to_i]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
When /^I filter by both (\d+) and (\d+) on (\w+)$/ do |value_one, value_two, attribute|
|
|
70
|
-
@results = nil
|
|
71
|
-
@with_all[attribute.to_sym] = [value_one.to_i, value_two.to_i]
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
When /^I filter between ([\d\.]+) and ([\d\.]+) on (\w+)$/ do |first, last, attribute|
|
|
75
|
-
@results = nil
|
|
76
|
-
if first[/\./].nil? && last[/\./].nil?
|
|
77
|
-
@with[attribute.to_sym] = first.to_i..last.to_i
|
|
78
|
-
else
|
|
79
|
-
@with[attribute.to_sym] = first.to_f..last.to_f
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
When /^I filter between (\d+) and (\d+) days ago on (\w+)$/ do |last, first, attribute|
|
|
84
|
-
@results = nil
|
|
85
|
-
@with[attribute.to_sym] = first.to_i.days.ago..last.to_i.days.ago
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
When /^I filter by (\w+) between (\d+) and (\d+)$/ do |attribute, first, last|
|
|
89
|
-
@results = nil
|
|
90
|
-
@with[attribute.to_sym] = Time.utc(first.to_i)..Time.utc(last.to_i)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
When /^I order by (\w+)$/ do |attribute|
|
|
94
|
-
@results = nil
|
|
95
|
-
@options[:order] = attribute.to_sym
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
When /^I order by "([^\"]+)"$/ do |str|
|
|
99
|
-
@results = nil
|
|
100
|
-
@options[:order] = str
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
When /^I group results by the (\w+) attribute$/ do |attribute|
|
|
104
|
-
@results = nil
|
|
105
|
-
@options[:group_function] = :attr
|
|
106
|
-
@options[:group_by] = attribute
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
When /^I set match mode to (\w+)$/ do |match_mode|
|
|
110
|
-
@results = nil
|
|
111
|
-
@options[:match_mode] = match_mode.to_sym
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
When /^I set per page to (\d+)$/ do |per_page|
|
|
115
|
-
@results = nil
|
|
116
|
-
@options[:per_page] = per_page.to_i
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
When /^I set retry stale to (\w+)$/ do |retry_stale|
|
|
120
|
-
@results = nil
|
|
121
|
-
@options[:retry_stale] = case retry_stale
|
|
122
|
-
when "true" then true
|
|
123
|
-
when "false" then false
|
|
124
|
-
else retry_stale.to_i
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
When /^I destroy (\w+) (\w+)$/ do |model, name|
|
|
129
|
-
model.gsub(/\s/, '_').camelize.
|
|
130
|
-
constantize.find_by_name(name).destroy
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
Then /^the (\w+) of each result should indicate order$/ do |attribute|
|
|
134
|
-
results.inject(nil) do |prev, current|
|
|
135
|
-
unless prev.nil?
|
|
136
|
-
current.send(attribute.to_sym).should >= prev.send(attribute.to_sym)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
current
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
Then /^I can iterate by result and (\w+)$/ do |attribute|
|
|
144
|
-
iteration = lambda { |result, attr_value|
|
|
145
|
-
result.should be_kind_of(@model)
|
|
146
|
-
unless attribute == "group" && attr_value.nil?
|
|
147
|
-
attr_value.should be_kind_of(Integer)
|
|
148
|
-
end
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
results.send("each_with_#{attribute}", &iteration)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
Then /^I should get (\d+) results?$/ do |count|
|
|
155
|
-
results.length.should == count.to_i
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
Then /^I should not get (\d+) results?$/ do |count|
|
|
159
|
-
results.length.should_not == count.to_i
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
Then /^I should get as many results as there are (.+)$/ do |model|
|
|
163
|
-
results.length.should == model.gsub(/\s/, '_').singularize.camelize.
|
|
164
|
-
constantize.count
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def results
|
|
168
|
-
@results ||= (@model || ThinkingSphinx).send(
|
|
169
|
-
@method,
|
|
170
|
-
@query,
|
|
171
|
-
@options.merge(
|
|
172
|
-
:conditions => @conditions,
|
|
173
|
-
:with => @with,
|
|
174
|
-
:without => @without,
|
|
175
|
-
:with_all => @with_all
|
|
176
|
-
)
|
|
177
|
-
)
|
|
178
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
When /^I index the theta datetime delta$/ do
|
|
2
|
-
Theta.sphinx_indexes.first.delta_object.delayed_index(Theta)
|
|
3
|
-
end
|
|
4
|
-
|
|
5
|
-
When /^I change the name of theta (\w+) to (\w+)$/ do |current, replacement|
|
|
6
|
-
Theta.find_by_name(current).update_attributes(:name => replacement)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
When /^I create a new theta named (\w+)$/ do |name|
|
|
10
|
-
Theta.create(:name => name)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
When /^I delete the theta named (\w+)$/ do |name|
|
|
14
|
-
Theta.find_by_name(name).destroy
|
|
15
|
-
end
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
When /I change the name of extensible beta (\w+) to (\w+)$/ do |current, replacement|
|
|
2
|
-
ExtensibleBeta.find_by_name(current).update_attributes(:name => replacement)
|
|
3
|
-
end
|
|
4
|
-
|
|
5
|
-
Then /^the generic delta handler should handle the delta indexing$/ do
|
|
6
|
-
ExtensibleBeta.find(:first, :conditions => {:changed_by_generic => true}).should_not be_nil
|
|
7
|
-
end
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
When /^I am requesting facet results$/ do
|
|
2
|
-
@results = nil
|
|
3
|
-
@method = :facets
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
When /^I am requesting just the facet (\w+)$/ do |facet|
|
|
7
|
-
@results = nil
|
|
8
|
-
@options[:facets] = facet.downcase.to_sym
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
When /^I am requesting just the facets (\w+) and (\w+)$/ do |one, two|
|
|
12
|
-
@results = nil
|
|
13
|
-
@options[:facets] = [one.downcase.to_sym, two.downcase.to_sym]
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
When "I want classes included" do
|
|
17
|
-
@options[:class_facet] = true
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
When "I don't want classes included" do
|
|
21
|
-
@options[:class_facet] = false
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
When "I want all possible attributes" do
|
|
25
|
-
@options[:all_facets] = true
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
When /^I drill down where (\w+) is (\w+)$/ do |facet, value|
|
|
29
|
-
@results = results.for(facet.downcase.to_sym => value)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
When /^I drill down where (\w+) is (\w+) and (\w+) is (\w+)$/ do |facet_one, value_one, facet_two, value_two|
|
|
33
|
-
value_one = value_one.to_i unless value_one[/^\d+$/].nil?
|
|
34
|
-
value_two = value_two.to_i unless value_two[/^\d+$/].nil?
|
|
35
|
-
|
|
36
|
-
@results = results.for(
|
|
37
|
-
facet_one.downcase.to_sym => value_one,
|
|
38
|
-
facet_two.downcase.to_sym => value_two
|
|
39
|
-
)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
When /^I drill down where ([\w_]+) includes the id of tag (\w+)$/ do |facet, text|
|
|
43
|
-
tag = Tag.find_by_text(text)
|
|
44
|
-
@results = results.for(facet.downcase.to_sym => tag.id)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
When /^I drill down where ([\w_]+) includes the id of tags (\w+) or (\w+)$/ do |facet, text_one, text_two|
|
|
48
|
-
tag_one = Tag.find_by_text(text_one)
|
|
49
|
-
tag_two = Tag.find_by_text(text_two)
|
|
50
|
-
@results = results.for(facet.downcase.to_sym => [tag_one.id, tag_two.id])
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
Then "I should have valid facet results" do
|
|
54
|
-
results.should be_kind_of(Hash)
|
|
55
|
-
results.values.each { |value| value.should be_kind_of(Hash) }
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
Then /^I should have (\d+) facets?$/ do |count|
|
|
59
|
-
results.keys.length.should == count.to_i
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
Then /^I should have the facet ([\w_\s]+)$/ do |name|
|
|
63
|
-
results[facet_name(name)].should be_kind_of(Hash)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
Then /^I should not have the facet ([\w_\s]+)$/ do |name|
|
|
67
|
-
results.keys.should_not include(facet_name(name))
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
Then /^the ([\w_\s]+) facet should have an? "([\w\s_]+)" key with (\d+) hits$/ do |name, key, hit_count|
|
|
71
|
-
facet_name = facet_name name
|
|
72
|
-
results[facet_name].keys.should include(key)
|
|
73
|
-
results[facet_name][key].should eql(hit_count.to_i)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
Then /^the ([\w_\s]+) facet should have an? "(\w+)" key$/ do |name, key|
|
|
77
|
-
results[facet_name(name)].keys.should include(key)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
Then /^the ([\w_\s]+) facet should have an? (\d+\.?\d*) key$/ do |name, key|
|
|
81
|
-
if key[/\./]
|
|
82
|
-
key = key.to_f
|
|
83
|
-
else
|
|
84
|
-
key = key.to_i
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
results[facet_name(name)].keys.should include(key)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def facet_name(string)
|
|
91
|
-
string.gsub(/\s/, '').underscore.to_sym
|
|
92
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
When "I include comments" do
|
|
2
|
-
@results = nil
|
|
3
|
-
@options[:include] = :comments
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
When /^I get the first comment$/ do
|
|
7
|
-
@comment = Comment.find(:first)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
When /^I track queries$/ do
|
|
11
|
-
$queries_executed = []
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
When /^I compare comments$/ do
|
|
15
|
-
results.first.comments.first.should == @comment
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
When /^I select only content$/ do
|
|
19
|
-
@results = nil
|
|
20
|
-
@options[:select] = "id, content"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
Then /^I should have (\d+) quer[yies]+$/ do |count|
|
|
24
|
-
$queries_executed.length.should == count.to_i
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
Then /^I should not get an error accessing the subject$/ do
|
|
28
|
-
lambda { results.first.subject }.should_not raise_error
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
Then /^I should get an error accessing the subject$/ do
|
|
32
|
-
error_class = NoMethodError
|
|
33
|
-
error_class = ActiveRecord::MissingAttributeError if ActiveRecord.constants.include?("MissingAttributeError")
|
|
34
|
-
|
|
35
|
-
lambda { results.first.subject }.should raise_error(error_class)
|
|
36
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
When /^I destroy gamma (\w+) without callbacks$/ do |name|
|
|
2
|
-
@results = nil
|
|
3
|
-
gamma = Gamma.find_by_name(name)
|
|
4
|
-
Gamma.delete(gamma.id) if gamma
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
Then "I should get a single result of nil" do
|
|
8
|
-
results.to_a.should == [nil]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
Then /^I should get a single gamma result with a name of (\w+)$/ do |name|
|
|
12
|
-
results.length.should == 1
|
|
13
|
-
results.first.should be_a(Gamma)
|
|
14
|
-
results.first.name.should == name
|
|
15
|
-
end
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
When /^I use the ([\w]+) scope$/ do |scope|
|
|
2
|
-
@results = results.send(scope.to_sym)
|
|
3
|
-
end
|
|
4
|
-
|
|
5
|
-
When /^I use the ([\w]+) scope set to "([^\"]*)"$/ do |scope, value|
|
|
6
|
-
@results = results.send(scope.to_sym, value)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
When /^I use the ([\w]+) scope set to (\d+)$/ do |scope, int|
|
|
10
|
-
@results = results.send(scope.to_sym, int.to_i)
|
|
11
|
-
end
|