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,103 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::AutoVersion do
|
|
4
|
-
describe '.detect' do
|
|
5
|
-
before :each do
|
|
6
|
-
@config = ThinkingSphinx::Configuration.instance
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should require 0.9.8 if that is the detected version" do
|
|
10
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
11
|
-
with('riddle/0.9.8')
|
|
12
|
-
|
|
13
|
-
@config.stub!(:version => '0.9.8')
|
|
14
|
-
ThinkingSphinx::AutoVersion.detect
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should require 0.9.9 if that is the detected version" do
|
|
18
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
19
|
-
with('riddle/0.9.9')
|
|
20
|
-
|
|
21
|
-
@config.stub!(:version => '0.9.9')
|
|
22
|
-
ThinkingSphinx::AutoVersion.detect
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should require 1.10-beta if that is the detected version" do
|
|
26
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
27
|
-
with('riddle/1.10')
|
|
28
|
-
|
|
29
|
-
@config.stub!(:version => '1.10-beta')
|
|
30
|
-
ThinkingSphinx::AutoVersion.detect
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should require 1.10-beta if using 1.10-beta compiled with id64 support" do
|
|
34
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
35
|
-
with('riddle/1.10')
|
|
36
|
-
|
|
37
|
-
@config.stub!(:version => '1.10-id64-beta')
|
|
38
|
-
ThinkingSphinx::AutoVersion.detect
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should require 2.0.1 if using Sphinx 2.0.1 beta" do
|
|
42
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
43
|
-
with('riddle/2.0.1')
|
|
44
|
-
|
|
45
|
-
@config.stub!(:version => '2.0.1-beta')
|
|
46
|
-
ThinkingSphinx::AutoVersion.detect
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should require 2.0.1 if using Sphinx 2.0.2 dev" do
|
|
50
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
51
|
-
with('riddle/2.0.1')
|
|
52
|
-
|
|
53
|
-
@config.stub!(:version => '2.0.2-dev')
|
|
54
|
-
ThinkingSphinx::AutoVersion.detect
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should require 2.1.0 if using Sphinx 2.0.3" do
|
|
58
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
59
|
-
with('riddle/2.1.0')
|
|
60
|
-
|
|
61
|
-
@config.stub!(:version => '2.0.3-release')
|
|
62
|
-
ThinkingSphinx::AutoVersion.detect
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should require 2.1.0 if using Sphinx 2.0.3" do
|
|
66
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
67
|
-
with('riddle/2.1.0')
|
|
68
|
-
|
|
69
|
-
@config.stub!(:version => '2.0.4-release')
|
|
70
|
-
ThinkingSphinx::AutoVersion.detect
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should require 2.1.0 if using Sphinx 2.0.3" do
|
|
74
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
75
|
-
with('riddle/2.1.0')
|
|
76
|
-
|
|
77
|
-
@config.stub!(:version => '2.0.5-release')
|
|
78
|
-
ThinkingSphinx::AutoVersion.detect
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should require 2.1.0 if using Sphinx 2.1.0 dev" do
|
|
82
|
-
ThinkingSphinx::AutoVersion.should_receive(:require).
|
|
83
|
-
with('riddle/2.1.0')
|
|
84
|
-
|
|
85
|
-
@config.stub!(:version => '2.1.0-dev')
|
|
86
|
-
ThinkingSphinx::AutoVersion.detect
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should output a warning if the detected version is unsupported" do
|
|
90
|
-
STDERR.should_receive(:puts).with(/unsupported/i)
|
|
91
|
-
|
|
92
|
-
@config.stub!(:version => '0.9.7')
|
|
93
|
-
ThinkingSphinx::AutoVersion.detect
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "should output a warning if the version cannot be determined" do
|
|
97
|
-
STDERR.should_receive(:puts).at_least(:once)
|
|
98
|
-
|
|
99
|
-
@config.stub!(:version => nil)
|
|
100
|
-
ThinkingSphinx::AutoVersion.detect
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::Connection do
|
|
4
|
-
describe '#client' do
|
|
5
|
-
let(:connection) { ThinkingSphinx::Connection.new }
|
|
6
|
-
|
|
7
|
-
before :each do
|
|
8
|
-
@config = ThinkingSphinx::Configuration.instance
|
|
9
|
-
@config.address = 'domain.url'
|
|
10
|
-
@config.port = 3333
|
|
11
|
-
@config.configuration.searchd.max_matches = 100
|
|
12
|
-
@config.timeout = 1
|
|
13
|
-
|
|
14
|
-
pending
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should return an instance of Riddle::Client" do
|
|
18
|
-
connection.client.should be_a(Riddle::Client)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should use the configuration address" do
|
|
22
|
-
connection.client.server.should == 'domain.url'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should use the configuration port" do
|
|
26
|
-
connection.client.port.should == 3333
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should use the configuration max matches" do
|
|
30
|
-
connection.client.max_matches.should == 100
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should use the configuration timeout" do
|
|
34
|
-
connection.client.timeout.should == 1
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
describe 'when shuffle is enabled' do
|
|
38
|
-
let(:client) { double('client', :max_matches= => nil, :timeout= => nil,
|
|
39
|
-
:open => true) }
|
|
40
|
-
|
|
41
|
-
before :each do
|
|
42
|
-
@config.shuffle = true
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should shuffle client servers" do
|
|
46
|
-
@config.address = ['1.1.1.1', '2.2.2.2']
|
|
47
|
-
@config.address.stub!(:shuffle => ['2.2.2.2', '1.1.1.1'])
|
|
48
|
-
|
|
49
|
-
Riddle::Client.should_receive(:new) do |addresses, port, key|
|
|
50
|
-
addresses.should == ['2.2.2.2', '1.1.1.1']
|
|
51
|
-
client
|
|
52
|
-
end
|
|
53
|
-
connection.client
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
describe 'when shuffle is disabled' do
|
|
58
|
-
let(:client) { double('client', :max_matches= => nil, :timeout= => nil,
|
|
59
|
-
:open => true) }
|
|
60
|
-
|
|
61
|
-
before :each do
|
|
62
|
-
@config.shuffle = false
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should not shuffle client servers" do
|
|
66
|
-
@config.address = ['1.1.1.1', '2.2.2.2.', '3.3.3.3', '4.4.4.4', '5.5.5.5']
|
|
67
|
-
|
|
68
|
-
@config.address.should_not_receive(:shuffle)
|
|
69
|
-
Riddle::Client.should_receive(:new) do |addresses, port, key|
|
|
70
|
-
addresses.should == ['1.1.1.1', '2.2.2.2.', '3.3.3.3', '4.4.4.4', '5.5.5.5']
|
|
71
|
-
client
|
|
72
|
-
end
|
|
73
|
-
connection.client
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::Context do
|
|
4
|
-
let(:ts_context) { ThinkingSphinx::Context.new }
|
|
5
|
-
|
|
6
|
-
describe '#prepare' do
|
|
7
|
-
let(:config) { ThinkingSphinx::Configuration.instance }
|
|
8
|
-
let(:file_name) { 'a.rb' }
|
|
9
|
-
let(:model_name_lower) { 'a' }
|
|
10
|
-
let(:class_name) { 'A' }
|
|
11
|
-
|
|
12
|
-
before :each do
|
|
13
|
-
config.model_directories = ['']
|
|
14
|
-
|
|
15
|
-
file_name.stub!(:gsub).and_return(model_name_lower)
|
|
16
|
-
model_name_lower.stub!(:camelize).and_return(class_name)
|
|
17
|
-
Dir.stub(:[]).and_return([file_name])
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should load the files by guessing the file name" do
|
|
21
|
-
class_name.should_receive(:constantize).and_return(true)
|
|
22
|
-
|
|
23
|
-
ts_context.prepare
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should not raise errors if the model name is nil" do
|
|
27
|
-
file_name.stub!(:gsub).and_return(nil)
|
|
28
|
-
|
|
29
|
-
lambda {
|
|
30
|
-
ts_context.prepare
|
|
31
|
-
}.should_not raise_error
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should report name errors but not raise them" do
|
|
35
|
-
class_name.stub(:constantize).and_raise(NameError)
|
|
36
|
-
STDERR.stub!(:puts => '')
|
|
37
|
-
STDERR.should_receive(:puts).with('ThinkingSphinx: error loading a.rb')
|
|
38
|
-
|
|
39
|
-
lambda {
|
|
40
|
-
ts_context.prepare
|
|
41
|
-
}.should_not raise_error
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should report load errors but not raise them" do
|
|
45
|
-
class_name.stub(:constantize).and_raise(LoadError)
|
|
46
|
-
STDERR.stub!(:puts => '')
|
|
47
|
-
STDERR.should_receive(:puts).with('ThinkingSphinx: error loading a.rb')
|
|
48
|
-
|
|
49
|
-
lambda {
|
|
50
|
-
ts_context.prepare
|
|
51
|
-
}.should_not raise_error
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should catch database errors with a warning" do
|
|
55
|
-
class_name.should_receive(:constantize).and_raise(Mysql2::Error)
|
|
56
|
-
STDERR.stub!(:puts => '')
|
|
57
|
-
STDERR.should_receive(:puts).with('Warning: Error loading a.rb:')
|
|
58
|
-
|
|
59
|
-
lambda {
|
|
60
|
-
ts_context.prepare
|
|
61
|
-
}.should_not raise_error
|
|
62
|
-
end unless RUBY_PLATFORM == 'java'
|
|
63
|
-
|
|
64
|
-
it "should not load models if they're explicitly set in the configuration" do
|
|
65
|
-
config.indexed_models = ['Alpha', 'Beta']
|
|
66
|
-
ts_context.prepare
|
|
67
|
-
|
|
68
|
-
ts_context.indexed_models.should == ['Alpha', 'Beta']
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe '#define_indexes' do
|
|
73
|
-
it "should call define_indexes on all known indexed models" do
|
|
74
|
-
ts_context.stub!(:indexed_models => ['Alpha', 'Beta'])
|
|
75
|
-
Alpha.should_receive(:define_indexes)
|
|
76
|
-
Beta.should_receive(:define_indexes)
|
|
77
|
-
|
|
78
|
-
ts_context.define_indexes
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
describe '#add_indexed_model' do
|
|
83
|
-
before :each do
|
|
84
|
-
ts_context.indexed_models.clear
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should add the model to the collection" do
|
|
88
|
-
ts_context.add_indexed_model 'Alpha'
|
|
89
|
-
|
|
90
|
-
ts_context.indexed_models.should == ['Alpha']
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should not duplicate models in the collection" do
|
|
94
|
-
ts_context.add_indexed_model 'Alpha'
|
|
95
|
-
ts_context.add_indexed_model 'Alpha'
|
|
96
|
-
|
|
97
|
-
ts_context.indexed_models.should == ['Alpha']
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should keep the collection in alphabetical order" do
|
|
101
|
-
ts_context.add_indexed_model 'Beta'
|
|
102
|
-
ts_context.add_indexed_model 'Alpha'
|
|
103
|
-
|
|
104
|
-
ts_context.indexed_models.should == ['Alpha', 'Beta']
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should translate classes to their names" do
|
|
108
|
-
ts_context.add_indexed_model Alpha
|
|
109
|
-
|
|
110
|
-
ts_context.indexed_models.should == ['Alpha']
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
describe '#superclass_indexed_models' do
|
|
115
|
-
it "should return indexed model names" do
|
|
116
|
-
ts_context.stub!(:indexed_models => ['Alpha', 'Beta'])
|
|
117
|
-
|
|
118
|
-
ts_context.superclass_indexed_models.should == ['Alpha', 'Beta']
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should not include classes which have indexed superclasses" do
|
|
122
|
-
ts_context.stub!(:indexed_models => ['Parent', 'Person'])
|
|
123
|
-
|
|
124
|
-
ts_context.superclass_indexed_models.should == ['Person']
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe ThinkingSphinx::Facet do
|
|
4
|
-
describe ".name_for" do
|
|
5
|
-
it "should remove '_facet' from provided string and return a symbol" do
|
|
6
|
-
ThinkingSphinx::Facet.name_for('attribute_facet').should == :attribute
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should remove '_facet' from provided symbol" do
|
|
10
|
-
ThinkingSphinx::Facet.name_for(:attribute_facet).should == :attribute
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should return the name of the facet if a Facet is passed" do
|
|
14
|
-
facet = ThinkingSphinx::Facet.new(
|
|
15
|
-
stub('attribute', :unique_name => :attribute, :columns => ['attribute'])
|
|
16
|
-
)
|
|
17
|
-
ThinkingSphinx::Facet.name_for(facet).should == :attribute
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should return 'class' for special case name 'class_crc'" do
|
|
21
|
-
ThinkingSphinx::Facet.name_for(:class_crc).should == :class
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should cycle" do
|
|
25
|
-
ThinkingSphinx::Facet.name_for(ThinkingSphinx::Facet.attribute_name_for(:attribute)).should == :attribute
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
describe ".attribute_name_for" do
|
|
30
|
-
it "should append '_facet' to provided string" do
|
|
31
|
-
ThinkingSphinx::Facet.attribute_name_for('attribute').should == 'attribute_facet'
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should append '_facet' to provided symbol and return a string" do
|
|
35
|
-
ThinkingSphinx::Facet.attribute_name_for(:attribute).should == 'attribute_facet'
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should return 'class_crc' for special case attribute 'class'" do
|
|
39
|
-
ThinkingSphinx::Facet.attribute_name_for(:class).should == 'class_crc'
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should cycle" do
|
|
43
|
-
ThinkingSphinx::Facet.attribute_name_for(ThinkingSphinx::Facet.name_for('attribute_facet')).should == 'attribute_facet'
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe ".attribute_name_from_value" do
|
|
48
|
-
it "should append _facet if the value is a string" do
|
|
49
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', 'string').
|
|
50
|
-
should == 'attribute_facet'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should not append _facet if the value isn't a string" do
|
|
54
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', 1).
|
|
55
|
-
should == 'attribute'
|
|
56
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', Time.now).
|
|
57
|
-
should == 'attribute'
|
|
58
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', true).
|
|
59
|
-
should == 'attribute'
|
|
60
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', 1.23).
|
|
61
|
-
should == 'attribute'
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should append _facet is the value is an array of strings" do
|
|
65
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', ['a', 'b']).
|
|
66
|
-
should == 'attribute_facet'
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should not append _facet if the value is an array of integers" do
|
|
70
|
-
ThinkingSphinx::Facet.attribute_name_from_value('attribute', [1, 2]).
|
|
71
|
-
should == 'attribute'
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe ".translate?" do
|
|
76
|
-
before :each do
|
|
77
|
-
@index = ThinkingSphinx::Index.new(Alpha)
|
|
78
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
79
|
-
@attribute = ThinkingSphinx::Attribute.new(
|
|
80
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
81
|
-
)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should return true if the property is a field" do
|
|
85
|
-
field = ThinkingSphinx::Field.new(
|
|
86
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
ThinkingSphinx::Facet.translate?(field).should be_true
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should return true if the property is a string attribute" do
|
|
93
|
-
@attribute.stub!(:type => :string)
|
|
94
|
-
|
|
95
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_true
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should return false if the property is an integer attribute" do
|
|
99
|
-
@attribute.stub!(:type => :integer)
|
|
100
|
-
|
|
101
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_false
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "should return false if the property is a boolean attribute" do
|
|
105
|
-
@attribute.stub!(:type => :boolean)
|
|
106
|
-
|
|
107
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_false
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should return false if the property is a timestamp attribute" do
|
|
111
|
-
@attribute.stub!(:type => :datetime)
|
|
112
|
-
|
|
113
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_false
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "should return false if the property is a float attribute" do
|
|
117
|
-
@attribute.stub!(:type => :float)
|
|
118
|
-
|
|
119
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_false
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should return false if the property is an MVA of integer values" do
|
|
123
|
-
@attribute.stub!(:type => :multi, :all_ints? => true)
|
|
124
|
-
|
|
125
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_false
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it "should return true if the property is an MVA of string values" do
|
|
129
|
-
@attribute.stub!(:type => :multi, :all_ints? => false)
|
|
130
|
-
|
|
131
|
-
ThinkingSphinx::Facet.translate?(@attribute).should be_true
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
describe "#translate?" do
|
|
136
|
-
before :each do
|
|
137
|
-
@index = ThinkingSphinx::Index.new(Alpha)
|
|
138
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
139
|
-
@attribute = ThinkingSphinx::Attribute.new(
|
|
140
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
141
|
-
)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "should return true if the property is a field" do
|
|
145
|
-
field = ThinkingSphinx::Field.new(
|
|
146
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
ThinkingSphinx::Facet.new(field).translate?.should be_true
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
it "should return true if the property is a string attribute" do
|
|
153
|
-
@attribute.stub!(:type => :string)
|
|
154
|
-
|
|
155
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_true
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it "should return false if the property is an integer attribute" do
|
|
159
|
-
@attribute.stub!(:type => :integer)
|
|
160
|
-
|
|
161
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_false
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "should return false if the property is a boolean attribute" do
|
|
165
|
-
@attribute.stub!(:type => :boolean)
|
|
166
|
-
|
|
167
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_false
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "should return false if the property is a timestamp attribute" do
|
|
171
|
-
@attribute.stub!(:type => :datetime)
|
|
172
|
-
|
|
173
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_false
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "should return false if the property is a float attribute" do
|
|
177
|
-
@attribute.stub!(:type => :float)
|
|
178
|
-
|
|
179
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_false
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
it "should return false if the property is an MVA of integer values" do
|
|
183
|
-
@attribute.stub!(:type => :multi, :all_ints? => true)
|
|
184
|
-
|
|
185
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_false
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
it "should return true if the property is an MVA of string values" do
|
|
189
|
-
@attribute.stub!(:type => :multi, :all_ints? => false)
|
|
190
|
-
|
|
191
|
-
ThinkingSphinx::Facet.new(@attribute).translate?.should be_true
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
describe "#attribute_name" do
|
|
196
|
-
before :each do
|
|
197
|
-
@index = ThinkingSphinx::Index.new(Alpha)
|
|
198
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
199
|
-
@attribute = ThinkingSphinx::Attribute.new(
|
|
200
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
201
|
-
)
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
it "should return the attribute name if built off an integer attribute" do
|
|
205
|
-
@attribute.stub!(:type => :integer)
|
|
206
|
-
|
|
207
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name"
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
it "should return the attribute name if built off a boolean attribute" do
|
|
211
|
-
@attribute.stub!(:type => :boolean)
|
|
212
|
-
|
|
213
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name"
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
it "should return the attribute name if built off a float attribute" do
|
|
217
|
-
@attribute.stub!(:type => :float)
|
|
218
|
-
|
|
219
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name"
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
it "should return the attribute name if built off a timestamp attribute" do
|
|
223
|
-
@attribute.stub!(:type => :datetime)
|
|
224
|
-
|
|
225
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name"
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "should return the attribute name with _facet suffix if built off a string attribute" do
|
|
229
|
-
@attribute.stub!(:type => :string)
|
|
230
|
-
|
|
231
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name_facet"
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it "should return the attribute name with _facet suffix if built off a field" do
|
|
235
|
-
field = ThinkingSphinx::Field.new(
|
|
236
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
237
|
-
)
|
|
238
|
-
|
|
239
|
-
ThinkingSphinx::Facet.new(field).attribute_name.should == "name_facet"
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "should return the attribute name if build off an integer MVA" do
|
|
243
|
-
@attribute.stub!(:type => :multi, :all_ints? => true)
|
|
244
|
-
|
|
245
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name"
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it "should return the attribute name with the _facet suffix if build off an non-integer MVA" do
|
|
249
|
-
@attribute.stub!(:type => :multi, :all_ints? => false)
|
|
250
|
-
|
|
251
|
-
ThinkingSphinx::Facet.new(@attribute).attribute_name.should == "name_facet"
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
describe "#type" do
|
|
256
|
-
before :each do
|
|
257
|
-
@index = ThinkingSphinx::Index.new(Alpha)
|
|
258
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it "should return :string if the property is a field" do
|
|
262
|
-
field = ThinkingSphinx::Field.new(
|
|
263
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
264
|
-
)
|
|
265
|
-
|
|
266
|
-
ThinkingSphinx::Facet.new(field).type.should == :string
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
it "should return the attribute type if the property is an attribute" do
|
|
270
|
-
attribute = ThinkingSphinx::Attribute.new(
|
|
271
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:name)
|
|
272
|
-
)
|
|
273
|
-
attribute.stub!(:type => :anything)
|
|
274
|
-
|
|
275
|
-
ThinkingSphinx::Facet.new(attribute).type.should == :anything
|
|
276
|
-
end
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
describe "#value" do
|
|
280
|
-
describe 'for fields from associations' do
|
|
281
|
-
before :each do
|
|
282
|
-
@index = ThinkingSphinx::Index.new(Friendship)
|
|
283
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
284
|
-
@field = ThinkingSphinx::Field.new(
|
|
285
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:person, :first_name)
|
|
286
|
-
)
|
|
287
|
-
@facet = ThinkingSphinx::Facet.new(@field)
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
it "should return association values" do
|
|
291
|
-
person = Person.find(:first)
|
|
292
|
-
friendship = Friendship.new(:person => person)
|
|
293
|
-
|
|
294
|
-
@facet.value(friendship, {'first_name_facet' => 1}).should == person.first_name
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
it "should return nil if the association is nil" do
|
|
298
|
-
friendship = Friendship.new(:person => nil)
|
|
299
|
-
|
|
300
|
-
@facet.value(friendship, {'first_name_facet' => 1}).should be_nil
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
it "should return multi-level association values" do
|
|
304
|
-
person = Person.find(:first)
|
|
305
|
-
tag = person.tags.build(:name => 'buried')
|
|
306
|
-
friendship = Friendship.new(:person => person)
|
|
307
|
-
|
|
308
|
-
field = ThinkingSphinx::Field.new(
|
|
309
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:person, :tags, :name)
|
|
310
|
-
)
|
|
311
|
-
ThinkingSphinx::Facet.new(field).value(friendship, {'name_facet' => 'buried'.to_crc32}).
|
|
312
|
-
should == 'buried'
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "should not error with multi-level association values containing a nil value" do
|
|
316
|
-
person = Person.find(:first)
|
|
317
|
-
tag = person.tags.build(:name => nil)
|
|
318
|
-
tag = person.tags.build(:name => "buried")
|
|
319
|
-
friendship = Friendship.new(:person => person)
|
|
320
|
-
|
|
321
|
-
field = ThinkingSphinx::Field.new(
|
|
322
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:person, :tags, :name)
|
|
323
|
-
)
|
|
324
|
-
lambda{ThinkingSphinx::Facet.new(field).value(friendship, {'name_facet' => 'buried'.to_crc32})}.should_not raise_error
|
|
325
|
-
end
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
describe 'for float attributes' do
|
|
329
|
-
before :each do
|
|
330
|
-
@index = ThinkingSphinx::Index.new(Alpha)
|
|
331
|
-
@source = ThinkingSphinx::Source.new(@index)
|
|
332
|
-
@attribute = ThinkingSphinx::Attribute.new(
|
|
333
|
-
@source, ThinkingSphinx::Index::FauxColumn.new(:cost)
|
|
334
|
-
)
|
|
335
|
-
@facet = ThinkingSphinx::Facet.new(@attribute)
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
it "should translate using the given model" do
|
|
339
|
-
alpha = Alpha.new(:cost => 10.5)
|
|
340
|
-
|
|
341
|
-
@facet.value(alpha, {'cost' => 1093140480}).should == 10.5
|
|
342
|
-
end
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
context 'manual value source' do
|
|
346
|
-
let(:index) { ThinkingSphinx::Index.new(Alpha) }
|
|
347
|
-
let(:source) { ThinkingSphinx::Source.new(index) }
|
|
348
|
-
let(:column) { ThinkingSphinx::Index::FauxColumn.new('LOWER(name)') }
|
|
349
|
-
let(:field) { ThinkingSphinx::Field.new(source, column) }
|
|
350
|
-
let(:facet) { ThinkingSphinx::Facet.new(field, :name) }
|
|
351
|
-
|
|
352
|
-
it "should use the given value source to figure out the value" do
|
|
353
|
-
alpha = Alpha.new(:name => 'Foo')
|
|
354
|
-
|
|
355
|
-
facet.value(alpha, {'foo_facet' => 'foo'.to_crc32}).should == 'Foo'
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
end
|
|
359
|
-
end
|