warp-thinking-sphinx 1.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. data/LICENCE +20 -0
  2. data/README.textile +144 -0
  3. data/VERSION.yml +4 -0
  4. data/features/a.rb +17 -0
  5. data/features/alternate_primary_key.feature +27 -0
  6. data/features/attribute_transformation.feature +22 -0
  7. data/features/attribute_updates.feature +33 -0
  8. data/features/datetime_deltas.feature +66 -0
  9. data/features/delayed_delta_indexing.feature +37 -0
  10. data/features/deleting_instances.feature +64 -0
  11. data/features/direct_attributes.feature +11 -0
  12. data/features/excerpts.feature +13 -0
  13. data/features/extensible_delta_indexing.feature +9 -0
  14. data/features/facets.feature +76 -0
  15. data/features/facets_across_model.feature +29 -0
  16. data/features/handling_edits.feature +92 -0
  17. data/features/retry_stale_indexes.feature +24 -0
  18. data/features/searching_across_models.feature +20 -0
  19. data/features/searching_by_model.feature +175 -0
  20. data/features/searching_with_find_arguments.feature +56 -0
  21. data/features/sphinx_detection.feature +25 -0
  22. data/features/sphinx_scopes.feature +35 -0
  23. data/features/step_definitions/alpha_steps.rb +3 -0
  24. data/features/step_definitions/beta_steps.rb +7 -0
  25. data/features/step_definitions/common_steps.rb +178 -0
  26. data/features/step_definitions/datetime_delta_steps.rb +15 -0
  27. data/features/step_definitions/delayed_delta_indexing_steps.rb +7 -0
  28. data/features/step_definitions/extensible_delta_indexing_steps.rb +7 -0
  29. data/features/step_definitions/facet_steps.rb +92 -0
  30. data/features/step_definitions/find_arguments_steps.rb +36 -0
  31. data/features/step_definitions/gamma_steps.rb +15 -0
  32. data/features/step_definitions/scope_steps.rb +11 -0
  33. data/features/step_definitions/search_steps.rb +89 -0
  34. data/features/step_definitions/sphinx_steps.rb +31 -0
  35. data/features/sti_searching.feature +14 -0
  36. data/features/support/db/active_record.rb +40 -0
  37. data/features/support/db/database.example.yml +3 -0
  38. data/features/support/db/fixtures/alphas.rb +10 -0
  39. data/features/support/db/fixtures/authors.rb +1 -0
  40. data/features/support/db/fixtures/betas.rb +10 -0
  41. data/features/support/db/fixtures/boxes.rb +9 -0
  42. data/features/support/db/fixtures/categories.rb +1 -0
  43. data/features/support/db/fixtures/cats.rb +3 -0
  44. data/features/support/db/fixtures/comments.rb +24 -0
  45. data/features/support/db/fixtures/delayed_betas.rb +10 -0
  46. data/features/support/db/fixtures/developers.rb +29 -0
  47. data/features/support/db/fixtures/dogs.rb +3 -0
  48. data/features/support/db/fixtures/extensible_betas.rb +10 -0
  49. data/features/support/db/fixtures/gammas.rb +10 -0
  50. data/features/support/db/fixtures/people.rb +1001 -0
  51. data/features/support/db/fixtures/posts.rb +6 -0
  52. data/features/support/db/fixtures/robots.rb +14 -0
  53. data/features/support/db/fixtures/tags.rb +27 -0
  54. data/features/support/db/fixtures/thetas.rb +10 -0
  55. data/features/support/db/migrations/create_alphas.rb +7 -0
  56. data/features/support/db/migrations/create_animals.rb +5 -0
  57. data/features/support/db/migrations/create_authors.rb +3 -0
  58. data/features/support/db/migrations/create_authors_posts.rb +6 -0
  59. data/features/support/db/migrations/create_betas.rb +5 -0
  60. data/features/support/db/migrations/create_boxes.rb +5 -0
  61. data/features/support/db/migrations/create_categories.rb +3 -0
  62. data/features/support/db/migrations/create_comments.rb +10 -0
  63. data/features/support/db/migrations/create_delayed_betas.rb +17 -0
  64. data/features/support/db/migrations/create_developers.rb +9 -0
  65. data/features/support/db/migrations/create_extensible_betas.rb +5 -0
  66. data/features/support/db/migrations/create_gammas.rb +3 -0
  67. data/features/support/db/migrations/create_people.rb +13 -0
  68. data/features/support/db/migrations/create_posts.rb +5 -0
  69. data/features/support/db/migrations/create_robots.rb +5 -0
  70. data/features/support/db/migrations/create_taggings.rb +5 -0
  71. data/features/support/db/migrations/create_tags.rb +4 -0
  72. data/features/support/db/migrations/create_thetas.rb +5 -0
  73. data/features/support/db/mysql.rb +3 -0
  74. data/features/support/db/postgresql.rb +3 -0
  75. data/features/support/env.rb +6 -0
  76. data/features/support/lib/generic_delta_handler.rb +8 -0
  77. data/features/support/models/alpha.rb +10 -0
  78. data/features/support/models/animal.rb +5 -0
  79. data/features/support/models/author.rb +3 -0
  80. data/features/support/models/beta.rb +8 -0
  81. data/features/support/models/box.rb +8 -0
  82. data/features/support/models/cat.rb +3 -0
  83. data/features/support/models/category.rb +4 -0
  84. data/features/support/models/comment.rb +10 -0
  85. data/features/support/models/delayed_beta.rb +7 -0
  86. data/features/support/models/developer.rb +16 -0
  87. data/features/support/models/dog.rb +3 -0
  88. data/features/support/models/extensible_beta.rb +9 -0
  89. data/features/support/models/gamma.rb +5 -0
  90. data/features/support/models/person.rb +23 -0
  91. data/features/support/models/post.rb +20 -0
  92. data/features/support/models/robot.rb +8 -0
  93. data/features/support/models/tag.rb +3 -0
  94. data/features/support/models/tagging.rb +4 -0
  95. data/features/support/models/theta.rb +7 -0
  96. data/features/support/post_database.rb +43 -0
  97. data/features/support/z.rb +19 -0
  98. data/lib/thinking_sphinx.rb +212 -0
  99. data/lib/thinking_sphinx/active_record.rb +306 -0
  100. data/lib/thinking_sphinx/active_record/attribute_updates.rb +48 -0
  101. data/lib/thinking_sphinx/active_record/delta.rb +87 -0
  102. data/lib/thinking_sphinx/active_record/has_many_association.rb +28 -0
  103. data/lib/thinking_sphinx/active_record/scopes.rb +39 -0
  104. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +42 -0
  105. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +54 -0
  106. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +136 -0
  107. data/lib/thinking_sphinx/association.rb +243 -0
  108. data/lib/thinking_sphinx/attribute.rb +340 -0
  109. data/lib/thinking_sphinx/class_facet.rb +15 -0
  110. data/lib/thinking_sphinx/configuration.rb +282 -0
  111. data/lib/thinking_sphinx/core/array.rb +7 -0
  112. data/lib/thinking_sphinx/core/string.rb +15 -0
  113. data/lib/thinking_sphinx/deltas.rb +30 -0
  114. data/lib/thinking_sphinx/deltas/datetime_delta.rb +50 -0
  115. data/lib/thinking_sphinx/deltas/default_delta.rb +68 -0
  116. data/lib/thinking_sphinx/deltas/delayed_delta.rb +30 -0
  117. data/lib/thinking_sphinx/deltas/delayed_delta/delta_job.rb +24 -0
  118. data/lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb +27 -0
  119. data/lib/thinking_sphinx/deltas/delayed_delta/job.rb +26 -0
  120. data/lib/thinking_sphinx/deploy/capistrano.rb +100 -0
  121. data/lib/thinking_sphinx/excerpter.rb +22 -0
  122. data/lib/thinking_sphinx/facet.rb +125 -0
  123. data/lib/thinking_sphinx/facet_search.rb +134 -0
  124. data/lib/thinking_sphinx/field.rb +81 -0
  125. data/lib/thinking_sphinx/index.rb +99 -0
  126. data/lib/thinking_sphinx/index/builder.rb +286 -0
  127. data/lib/thinking_sphinx/index/faux_column.rb +110 -0
  128. data/lib/thinking_sphinx/property.rb +163 -0
  129. data/lib/thinking_sphinx/rails_additions.rb +150 -0
  130. data/lib/thinking_sphinx/search.rb +708 -0
  131. data/lib/thinking_sphinx/search_methods.rb +421 -0
  132. data/lib/thinking_sphinx/source.rb +152 -0
  133. data/lib/thinking_sphinx/source/internal_properties.rb +46 -0
  134. data/lib/thinking_sphinx/source/sql.rb +127 -0
  135. data/lib/thinking_sphinx/tasks.rb +165 -0
  136. data/rails/init.rb +14 -0
  137. data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +130 -0
  138. data/spec/lib/thinking_sphinx/active_record/has_many_association_spec.rb +49 -0
  139. data/spec/lib/thinking_sphinx/active_record/scopes_spec.rb +96 -0
  140. data/spec/lib/thinking_sphinx/active_record_spec.rb +353 -0
  141. data/spec/lib/thinking_sphinx/association_spec.rb +239 -0
  142. data/spec/lib/thinking_sphinx/attribute_spec.rb +507 -0
  143. data/spec/lib/thinking_sphinx/configuration_spec.rb +268 -0
  144. data/spec/lib/thinking_sphinx/core/array_spec.rb +9 -0
  145. data/spec/lib/thinking_sphinx/core/string_spec.rb +9 -0
  146. data/spec/lib/thinking_sphinx/deltas/job_spec.rb +32 -0
  147. data/spec/lib/thinking_sphinx/excerpter_spec.rb +57 -0
  148. data/spec/lib/thinking_sphinx/facet_search_spec.rb +176 -0
  149. data/spec/lib/thinking_sphinx/facet_spec.rb +333 -0
  150. data/spec/lib/thinking_sphinx/field_spec.rb +154 -0
  151. data/spec/lib/thinking_sphinx/index/builder_spec.rb +455 -0
  152. data/spec/lib/thinking_sphinx/index/faux_column_spec.rb +30 -0
  153. data/spec/lib/thinking_sphinx/index_spec.rb +45 -0
  154. data/spec/lib/thinking_sphinx/rails_additions_spec.rb +203 -0
  155. data/spec/lib/thinking_sphinx/search_methods_spec.rb +152 -0
  156. data/spec/lib/thinking_sphinx/search_spec.rb +1101 -0
  157. data/spec/lib/thinking_sphinx/source_spec.rb +227 -0
  158. data/spec/lib/thinking_sphinx_spec.rb +162 -0
  159. data/tasks/distribution.rb +55 -0
  160. data/tasks/rails.rake +1 -0
  161. data/tasks/testing.rb +83 -0
  162. data/vendor/after_commit/LICENSE +20 -0
  163. data/vendor/after_commit/README +16 -0
  164. data/vendor/after_commit/Rakefile +22 -0
  165. data/vendor/after_commit/init.rb +8 -0
  166. data/vendor/after_commit/lib/after_commit.rb +45 -0
  167. data/vendor/after_commit/lib/after_commit/active_record.rb +114 -0
  168. data/vendor/after_commit/lib/after_commit/connection_adapters.rb +103 -0
  169. data/vendor/after_commit/test/after_commit_test.rb +53 -0
  170. data/vendor/delayed_job/lib/delayed/job.rb +251 -0
  171. data/vendor/delayed_job/lib/delayed/message_sending.rb +7 -0
  172. data/vendor/delayed_job/lib/delayed/performable_method.rb +55 -0
  173. data/vendor/delayed_job/lib/delayed/worker.rb +54 -0
  174. data/vendor/riddle/lib/riddle.rb +30 -0
  175. data/vendor/riddle/lib/riddle/client.rb +635 -0
  176. data/vendor/riddle/lib/riddle/client/filter.rb +53 -0
  177. data/vendor/riddle/lib/riddle/client/message.rb +66 -0
  178. data/vendor/riddle/lib/riddle/client/response.rb +84 -0
  179. data/vendor/riddle/lib/riddle/configuration.rb +33 -0
  180. data/vendor/riddle/lib/riddle/configuration/distributed_index.rb +48 -0
  181. data/vendor/riddle/lib/riddle/configuration/index.rb +142 -0
  182. data/vendor/riddle/lib/riddle/configuration/indexer.rb +19 -0
  183. data/vendor/riddle/lib/riddle/configuration/remote_index.rb +17 -0
  184. data/vendor/riddle/lib/riddle/configuration/searchd.rb +25 -0
  185. data/vendor/riddle/lib/riddle/configuration/section.rb +43 -0
  186. data/vendor/riddle/lib/riddle/configuration/source.rb +23 -0
  187. data/vendor/riddle/lib/riddle/configuration/sql_source.rb +34 -0
  188. data/vendor/riddle/lib/riddle/configuration/xml_source.rb +28 -0
  189. data/vendor/riddle/lib/riddle/controller.rb +53 -0
  190. metadata +267 -0
