sunspot-rails-failover 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,34 +1 @@
1
- require 'sunspot'
2
- require 'sunspot-rails-failover/master_slave_with_failover_session_proxy'
3
- require 'sunspot-rails-failover/exception_handler_adapter'
4
-
5
- module Sunspot
6
- module Rails
7
- module Failover
8
- class << self
9
- attr_accessor :exception_handler
10
-
11
- def setup
12
- Sunspot.session = if Sunspot::Rails.configuration.has_master?
13
- Sunspot::SessionProxy::MasterSlaveWithFailoverSessionProxy.new(
14
- SessionProxy::ThreadLocalSessionProxy.new(master_config),
15
- SessionProxy::ThreadLocalSessionProxy.new(slave_config)
16
- )
17
- else
18
- Sunspot::SessionProxy::ThreadLocalSessionProxy.new(slave_config)
19
- end
20
- end
21
-
22
- private
23
-
24
- def slave_config
25
- Sunspot::Rails.send :slave_config, Sunspot::Rails.configuration
26
- end
27
-
28
- def master_config
29
- Sunspot::Rails.send :master_config, Sunspot::Rails.configuration
30
- end
31
- end
32
- end
33
- end
34
- end
1
+ require 'sunspot/rails/failover'
@@ -0,0 +1,34 @@
1
+ require 'sunspot'
2
+ require 'sunspot/session_proxy/master_slave_with_failover_session_proxy'
3
+ require 'sunspot/rails/failover/exception_handler_adapter'
4
+
5
+ module Sunspot
6
+ module Rails
7
+ module Failover
8
+ class << self
9
+ attr_accessor :exception_handler
10
+
11
+ def setup
12
+ Sunspot.session = if Rails.configuration.has_master?
13
+ SessionProxy::MasterSlaveWithFailoverSessionProxy.new(
14
+ SessionProxy::ThreadLocalSessionProxy.new(master_config),
15
+ SessionProxy::ThreadLocalSessionProxy.new(slave_config)
16
+ )
17
+ else
18
+ SessionProxy::ThreadLocalSessionProxy.new(slave_config)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def slave_config
25
+ Rails.send :slave_config, Rails.configuration
26
+ end
27
+
28
+ def master_config
29
+ Rails.send :master_config, Rails.configuration
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  module Sunspot
2
2
  module Rails
3
3
  module Failover
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,6 @@
1
1
  module Sunspot
2
2
  module SessionProxy
3
- class MasterSlaveWithFailoverSessionProxy < MasterSlaveSessionProxy
4
-
3
+ class MasterSlaveWithFailoverSessionProxy < MasterSlaveSessionProxy
5
4
  attr_accessor :exception
6
5
 
7
6
  def commit
@@ -21,7 +20,7 @@ module Sunspot
21
20
  def with_exception_handling
22
21
  yield
23
22
  rescue Exception => exception
24
- Sunspot::Rails::Failover::ExceptionHandlerAdapter.handle(exception)
23
+ Rails::Failover::ExceptionHandlerAdapter.handle(exception)
25
24
  self.exception = exception
26
25
  false
27
26
  end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ require 'hoptoad_notifier'
