flying-sphinx 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/LICENCE +1 -1
- data/Rakefile +27 -0
- data/VERSION +1 -1
- data/flying-sphinx.gemspec +38 -0
- data/lib/flying_sphinx.rb +0 -1
- data/lib/flying_sphinx/api.rb +65 -19
- data/lib/flying_sphinx/configuration.rb +61 -34
- data/lib/flying_sphinx/delayed_delta.rb +5 -1
- data/lib/flying_sphinx/index_request.rb +71 -28
- data/lib/flying_sphinx/rails.rb +5 -1
- data/lib/flying_sphinx/railtie.rb +5 -1
- data/lib/flying_sphinx/tasks.rb +12 -2
- data/lib/flying_sphinx/tunnel.rb +25 -16
- data/spec/spec_helper.rb +23 -0
- data/spec/specs/configuration_spec.rb +38 -0
- data/spec/{flying_sphinx → specs}/delayed_delta_spec.rb +0 -0
- data/spec/{flying_sphinx → specs}/flag_as_deleted_job_spec.rb +0 -0
- data/spec/specs/index_request_spec.rb +176 -0
- metadata +94 -121
- data/spec/flying_sphinx/configuration_spec.rb +0 -45
- data/spec/flying_sphinx/index_request_spec.rb +0 -122
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FlyingSphinx::Configuration do
|
4
|
-
describe '#initialize' do
|
5
|
-
let(:api_server) { 'https://flying-sphinx.com/heroku' }
|
6
|
-
let(:api_key) { 'foo-bar-baz' }
|
7
|
-
let(:identifier) { 'app@heroku.com' }
|
8
|
-
let(:encoded_identifier) {
|
9
|
-
FakeWeb::Utility.encode_unsafe_chars_in_userinfo identifier
|
10
|
-
}
|
11
|
-
|
12
|
-
before :each do
|
13
|
-
FakeWeb.register_uri(:get,
|
14
|
-
"#{api_server}/app?api_key=#{api_key}&identifier=#{encoded_identifier}",
|
15
|
-
:body => JSON.dump(
|
16
|
-
:server => 'foo.bar.com',
|
17
|
-
:port => 9319,
|
18
|
-
:database_port => 10001
|
19
|
-
)
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "requests details from the server with the given API key" do
|
24
|
-
FlyingSphinx::Configuration.new identifier, api_key
|
25
|
-
|
26
|
-
FakeWeb.should have_requested :get,
|
27
|
-
"#{api_server}/app?api_key=#{api_key}&identifier=#{encoded_identifier}"
|
28
|
-
end
|
29
|
-
|
30
|
-
it "sets the host from the server information" do
|
31
|
-
config = FlyingSphinx::Configuration.new identifier, api_key
|
32
|
-
config.host.should == 'foo.bar.com'
|
33
|
-
end
|
34
|
-
|
35
|
-
it "sets the port from the server information" do
|
36
|
-
config = FlyingSphinx::Configuration.new identifier, api_key
|
37
|
-
config.port.should == 9319
|
38
|
-
end
|
39
|
-
|
40
|
-
it "sets the port from the server information" do
|
41
|
-
config = FlyingSphinx::Configuration.new identifier, api_key
|
42
|
-
config.database_port.should == 10001
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,122 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FlyingSphinx::IndexRequest do
|
4
|
-
let(:api) { FlyingSphinx::API.new 'foo', 'bar' }
|
5
|
-
let(:configuration) {
|
6
|
-
stub(:configuration, :api => api, :sphinx_configuration => 'foo {}')
|
7
|
-
}
|
8
|
-
|
9
|
-
before :each do
|
10
|
-
FlyingSphinx::Configuration.stub!(:new => configuration)
|
11
|
-
FlyingSphinx::Tunnel.stub(:connect) { |config, block| block.call }
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.cancel_jobs' do
|
15
|
-
before :each do
|
16
|
-
Delayed::Job.stub!(:delete_all => true)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should not delete any rows if the delayed_jobs table does not exist" do
|
20
|
-
Delayed::Job.stub!(:table_exists? => false)
|
21
|
-
Delayed::Job.should_not_receive(:delete_all)
|
22
|
-
|
23
|
-
FlyingSphinx::IndexRequest.cancel_jobs
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should delete rows if the delayed_jobs table does exist" do
|
27
|
-
Delayed::Job.stub!(:table_exists? => true)
|
28
|
-
Delayed::Job.should_receive(:delete_all)
|
29
|
-
|
30
|
-
FlyingSphinx::IndexRequest.cancel_jobs
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should delete only Thinking Sphinx jobs" do
|
34
|
-
Delayed::Job.stub!(:table_exists? => true)
|
35
|
-
Delayed::Job.should_receive(:delete_all) do |sql|
|
36
|
-
sql.should match(/handler LIKE '--- !ruby\/object:FlyingSphinx::\%'/)
|
37
|
-
end
|
38
|
-
|
39
|
-
FlyingSphinx::IndexRequest.cancel_jobs
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#update_and_index' do
|
44
|
-
let(:index_request) { FlyingSphinx::IndexRequest.new }
|
45
|
-
let(:conf_params) { {:configuration => 'foo {}'} }
|
46
|
-
let(:index_params) { {:indices => ''} }
|
47
|
-
|
48
|
-
it "makes a new request" do
|
49
|
-
api.should_receive(:put).with('/app', conf_params).and_return('ok')
|
50
|
-
api.should_receive(:post).
|
51
|
-
with('/app/indices', index_params).and_return(42)
|
52
|
-
api.should_receive(:get).with('/app/indices/42').
|
53
|
-
and_return(stub(:response, :body => 'PENDING'))
|
54
|
-
|
55
|
-
begin
|
56
|
-
Timeout::timeout(0.2) {
|
57
|
-
index_request.update_and_index
|
58
|
-
}
|
59
|
-
rescue Timeout::Error
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should finish when the index request has been completed" do
|
64
|
-
api.should_receive(:put).with('/app', conf_params).and_return('ok')
|
65
|
-
api.should_receive(:post).
|
66
|
-
with('/app/indices', index_params).and_return(42)
|
67
|
-
api.should_receive(:get).with('/app/indices/42').
|
68
|
-
and_return(stub(:response, :body => 'FINISHED'))
|
69
|
-
|
70
|
-
index_request.update_and_index
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'delta request without delta support' do
|
74
|
-
it "should explain why the request failed" do
|
75
|
-
api.should_receive(:put).with('/app', conf_params).and_return('ok')
|
76
|
-
api.should_receive(:post).
|
77
|
-
with('/app/indices', index_params).and_return('BLOCKED')
|
78
|
-
index_request.should_receive(:puts).with('Your account does not support delta indexing. Upgrading plans is probably the best way around this.')
|
79
|
-
|
80
|
-
index_request.update_and_index
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe '#perform' do
|
86
|
-
let(:index_request) { FlyingSphinx::IndexRequest.new ['foo_delta'] }
|
87
|
-
let(:index_params) { {:indices => 'foo_delta'} }
|
88
|
-
|
89
|
-
it "makes a new request" do
|
90
|
-
api.should_receive(:post).
|
91
|
-
with('/app/indices', index_params).and_return(42)
|
92
|
-
api.should_receive(:get).with('/app/indices/42').
|
93
|
-
and_return(stub(:response, :body => 'PENDING'))
|
94
|
-
|
95
|
-
begin
|
96
|
-
Timeout::timeout(0.2) {
|
97
|
-
index_request.perform
|
98
|
-
}
|
99
|
-
rescue Timeout::Error
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should finish when the index request has been completed" do
|
104
|
-
api.should_receive(:post).
|
105
|
-
with('/app/indices', index_params).and_return(42)
|
106
|
-
api.should_receive(:get).with('/app/indices/42').
|
107
|
-
and_return(stub(:response, :body => 'FINISHED'))
|
108
|
-
|
109
|
-
index_request.perform
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "#display_name" do
|
114
|
-
let(:index_request) {
|
115
|
-
FlyingSphinx::IndexRequest.new ['foo_core', 'bar_core']
|
116
|
-
}
|
117
|
-
|
118
|
-
it "should display class name with all indexes" do
|
119
|
-
index_request.display_name.should == "FlyingSphinx::IndexRequest for foo_core, bar_core"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|