@@ -0,0 +1,6 @@
1
+ post = Post.create(
2
+ :subject => "Hello World", :content => "Um Text", :id => 1, :category_id => 1
3
+ )
4
+
5
+ post.authors << Author.find(:first)
6
+ post.save
@@ -0,0 +1,14 @@
1
+ # Reset the primary key to allow us to create robots with specific internal_ids
2
+ class Robot < ActiveRecord::Base
3
+ set_primary_key :id
4
+ end
5
+
6
+ Robot.create :name => 'Fritz', :internal_id => 'F0001'
7
+ Robot.create :name => 'Sizzle', :internal_id => 'S0001'
8
+ Robot.create :name => 'Sizzle Jr.', :internal_id => 'S0002'
9
+ Robot.create :name => 'Expendable', :internal_id => 'E0001'
10
+
11
+ # Annnnnnnnnnd we're back
12
+ class Robot < ActiveRecord::Base
13
+ set_primary_key :internal_id
14
+ end
@@ -0,0 +1,27 @@
1
+ post = Post.find(1)
2
+
3
+ [
4
+ 'Nunc in neque. Integer sed odio ac quam pellentesque suscipit. Cras posuere posuere est. Suspendisse est.',
5
+ 'In hac habitasse platea dictumst. Etiam eleifend est ac diam. Ut ac felis sit amet mi bibendum varius.',
6
+ 'Nullam sollicitudin tellus at ipsum. Duis mi eros, blandit sed, condimentum non, mattis vel, orci.',
7
+ 'Praesent auctor mollis leo. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et',
8
+ 'malesuada fames ac turpis egestas. Donec non odio. Maecenas varius elit ut ante. Phasellus egestas, quam',
9
+ 'a congue euismod, diam urna gravida risus, at euismod lectus diam id sem. Vestibulum sed dolor et massa',
10
+ 'porta placerat. Etiam eget risus. Sed ornare. Vivamus in sapien. Maecenas non enim nec metus posuere',
11
+ 'vehicula. Donec rhoncus mauris at metus. Curabitur volutpat massa a metus. Aliquam ornare, neque ut',
12
+ 'tristique convallis, libero orci eleifend nibh, ac porta leo felis sed orci. Lorem ipsum dolor sit amet,',
13
+ 'Waffles' # This one is important, whereas the others are just padding
14
+ ].each do |text|
15
+ Tagging.create :taggable => post, :tag => Tag.create(:text => text)
16
+ end
17
+
18
+ Developer.find(:all).each do |developer|
19
+ [:country, :city, :state].each do |column|
20
+ Tagging.create(
21
+ :taggable => developer,
22
+ :tag => Tag.find_or_create_by_text(developer.send(column))
23
+ )
24
+ end
25
+ end
26
+
27
+ Tagging.create(:taggable => Developer.last)
@@ -0,0 +1,10 @@
1
+ Theta.create :name => "one"
2
+ Theta.create :name => "two"
3
+ Theta.create :name => "three"
4
+ Theta.create :name => "four"
5
+ Theta.create :name => "five"
6
+ Theta.create :name => "six"
7
+ Theta.create :name => "seven"
8
+ Theta.create :name => "eight"
9
+ Theta.create :name => "nine"
10
+ Theta.create :name => "ten"
@@ -0,0 +1,7 @@
1
+ ActiveRecord::Base.connection.create_table :alphas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :value, :integer, :null => false
4
+ t.column :cost, :decimal, :precision => 10, :scale => 6
5
+ t.column :created_on, :date
6
+ t.column :created_at, :timestamp
7
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :animals, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :type, :string
4
+ t.column :delta, :boolean, :null => false, :default => false
5
+ end
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Base.connection.create_table :authors, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ end
@@ -0,0 +1,6 @@
1
+ ActiveRecord::Base.connection.create_table(
2
+ :authors_posts, :force => true, :id => false
3
+ ) do |t|
4
+ t.column :author_id, :integer, :null => false
5
+ t.column :post_id, :integer, :null => false
6
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :betas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :value, :integer, :null => false
4
+ t.column :delta, :boolean, :null => false, :default => false
5
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :boxes, :force => true do |t|
2
+ t.column :width, :integer, :null => false
3
+ t.column :length, :integer, :null => false
4
+ t.column :depth, :integer
5
+ end
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Base.connection.create_table :categories, :force => true do |t|
2
+ t.column :name, :string
3
+ end
@@ -0,0 +1,10 @@
1
+ ActiveRecord::Base.connection.create_table :comments, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :email, :string
4
+ t.column :url, :string
5
+ t.column :content, :text
6
+ t.column :post_id, :integer, :null => false
7
+ t.column :category_id, :integer, :null => false
8
+ t.column :created_at, :datetime
9
+ t.column :updated_at, :datetime
10
+ end
@@ -0,0 +1,17 @@
1
+ ActiveRecord::Base.connection.create_table :delayed_betas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :delta, :boolean, :null => false, :default => false
4
+ end
5
+
6
+ ActiveRecord::Base.connection.create_table :delayed_jobs, :force => true do |t|
7
+ t.column :priority, :integer, :default => 0
8
+ t.column :attempts, :integer, :default => 0
9
+ t.column :handler, :text
10
+ t.column :last_error, :string
11
+ t.column :run_at, :datetime
12
+ t.column :locked_at, :datetime
13
+ t.column :failed_at, :datetime
14
+ t.column :locked_by, :string
15
+ t.column :created_at, :datetime
16
+ t.column :updated_at, :datetime
17
+ end
@@ -0,0 +1,9 @@
1
+ require 'faker'
2
+
3
+ ActiveRecord::Base.connection.create_table :developers, :force => true do |t|
4
+ t.column :name, :string, :null => false
5
+ t.column :city, :string
6
+ t.column :state, :string
7
+ t.column :country, :string
8
+ t.column :age, :integer
9
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :extensible_betas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :delta, :boolean, :null => false, :default => false
4
+ t.column :changed_by_generic, :boolean, :null => false, :default => false
5
+ end
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Base.connection.create_table :gammas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ end
@@ -0,0 +1,13 @@
1
+ ActiveRecord::Base.connection.create_table :people, :force => true do |t|
2
+ t.column :first_name, :string
3
+ t.column :middle_initial, :string
4
+ t.column :last_name, :string
5
+ t.column :gender, :string
6
+ t.column :street_address, :string
7
+ t.column :city, :string
8
+ t.column :state, :string
9
+ t.column :postcode, :string
10
+ t.column :email, :string
11
+ t.column :birthday, :datetime
12
+ t.column :delta, :boolean, :null => false, :default => false
13
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :posts, :force => true do |t|
2
+ t.column :subject, :string, :null => false
3
+ t.column :content, :text
4
+ t.column :category_id, :integer, :null => false
5
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :robots, :id => false, :force => true do |t|
2
+ t.column :alternate_primary_key, "int(11) DEFAULT NULL auto_increment PRIMARY KEY"
3
+ t.column :name, :string, :null => false
4
+ t.column :internal_id, :string, :null => false
5
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :taggings, :force => true do |t|
2
+ t.column :tag_id, :integer
3
+ t.column :taggable_id, :integer, :null => false
4
+ t.column :taggable_type, :string, :null => false
5
+ end
@@ -0,0 +1,4 @@
1
+ ActiveRecord::Base.connection.create_table :tags, :force => true do |t|
2
+ # t.column :post_id, :integer, :null => false
3
+ t.column :text, :text, :null => true
4
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Base.connection.create_table :thetas, :force => true do |t|
2
+ t.column :name, :string, :null => false
3
+ t.column :created_at, :datetime, :null => false
4
+ t.column :updated_at, :datetime, :null => false
5
+ end
@@ -0,0 +1,3 @@
1
+ require 'active_record'
2
+ Database = defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql'
3
+ require "active_record/connection_adapters/#{Database}_adapter"
@@ -0,0 +1,3 @@
1
+ require 'active_record'
2
+ Database = defined?(JRUBY_VERSION) ? 'jdbcpostgresql' : 'postgresql'
3
+ require "active_record/connection_adapters/#{Database}_adapter"
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'cucumber'
3
+ require 'spec'
4
+ require 'fileutils'
5
+ require 'ginger'
6
+ require 'will_paginate'
@@ -0,0 +1,8 @@
1
+ class GenericDeltaHandler < ThinkingSphinx::Deltas::DefaultDelta
2
+
3
+ def index(model, instance = nil)
4
+ #do nothing but set a bit for every record
5
+ #this is just a demonstration of extensibility
6
+ model.update_all(:changed_by_generic => true)
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ class Alpha < ActiveRecord::Base
2
+ define_index do
3
+ indexes :name, :sortable => true
4
+
5
+ has value, created_at, created_on
6
+ has cost, :facet => true
7
+
8
+ set_property :field_weights => {"name" => 10}
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ class Animal < ActiveRecord::Base
2
+ define_index do
3
+ indexes name, :sortable => true
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ class Author < ActiveRecord::Base
2
+ #
3
+ end
@@ -0,0 +1,8 @@
1
+ class Beta < ActiveRecord::Base
2
+ define_index do
3
+ indexes :name, :sortable => true
4
+ has value
5
+
6
+ set_property :delta => true
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ class Box < ActiveRecord::Base
2
+ define_index do
3
+ indexes width, :as => :width_field
4
+
5
+ has width, length, depth
6
+ has [width, length, depth], :as => :dimensions
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ class Cat < Animal
2
+ #
3
+ end
@@ -0,0 +1,4 @@
1
+ class Category < ActiveRecord::Base
2
+ has_many :posts
3
+ has_many :comments
4
+ end
@@ -0,0 +1,10 @@
1
+ class Comment < ActiveRecord::Base
2
+ belongs_to :post
3
+ belongs_to :category
4
+
5
+ define_index do
6
+ indexes :content
7
+
8
+ has category.name, :facet => true, :as => :category_name, :type => :string
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class DelayedBeta < ActiveRecord::Base
2
+ define_index do
3
+ indexes :name, :sortable => true
4
+
5
+ set_property :delta => :delayed
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ require 'features/support/models/tag'
2
+ require 'features/support/models/tagging'
3
+
4
+ class Developer < ActiveRecord::Base
5
+ has_many :taggings, :as => :taggable
6
+ has_many :tags, :through => :taggings
7
+
8
+ define_index do
9
+ indexes country, :facet => true
10
+ indexes state, :facet => true
11
+ indexes tags.text, :as => :tags, :facet => true
12
+ has age, :facet => true
13
+ has tags(:id), :as => :tag_ids, :facet => true
14
+ facet city
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ class Dog < Animal
2
+ #
3
+ end
@@ -0,0 +1,9 @@
1
+ require File.join(File.dirname(__FILE__), "..", "lib", "generic_delta_handler")
2
+
3
+ class ExtensibleBeta < ActiveRecord::Base
4
+ define_index do
5
+ indexes :name, :sortable => true
6
+
7
+ set_property :delta => "GenericDeltaHandler"
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class Gamma < ActiveRecord::Base
2
+ define_index do
3
+ indexes :name, :sortable => true
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ class Person < ActiveRecord::Base
2
+ define_index do
3
+ indexes first_name, last_name, :sortable => true
4
+
5
+ has [first_name, middle_initial, last_name], :as => :name_sort
6
+ has birthday
7
+ has gender, :facet => true
8
+
9
+ set_property :min_infix_len => 1
10
+ set_property :enable_star => true
11
+ end
12
+
13
+ sphinx_scope(:with_first_name) { |name|
14
+ { :conditions => {:first_name => name} }
15
+ }
16
+ sphinx_scope(:with_last_name) { |name|
17
+ { :conditions => {:last_name => name} }
18
+ }
19
+ sphinx_scope(:with_id) { |id|
20
+ { :with => {:sphinx_internal_id => id} }
21
+ }
22
+ sphinx_scope(:ids_only) { {:ids_only => true} }
23
+ end
@@ -0,0 +1,20 @@
1
+ class Post < ActiveRecord::Base
2
+ has_many :comments, :dependent => :destroy
3
+ has_many :taggings, :as => :taggable
4
+ has_many :tags, :through => :taggings
5
+ belongs_to :category
6
+ has_and_belongs_to_many :authors
7
+
8
+ define_index do
9
+ indexes subject
10
+ indexes content
11
+ indexes tags.text, :as => :tags
12
+ indexes comments.content, :as => :comments
13
+ indexes authors.name, :as => :authors
14
+
15
+ has comments(:id), :as => :comment_ids, :source => :ranged_query
16
+ has category.name, :facet => true, :as => :category_name, :type => :string
17
+ has 'COUNT(DISTINCT comments.id)', :as => :comments_count, :type => :integer
18
+ has comments.created_at, :as => :comments_created_at
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ class Robot < ActiveRecord::Base
2
+ set_primary_key :internal_id
3
+ set_sphinx_primary_key :alternate_primary_key
4
+
5
+ define_index do
6
+ indexes :name
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ class Tag < ActiveRecord::Base
2
+ belongs_to :post
3
+ end
@@ -0,0 +1,4 @@
1
+ class Tagging < ActiveRecord::Base
2
+ belongs_to :tag
3
+ belongs_to :taggable, :polymorphic => true
4
+ end
@@ -0,0 +1,7 @@
1
+ class Theta < ActiveRecord::Base
2
+ define_index do
3
+ indexes :name, :sortable => true
4
+
5
+ set_property :delta => :datetime, :threshold => 1.hour
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../../lib'
2
+
3
+ require 'lib/thinking_sphinx'
4
+
5
+ %w( tmp/config tmp/log tmp/db/sphinx/development ).each do |path|
6
+ FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
7
+ end
8
+
9
+ Kernel.const_set :RAILS_ROOT, "#{Dir.pwd}/tmp" unless defined?(RAILS_ROOT)
10
+
11
+ at_exit do
12
+ ThinkingSphinx::Configuration.instance.controller.stop
13
+ sleep(1) # Ensure Sphinx has shut down completely
14
+ ActiveRecord::Base.logger.close
15
+ FileUtils.rm_r "#{Dir.pwd}/tmp"
16
+ end
17
+
18
+ # Add log file
19
+ ActiveRecord::Base.logger = Logger.new open("tmp/active_record.log", "a")
20
+
21
+ # Set up database tables
22
+ Dir["features/support/db/migrations/*.rb"].each do |file|
23
+ require file.gsub(/\.rb$/, '')
24
+ end
25
+
26
+ # Load Models
27
+ Dir["features/support/models/*.rb"].sort.each do |file|
28
+ require file.gsub(/\.rb$/, '')
29
+ end
30
+
31
+ ThinkingSphinx.deltas_enabled = false
32
+
33
+ # Load Fixtures
34
+ Dir["features/support/db/fixtures/*.rb"].each do |file|
35
+ require file.gsub(/\.rb$/, '')
36
+ end
37
+
38
+ ThinkingSphinx.deltas_enabled = true
39
+ ThinkingSphinx.suppress_delta_output = true
40
+
41
+ ThinkingSphinx::Configuration.instance.build
42
+ ThinkingSphinx::Configuration.instance.controller.index
43
+ ThinkingSphinx::Configuration.instance.controller.start