4
+
5
+ shared_examples_for 'a hoptoad handler' do
6
+ it 'uses the api' do
7
+ HoptoadNotifier.should_receive(:notify).with(exception)
8
+ described_class.handle(exception)
9
+ end
10
+ end
11
+
12
+ module Sunspot
13
+ module Rails
14
+ module Failover
15
+ describe ExceptionHandlerAdapter do
16
+ describe '.handle' do
17
+ let(:exception) { Exception.new }
18
+
19
+ context 'with exception_handler not set (default)' do
20
+ it_should_behave_like 'a hoptoad handler'
21
+ end
22
+
23
+ context 'with exception_handler set to :hoptoad' do
24
+ before { Failover.exception_handler = :hoptoad }
25
+ it_should_behave_like 'a hoptoad handler'
26
+ end
27
+
28
+ context 'with exception_handler set to a custom class' do
29
+ before { Failover.exception_handler = MyExceptionHandler }
30
+
31
+ it 'passes the exception to #handle' do
32
+ MyExceptionHandler.should_receive(:handle).with(exception)
33
+ described_class.handle(exception)
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ module Sunspot
4
+ module Rails
5
+ describe Failover do
6
+ describe '.setup' do
7
+ let(:configuration) { double('configuration') }
8
+ let(:slave_config) { double('slave_config') }
9
+ let(:master_config) { double('master_config') }
10
+
11
+ before do
12
+ Rails.stub(:configuration).and_return(configuration)
13
+ Rails.stub(:slave_config).and_return(slave_config)
14
+ Rails.stub(:master_config).and_return(master_config)
15
+ end
16
+
17
+ context 'with a master configuration' do
18
+ before do
19
+ configuration.should_receive(:has_master?).and_return(true)
20
+ end
21
+
22
+ let(:proxy) { double('master_slave_failover_proxy') }
23
+ let(:master_session) { double('master_session') }
24
+ let(:slave_session) { double('slave_session') }
25
+
26
+ it 'sets the session to master/slave with failover support' do
27
+ SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(master_config).and_return(master_session)
28
+ SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(slave_config).and_return(slave_session)
29
+
30
+ SessionProxy::MasterSlaveWithFailoverSessionProxy.should_receive(:new).with(
31
+ master_session, slave_session
32
+ ).and_return(proxy)
33
+
34
+ described_class.setup
35
+ Sunspot.session.should eq(proxy)
36
+ end
37
+ end
38
+
39
+ context 'with no master configuration' do
40
+ before do
41
+ configuration.should_receive(:has_master?).and_return(false)
42
+ end
43
+
44
+ let(:proxy) { double('thread_local_proxy') }
45
+
46
+ it 'sets the session to the default proxy' do
47
+ SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(slave_config).and_return(proxy)
48
+
49
+ described_class.setup
50
+ Sunspot.session.should eq(proxy)
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ module Sunspot
4
+ module SessionProxy
5
+ describe MasterSlaveWithFailoverSessionProxy do
6
+ let(:master) { Session.new }
7
+ let(:slave) { Session.new }
8
+ let(:proxy) { SessionProxy::MasterSlaveWithFailoverSessionProxy.new(master, slave) }
9
+
10
+ let(:exception_handler_adapter) { Rails::Failover::ExceptionHandlerAdapter }
11
+
12
+ describe '#commit' do
13
+ context 'with no error' do
14
+ it 'calls on the master session' do
15
+ master.should_receive(:commit)
16
+ proxy.commit
17
+ end
18
+ end
19
+
20
+ context 'with an error' do
21
+ it 'passes the exception to the exception handler adapter' do
22
+ exception = Exception.new
23
+ exception_handler_adapter.should_receive(:handle).with(exception)
24
+ master.should_receive(:commit).and_raise(exception)
25
+ proxy.commit
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#search' do
31
+ context 'with no error' do
32
+ it 'calls on the slave session' do
33
+ slave.should_receive(:search).and_return(true)
34
+ master.should_not_receive(:search)
35
+ proxy.search
36
+ end
37
+ end
38
+
39
+ context 'with an error on the slave session' do
40
+ it 'calls on the master session' do
41
+ exception = Exception.new
42
+ slave.should_receive(:search).and_raise(exception)
43
+ exception_handler_adapter.should_receive(:handle).with(exception)
44
+ master.should_receive(:search).and_return(true)
45
+ proxy.search
46
+ end
47
+ end
48
+
49
+ context 'with an error on the slave and master sessions' do
50
+ it 'raises the error with no handling' do
51
+ exception = Exception.new
52
+ slave.should_receive(:search).and_raise(exception)
53
+ master.should_receive(:search).and_raise(exception)
54
+ exception_handler_adapter.should_receive(:handle).with(exception).twice
55
+ proxy.should_receive(:raise).with(exception)
56
+ proxy.search
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path('../lib', __FILE__)
3
- require 'sunspot-rails-failover/version'
3
+ require 'sunspot/rails/failover/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'sunspot-rails-failover'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sunspot-rails-failover
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Justin Ko
@@ -62,13 +62,14 @@ files:
62
62
  - README.md
63
63
  - Rakefile
64
64
  - lib/sunspot-rails-failover.rb
65
- - lib/sunspot-rails-failover/exception_handler_adapter.rb
66
- - lib/sunspot-rails-failover/master_slave_with_failover_session_proxy.rb
67
- - lib/sunspot-rails-failover/version.rb
65
+ - lib/sunspot/rails/failover.rb
66
+ - lib/sunspot/rails/failover/exception_handler_adapter.rb
67
+ - lib/sunspot/rails/failover/version.rb
68
+ - lib/sunspot/session_proxy/master_slave_with_failover_session_proxy.rb
68
69
  - spec/spec_helper.rb
69
- - spec/sunspot-rails-failover/exception_handler_adapter_spec.rb
70
- - spec/sunspot-rails-failover/master_slave_with_failover_session_proxy_spec.rb
71
- - spec/sunspot-rails-failover_spec.rb
70
+ - spec/sunspot/rails/failover/exception_handler_adapter_spec.rb
71
+ - spec/sunspot/rails/failover_spec.rb
72
+ - spec/sunspot/session_proxy/master_slave_with_failover_session_proxy_spec.rb
72
73
  - spec/support/my_exception_handler.rb
73
74
  - sunspot-rails-failover.gemspec
74
75
  has_rdoc: true
@@ -101,7 +102,7 @@ specification_version: 3
101
102
  summary: If the Sunspot slave session goes down, reads *and* writes are called upon the master session
102
103
  test_files:
103
104
  - spec/spec_helper.rb
