thinking-sphinx 1.5.0 → 2.0.0.rc1
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/README.textile +15 -48
- data/VERSION +1 -0
- data/features/attribute_transformation.feature +7 -7
- data/features/attribute_updates.feature +16 -18
- data/features/deleting_instances.feature +13 -16
- data/features/excerpts.feature +0 -8
- data/features/facets.feature +19 -25
- data/features/handling_edits.feature +20 -25
- data/features/searching_across_models.feature +1 -1
- data/features/searching_by_index.feature +5 -6
- data/features/searching_by_model.feature +29 -29
- data/features/sphinx_scopes.feature +0 -26
- data/features/step_definitions/common_steps.rb +6 -18
- data/features/step_definitions/scope_steps.rb +0 -4
- data/features/step_definitions/search_steps.rb +4 -9
- data/features/support/env.rb +10 -3
- data/features/thinking_sphinx/db/fixtures/alphas.rb +10 -8
- data/features/thinking_sphinx/db/fixtures/cats.rb +1 -1
- data/features/thinking_sphinx/db/fixtures/dogs.rb +1 -1
- data/features/thinking_sphinx/db/fixtures/foxes.rb +1 -1
- data/features/thinking_sphinx/db/fixtures/people.rb +1 -1
- data/features/thinking_sphinx/db/fixtures/posts.rb +1 -5
- data/features/thinking_sphinx/db/migrations/create_posts.rb +0 -1
- data/features/thinking_sphinx/models/alpha.rb +0 -1
- data/features/thinking_sphinx/models/beta.rb +0 -5
- data/features/thinking_sphinx/models/developer.rb +1 -6
- data/features/thinking_sphinx/models/music.rb +1 -3
- data/features/thinking_sphinx/models/person.rb +1 -2
- data/features/thinking_sphinx/models/post.rb +0 -1
- data/lib/cucumber/thinking_sphinx/external_world.rb +4 -8
- data/lib/cucumber/thinking_sphinx/internal_world.rb +27 -36
- data/lib/thinking_sphinx.rb +60 -132
- data/lib/thinking_sphinx/active_record.rb +98 -124
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +13 -17
- data/lib/thinking_sphinx/active_record/delta.rb +15 -21
- data/lib/thinking_sphinx/active_record/has_many_association.rb +23 -16
- data/lib/thinking_sphinx/active_record/scopes.rb +0 -18
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +15 -63
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -4
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +24 -65
- data/lib/thinking_sphinx/association.rb +11 -36
- data/lib/thinking_sphinx/attribute.rb +85 -92
- data/lib/thinking_sphinx/auto_version.rb +3 -21
- data/lib/thinking_sphinx/class_facet.rb +3 -8
- data/lib/thinking_sphinx/configuration.rb +58 -114
- data/lib/thinking_sphinx/context.rb +20 -22
- data/lib/thinking_sphinx/core/array.rb +13 -0
- data/lib/thinking_sphinx/deltas.rb +0 -2
- data/lib/thinking_sphinx/deltas/default_delta.rb +22 -18
- data/lib/thinking_sphinx/deploy/capistrano.rb +31 -30
- data/lib/thinking_sphinx/excerpter.rb +1 -2
- data/lib/thinking_sphinx/facet.rb +35 -45
- data/lib/thinking_sphinx/facet_search.rb +24 -58
- data/lib/thinking_sphinx/field.rb +0 -18
- data/lib/thinking_sphinx/index.rb +36 -38
- data/lib/thinking_sphinx/index/builder.rb +59 -74
- data/lib/thinking_sphinx/property.rb +45 -66
- data/lib/thinking_sphinx/railtie.rb +35 -0
- data/lib/thinking_sphinx/search.rb +250 -506
- data/lib/thinking_sphinx/source.rb +31 -50
- data/lib/thinking_sphinx/source/internal_properties.rb +3 -8
- data/lib/thinking_sphinx/source/sql.rb +31 -71
- data/lib/thinking_sphinx/tasks.rb +27 -48
- data/spec/thinking_sphinx/active_record/delta_spec.rb +41 -36
- data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +0 -96
- data/spec/thinking_sphinx/active_record/scopes_spec.rb +29 -29
- data/spec/thinking_sphinx/active_record_spec.rb +169 -140
- data/spec/thinking_sphinx/association_spec.rb +2 -20
- data/spec/thinking_sphinx/attribute_spec.rb +97 -101
- data/spec/thinking_sphinx/auto_version_spec.rb +11 -75
- data/spec/thinking_sphinx/configuration_spec.rb +62 -63
- data/spec/thinking_sphinx/context_spec.rb +66 -66
- data/spec/thinking_sphinx/facet_search_spec.rb +99 -99
- data/spec/thinking_sphinx/facet_spec.rb +4 -30
- data/spec/thinking_sphinx/field_spec.rb +3 -17
- data/spec/thinking_sphinx/index/builder_spec.rb +132 -169
- data/spec/thinking_sphinx/index_spec.rb +39 -45
- data/spec/thinking_sphinx/search_methods_spec.rb +33 -37
- data/spec/thinking_sphinx/search_spec.rb +269 -491
- data/spec/thinking_sphinx/source_spec.rb +48 -62
- data/spec/thinking_sphinx_spec.rb +49 -49
- data/tasks/distribution.rb +46 -0
- data/tasks/testing.rb +74 -0
- metadata +123 -199
- data/features/field_sorting.feature +0 -18
- data/features/thinking_sphinx/db/.gitignore +0 -1
- data/features/thinking_sphinx/db/fixtures/post_keywords.txt +0 -1
- data/features/thinking_sphinx/models/andrew.rb +0 -17
- data/lib/thinking-sphinx.rb +0 -1
- data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
- data/lib/thinking_sphinx/bundled_search.rb +0 -40
- data/lib/thinking_sphinx/connection.rb +0 -71
- data/lib/thinking_sphinx/deltas/delete_job.rb +0 -16
- data/lib/thinking_sphinx/deltas/index_job.rb +0 -17
- data/lib/thinking_sphinx/rails_additions.rb +0 -181
- data/spec/fixtures/data.sql +0 -32
- data/spec/fixtures/database.yml.default +0 -3
- data/spec/fixtures/models.rb +0 -161
- data/spec/fixtures/structure.sql +0 -146
- data/spec/spec_helper.rb +0 -54
- data/spec/sphinx_helper.rb +0 -67
- data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +0 -163
- data/spec/thinking_sphinx/connection_spec.rb +0 -77
- data/spec/thinking_sphinx/rails_additions_spec.rb +0 -203
data/spec/fixtures/structure.sql
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
DROP TABLE IF EXISTS `people`;
|
|
2
|
-
|
|
3
|
-
CREATE TABLE `people` (
|
|
4
|
-
`id` int(11) NOT NULL auto_increment,
|
|
5
|
-
`first_name` varchar(50) NULL,
|
|
6
|
-
`middle_initial` varchar(10) NULL,
|
|
7
|
-
`last_name` varchar(50) NULL,
|
|
8
|
-
`gender` varchar(10) NULL,
|
|
9
|
-
`street_address` varchar(200) NULL,
|
|
10
|
-
`city` varchar(100) NULL,
|
|
11
|
-
`state` varchar(100) NULL,
|
|
12
|
-
`postcode` varchar(10) NULL,
|
|
13
|
-
`email` varchar(100) NULL,
|
|
14
|
-
`birthday` datetime NULL,
|
|
15
|
-
`team_id` int(11) NULL,
|
|
16
|
-
`team_type` varchar(50) NULL,
|
|
17
|
-
`type` varchar(50) NULL,
|
|
18
|
-
`parent_id` varchar(50) NULL,
|
|
19
|
-
`source_id` int(11) NULL,
|
|
20
|
-
`source_type` varchar(50) NULL,
|
|
21
|
-
`delta` tinyint(1) NOT NULL DEFAULT 0,
|
|
22
|
-
PRIMARY KEY (`id`)
|
|
23
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
24
|
-
|
|
25
|
-
DROP TABLE IF EXISTS `friendships`;
|
|
26
|
-
|
|
27
|
-
CREATE TABLE `friendships` (
|
|
28
|
-
`id` int(11) NOT NULL auto_increment,
|
|
29
|
-
`person_id` int(11) NOT NULL,
|
|
30
|
-
`friend_id` int(11) NOT NULL,
|
|
31
|
-
`created_at` datetime NOT NULL,
|
|
32
|
-
`created_on` date NULL,
|
|
33
|
-
`updated_at` datetime NOT NULL,
|
|
34
|
-
PRIMARY KEY (`id`)
|
|
35
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
36
|
-
|
|
37
|
-
DROP TABLE IF EXISTS `football_teams`;
|
|
38
|
-
|
|
39
|
-
CREATE TABLE `football_teams` (
|
|
40
|
-
`id` int(11) NOT NULL auto_increment,
|
|
41
|
-
`name` varchar(50) NOT NULL,
|
|
42
|
-
`state` varchar(50) NOT NULL,
|
|
43
|
-
`league` varchar(50) NOT NULL,
|
|
44
|
-
PRIMARY KEY (`id`)
|
|
45
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
46
|
-
|
|
47
|
-
DROP TABLE IF EXISTS `cricket_teams`;
|
|
48
|
-
|
|
49
|
-
CREATE TABLE `cricket_teams` (
|
|
50
|
-
`id` int(11) NOT NULL auto_increment,
|
|
51
|
-
`name` varchar(50) NOT NULL,
|
|
52
|
-
`state` varchar(50) NOT NULL,
|
|
53
|
-
PRIMARY KEY (`id`)
|
|
54
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
55
|
-
|
|
56
|
-
DROP TABLE IF EXISTS `contacts`;
|
|
57
|
-
|
|
58
|
-
CREATE TABLE `contacts` (
|
|
59
|
-
`id` int(11) NOT NULL auto_increment,
|
|
60
|
-
`phone_number` varchar(50) NOT NULL,
|
|
61
|
-
`person_id` int(11) NOT NULL,
|
|
62
|
-
PRIMARY KEY (`id`)
|
|
63
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
64
|
-
|
|
65
|
-
DROP TABLE IF EXISTS `alphas`;
|
|
66
|
-
|
|
67
|
-
CREATE TABLE `alphas` (
|
|
68
|
-
`id` int(11) NOT NULL auto_increment,
|
|
69
|
-
`name` varchar(50) NOT NULL,
|
|
70
|
-
`value` int(11),
|
|
71
|
-
`cost` decimal(10,6),
|
|
72
|
-
PRIMARY KEY (`id`)
|
|
73
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
74
|
-
|
|
75
|
-
DROP TABLE IF EXISTS `betas`;
|
|
76
|
-
|
|
77
|
-
CREATE TABLE `betas` (
|
|
78
|
-
`id` int(11) NOT NULL auto_increment,
|
|
79
|
-
`name` varchar(50) NOT NULL,
|
|
80
|
-
`alpha_id` int(11),
|
|
81
|
-
`delta` tinyint(1) NOT NULL DEFAULT 0,
|
|
82
|
-
PRIMARY KEY (`id`)
|
|
83
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
84
|
-
|
|
85
|
-
DROP TABLE IF EXISTS `gammas`;
|
|
86
|
-
|
|
87
|
-
CREATE TABLE `gammas` (
|
|
88
|
-
`id` int(11) NOT NULL auto_increment,
|
|
89
|
-
`name` varchar(50) NOT NULL,
|
|
90
|
-
`value` int(11),
|
|
91
|
-
`beta_id` int(11),
|
|
92
|
-
PRIMARY KEY (`id`)
|
|
93
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
94
|
-
|
|
95
|
-
DROP TABLE IF EXISTS `thetas`;
|
|
96
|
-
|
|
97
|
-
CREATE TABLE `thetas` (
|
|
98
|
-
`id` int(11) NOT NULL auto_increment,
|
|
99
|
-
`name` varchar(50) NOT NULL,
|
|
100
|
-
`value` int(11),
|
|
101
|
-
`alpha_id` int(11),
|
|
102
|
-
PRIMARY KEY (`id`)
|
|
103
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
104
|
-
|
|
105
|
-
DROP TABLE IF EXISTS `searches`;
|
|
106
|
-
|
|
107
|
-
CREATE TABLE `searches` (
|
|
108
|
-
`id` int(11) NOT NULL auto_increment,
|
|
109
|
-
`name` varchar(50) NOT NULL,
|
|
110
|
-
PRIMARY KEY (`id`)
|
|
111
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
112
|
-
|
|
113
|
-
DROP TABLE IF EXISTS `tags`;
|
|
114
|
-
|
|
115
|
-
CREATE TABLE `tags` (
|
|
116
|
-
`id` int(11) NOT NULL auto_increment,
|
|
117
|
-
`person_id` int(11) NOT NULL,
|
|
118
|
-
`football_team_id` int(11) NOT NULL,
|
|
119
|
-
`cricket_team_id` int(11) NOT NULL,
|
|
120
|
-
`name` varchar(50) NOT NULL,
|
|
121
|
-
PRIMARY KEY (`id`)
|
|
122
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
123
|
-
|
|
124
|
-
DROP TABLE IF EXISTS `links`;
|
|
125
|
-
|
|
126
|
-
CREATE TABLE `links` (
|
|
127
|
-
`id` int(11) NOT NULL auto_increment,
|
|
128
|
-
`url` varchar(50) NOT NULL,
|
|
129
|
-
`description` varchar(200),
|
|
130
|
-
PRIMARY KEY (`id`)
|
|
131
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
132
|
-
|
|
133
|
-
DROP TABLE IF EXISTS `links_people`;
|
|
134
|
-
|
|
135
|
-
CREATE TABLE `links_people` (
|
|
136
|
-
`link_id` int(11) NOT NULL,
|
|
137
|
-
`person_id` int(11) NOT NULL
|
|
138
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
139
|
-
|
|
140
|
-
DROP TABLE IF EXISTS `big_foos`;
|
|
141
|
-
|
|
142
|
-
CREATE TABLE `big_foos` (
|
|
143
|
-
`id` bigint NOT NULL auto_increment,
|
|
144
|
-
`name` varchar(50) NOT NULL,
|
|
145
|
-
PRIMARY KEY (`id`)
|
|
146
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
|
2
|
-
|
|
3
|
-
require 'rubygems'
|
|
4
|
-
require 'fileutils'
|
|
5
|
-
require 'bundler'
|
|
6
|
-
|
|
7
|
-
Bundler.require :default, :development
|
|
8
|
-
|
|
9
|
-
require "#{File.dirname(__FILE__)}/sphinx_helper"
|
|
10
|
-
|
|
11
|
-
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
|
12
|
-
|
|
13
|
-
RSpec.configure do |config|
|
|
14
|
-
%w( tmp tmp/config tmp/log tmp/db ).each do |path|
|
|
15
|
-
FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
Kernel.const_set :RAILS_ROOT, "#{Dir.pwd}/tmp" unless defined?(RAILS_ROOT)
|
|
19
|
-
|
|
20
|
-
sphinx = SphinxHelper.new
|
|
21
|
-
sphinx.setup_mysql
|
|
22
|
-
|
|
23
|
-
require "#{File.dirname(__FILE__)}/fixtures/models"
|
|
24
|
-
ThinkingSphinx.context.define_indexes
|
|
25
|
-
|
|
26
|
-
config.before :each do
|
|
27
|
-
%w( tmp tmp/config tmp/log tmp/db ).each do |path|
|
|
28
|
-
FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
ThinkingSphinx.updates_enabled = true
|
|
32
|
-
ThinkingSphinx.deltas_enabled = true
|
|
33
|
-
ThinkingSphinx.suppress_delta_output = true
|
|
34
|
-
|
|
35
|
-
ThinkingSphinx::Configuration.instance.reset
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
config.after :all do
|
|
39
|
-
FileUtils.rm_r "#{Dir.pwd}/tmp" rescue nil
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def minimal_result_hashes(*instances)
|
|
44
|
-
instances.collect do |instance|
|
|
45
|
-
{
|
|
46
|
-
:weight => 21,
|
|
47
|
-
:attributes => {
|
|
48
|
-
'sphinx_internal_id' => instance.id,
|
|
49
|
-
'sphinx_internal_class' => instance.class.name,
|
|
50
|
-
'class_crc' => instance.class.name.to_crc32
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
end
|
|
54
|
-
end
|
data/spec/sphinx_helper.rb
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
require 'active_record'
|
|
2
|
-
prefix = defined?(JRUBY_VERSION) ? "jdbc" : ""
|
|
3
|
-
require "active_record/connection_adapters/#{prefix}mysql_adapter"
|
|
4
|
-
require "active_record/connection_adapters/mysql2_adapter"
|
|
5
|
-
|
|
6
|
-
begin
|
|
7
|
-
require "active_record/connection_adapters/#{prefix}postgresql_adapter"
|
|
8
|
-
rescue LoadError
|
|
9
|
-
# No postgres? no prob...
|
|
10
|
-
end
|
|
11
|
-
require 'yaml'
|
|
12
|
-
|
|
13
|
-
class SphinxHelper
|
|
14
|
-
attr_accessor :host, :username, :password, :socket
|
|
15
|
-
attr_reader :path
|
|
16
|
-
|
|
17
|
-
def initialize
|
|
18
|
-
@host = 'localhost'
|
|
19
|
-
@username = 'root'
|
|
20
|
-
@password = ''
|
|
21
|
-
|
|
22
|
-
if File.exist?('spec/fixtures/database.yml')
|
|
23
|
-
config = YAML.load(File.open('spec/fixtures/database.yml'))
|
|
24
|
-
@host = config['host']
|
|
25
|
-
@username = config['username']
|
|
26
|
-
@password = config['password']
|
|
27
|
-
@socket = config['socket']
|
|
28
|
-
@sslca = config['sslca']
|
|
29
|
-
@sslcert = config['sslcert']
|
|
30
|
-
@sslkey = config['sslkey']
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
@path = File.expand_path(File.dirname(__FILE__))
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def setup_mysql
|
|
37
|
-
ActiveRecord::Base.establish_connection(
|
|
38
|
-
:adapter => mysql_adapter,
|
|
39
|
-
:database => 'thinking_sphinx',
|
|
40
|
-
:username => @username,
|
|
41
|
-
:password => @password,
|
|
42
|
-
:host => @host,
|
|
43
|
-
:socket => @socket,
|
|
44
|
-
:sslca => @sslca,
|
|
45
|
-
:sslcert => @sslcert,
|
|
46
|
-
:sslkey => @sslkey
|
|
47
|
-
)
|
|
48
|
-
ActiveRecord::Base.logger = Logger.new(File.open('tmp/activerecord.log', 'a'))
|
|
49
|
-
|
|
50
|
-
structure = File.open('spec/fixtures/structure.sql') { |f| f.read.chomp }
|
|
51
|
-
structure.split(';').each { |table|
|
|
52
|
-
ActiveRecord::Base.connection.execute table
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
File.open('spec/fixtures/data.sql') { |f|
|
|
56
|
-
while line = f.gets
|
|
57
|
-
ActiveRecord::Base.connection.execute line unless line.blank?
|
|
58
|
-
end
|
|
59
|
-
}
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
private
|
|
63
|
-
|
|
64
|
-
def mysql_adapter
|
|
65
|
-
defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql2'
|
|
66
|
-
end
|
|
67
|
-
end
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
class CustomAdapter < ThinkingSphinx::AbstractAdapter
|
|
4
|
-
#
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe ThinkingSphinx::AbstractAdapter do
|
|
8
|
-
describe '.detect' do
|
|
9
|
-
let(:model) { stub('model') }
|
|
10
|
-
|
|
11
|
-
it "returns a MysqlAdapter object for :mysql" do
|
|
12
|
-
ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :mysql)
|
|
13
|
-
|
|
14
|
-
adapter = ThinkingSphinx::AbstractAdapter.detect(model)
|
|
15
|
-
adapter.should be_a(ThinkingSphinx::MysqlAdapter)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "returns a PostgreSQLAdapter object for :postgresql" do
|
|
19
|
-
ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :postgresql)
|
|
20
|
-
|
|
21
|
-
adapter = ThinkingSphinx::AbstractAdapter.detect(model)
|
|
22
|
-
adapter.should be_a(ThinkingSphinx::PostgreSQLAdapter)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "instantiates the provided class if one is provided" do
|
|
26
|
-
ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => CustomAdapter)
|
|
27
|
-
CustomAdapter.should_receive(:new).and_return(stub('adapter'))
|
|
28
|
-
|
|
29
|
-
ThinkingSphinx::AbstractAdapter.detect(model)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "raises an exception for other responses" do
|
|
33
|
-
ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :sqlite)
|
|
34
|
-
|
|
35
|
-
lambda {
|
|
36
|
-
ThinkingSphinx::AbstractAdapter.detect(model)
|
|
37
|
-
}.should raise_error
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
describe '.adapter_for_model' do
|
|
42
|
-
let(:model) { stub('model') }
|
|
43
|
-
|
|
44
|
-
after :each do
|
|
45
|
-
ThinkingSphinx.database_adapter = nil
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "translates strings to symbols" do
|
|
49
|
-
ThinkingSphinx.database_adapter = 'foo'
|
|
50
|
-
|
|
51
|
-
ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :foo
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "passes through symbols unchanged" do
|
|
55
|
-
ThinkingSphinx.database_adapter = :bar
|
|
56
|
-
|
|
57
|
-
ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :bar
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "returns standard_adapter_for_model if database_adapter is not set" do
|
|
61
|
-
ThinkingSphinx.database_adapter = nil
|
|
62
|
-
ThinkingSphinx::AbstractAdapter.stub!(:standard_adapter_for_model => :baz)
|
|
63
|
-
|
|
64
|
-
ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :baz
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "calls the lambda and returns it if one is provided" do
|
|
68
|
-
ThinkingSphinx.database_adapter = lambda { |model| :foo }
|
|
69
|
-
|
|
70
|
-
ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :foo
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
describe '.standard_adapter_for_model' do
|
|
75
|
-
let(:klass) { stub('connection class') }
|
|
76
|
-
let(:connection) { stub('connection', :class => klass) }
|
|
77
|
-
let(:model) { stub('model', :connection => connection) }
|
|
78
|
-
|
|
79
|
-
it "translates a normal MySQL adapter" do
|
|
80
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::MysqlAdapter')
|
|
81
|
-
|
|
82
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
83
|
-
should == :mysql
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "translates a MySQL plus adapter" do
|
|
87
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::MysqlplusAdapter')
|
|
88
|
-
|
|
89
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
90
|
-
should == :mysql
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "translates a MySQL2 adapter" do
|
|
94
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::Mysql2Adapter')
|
|
95
|
-
|
|
96
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
97
|
-
should == :mysql
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "translates a NullDB adapter to MySQL" do
|
|
101
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::NullDBAdapter')
|
|
102
|
-
|
|
103
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
104
|
-
should == :mysql
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "translates a normal PostgreSQL adapter" do
|
|
108
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter')
|
|
109
|
-
|
|
110
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
111
|
-
should == :postgresql
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "translates a JDBC MySQL adapter to MySQL" do
|
|
115
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
|
|
116
|
-
connection.stub(:config => {:adapter => 'jdbcmysql'})
|
|
117
|
-
|
|
118
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
119
|
-
should == :mysql
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "translates a JDBC PostgreSQL adapter to PostgreSQL" do
|
|
123
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
|
|
124
|
-
connection.stub(:config => {:adapter => 'jdbcpostgresql'})
|
|
125
|
-
|
|
126
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
127
|
-
should == :postgresql
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "translates a JDBC adapter with MySQL connection string to MySQL" do
|
|
131
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
|
|
132
|
-
connection.stub(:config => {:adapter => 'jdbc',
|
|
133
|
-
:url => 'jdbc:mysql://127.0.0.1:3306/sphinx'})
|
|
134
|
-
|
|
135
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
136
|
-
should == :mysql
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "translates a JDBC adapter with PostgresSQL connection string to PostgresSQL" do
|
|
140
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
|
|
141
|
-
connection.stub(:config => {:adapter => 'jdbc',
|
|
142
|
-
:url => 'jdbc:postgresql://127.0.0.1:3306/sphinx'})
|
|
143
|
-
|
|
144
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
145
|
-
should == :postgresql
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it "returns other JDBC adapters without translation" do
|
|
149
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
|
|
150
|
-
connection.stub(:config => {:adapter => 'jdbcmssql'})
|
|
151
|
-
|
|
152
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
153
|
-
should == :jdbcmssql
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it "returns other unknown adapters without translation" do
|
|
157
|
-
klass.stub(:name => 'ActiveRecord::ConnectionAdapters::FooAdapter')
|
|
158
|
-
|
|
159
|
-
ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
|
|
160
|
-
should == 'ActiveRecord::ConnectionAdapters::FooAdapter'
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
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
|