104
- - spec/sunspot-rails-failover/exception_handler_adapter_spec.rb
105
- - spec/sunspot-rails-failover/master_slave_with_failover_session_proxy_spec.rb
106
- - spec/sunspot-rails-failover_spec.rb
105
+ - spec/sunspot/rails/failover/exception_handler_adapter_spec.rb
106
+ - spec/sunspot/rails/failover_spec.rb
107
+ - spec/sunspot/session_proxy/master_slave_with_failover_session_proxy_spec.rb
107
108
  - spec/support/my_exception_handler.rb
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'hoptoad_notifier'
4
-
5
- shared_examples_for 'a hoptoad handler' do
6
- it 'uses the api' do
7
- HoptoadNotifier.should_receive(:notify).with(exception)
8
- described_class.handle(exception)
9
- end
10
- end
11
-
12
- describe Sunspot::Rails::Failover::ExceptionHandlerAdapter do
13
- describe '.handle' do
14
- let(:exception) { Exception.new }
15
-
16
- context 'with exception_handler not set (default)' do
17
- it_should_behave_like 'a hoptoad handler'
18
- end
19
-
20
- context 'with exception_handler set to :hoptoad' do
21
- before { Sunspot::Rails::Failover.exception_handler = :hoptoad }
22
- it_should_behave_like 'a hoptoad handler'
23
- end
24
-
25
- context 'with exception_handler set to a custom class' do
26
- before { Sunspot::Rails::Failover.exception_handler = MyExceptionHandler }
27
-
28
- it 'passes the exception to #handle' do
29
- MyExceptionHandler.should_receive(:handle).with(exception)
30
- described_class.handle(exception)
31
- end
32
- end
33
- end
34
- end
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sunspot::SessionProxy::MasterSlaveWithFailoverSessionProxy do
4
- let(:master) { Sunspot::Session.new }
5
- let(:slave) { Sunspot::Session.new }
6
- let(:proxy) { Sunspot::SessionProxy::MasterSlaveWithFailoverSessionProxy.new(master, slave) }
7
-
8
- let(:exception_handler_adapter) { Sunspot::Rails::Failover::ExceptionHandlerAdapter }
9
-
10
- describe '#commit' do
11
- context 'with no error' do
12
- it 'calls on the master session' do
13
- master.should_receive(:commit)
14
- proxy.commit
15
- end
16
- end
17
-
18
- context 'with an error' do
19
- it 'passes the exception to the exception handler adapter' do
20
- exception = Exception.new
21
- exception_handler_adapter.should_receive(:handle).with(exception)
22
- master.should_receive(:commit).and_raise(exception)
23
- proxy.commit
24
- end
25
- end
26
- end
27
-
28
- describe '#search' do
29
- context 'with no error' do
30
- it 'calls on the slave session' do
31
- slave.should_receive(:search).and_return(true)
32
- master.should_not_receive(:search)
33
- proxy.search
34
- end
35
- end
36
-
37
- context 'with an error on the slave session' do
38
- it 'calls on the master session' do
39
- exception = Exception.new
40
- slave.should_receive(:search).and_raise(exception)
41
- exception_handler_adapter.should_receive(:handle).with(exception)
42
- master.should_receive(:search).and_return(true)
43
- proxy.search
44
- end
45
- end
46
-
47
- context 'with an error on the slave and master sessions' do
48
- it 'raises the error with no handling' do
49
- exception = Exception.new
50
- slave.should_receive(:search).and_raise(exception)
51
- master.should_receive(:search).and_raise(exception)
52
- exception_handler_adapter.should_receive(:handle).with(exception).twice
53
- proxy.should_receive(:raise).with(exception)
54
- proxy.search
55
- end
56
- end
57
- end
58
-
59
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sunspot::Rails::Failover do
4
- describe '.setup' do
5
- let(:configuration) { double('configuration') }
6
- let(:slave_config) { double('slave_config') }
7
- let(:master_config) { double('master_config') }
8
-
9
- before do
10
- Sunspot::Rails.stub(:configuration).and_return(configuration)
11
- Sunspot::Rails.stub(:slave_config).and_return(slave_config)
12
- Sunspot::Rails.stub(:master_config).and_return(master_config)
13
- end
14
-
15
- context 'with a master configuration' do
16
- before do
17
- configuration.should_receive(:has_master?).and_return(true)
18
- end
19
-
20
- let(:proxy) { double('master_slave_failover_proxy') }
21
- let(:master_session) { double('master_session') }
22
- let(:slave_session) { double('slave_session') }
23
-
24
- it 'sets the session to master/slave with failover support' do
25
- Sunspot::SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(master_config).and_return(master_session)
26
- Sunspot::SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(slave_config).and_return(slave_session)
27
-
28
- Sunspot::SessionProxy::MasterSlaveWithFailoverSessionProxy.should_receive(:new).with(
29
- master_session, slave_session
30
- ).and_return(proxy)
31
-
32
- described_class.setup
33
- Sunspot.session.should eq(proxy)
34
- end
35
- end
36
-
37
- context 'with no master configuration' do
38
- before do
39
- configuration.should_receive(:has_master?).and_return(false)
40
- end
41
-
42
- let(:proxy) { double('thread_local_proxy') }
43
-
44
- it 'sets the session to the default proxy' do
45
- Sunspot::SessionProxy::ThreadLocalSessionProxy.should_receive(:new).with(slave_config).and_return(proxy)
46
-
47
- described_class.setup
48
- Sunspot.session.should eq(proxy)
49
- end
50
- end
51
-
52
- end
53
- end