octoshark 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a42c9187a7bf3516c5462a53b9d66b66571ddce
4
- data.tar.gz: 6b5a5c331d7f899972277a4badba921b26adf61b
3
+ metadata.gz: edbe9d237528071174741f9625af2b2f752ebb3f
4
+ data.tar.gz: a0f0081430d9987ceaa43f375526cab9acec3817
5
5
  SHA512:
6
- metadata.gz: 9916b8edd7ebb3a0c906f7a71434881fcf41ba9f8e483bb389bfdd07dec5b60d96e278ca10a31d6fe223de9c845c9ecae1bb25701ba9814a484d0d4fe5ecd41d
7
- data.tar.gz: a7e6be40e45b850c0f73933d372bb64a6ffcc2ea6ab74271375f379beb7732300abc1a855f8d508cb21685324b521e7c3bd435a4bc849e9abbe74cae1529a193
6
+ metadata.gz: 01b1279e3d8036eed43a2ef8f780fe5ec13281d424f1202ea2a3d3857cea5a9a826a508a10d35603082fef1b9304883d7a12a801d41e2663bce639cd721ffe37
7
+ data.tar.gz: 5050e8c20e16acae21138f85cea4cc033500f27f6fba0c4c1c57d85ff20c08a10a233bbcd6517c3592752ed1895250e9c7113ff35ad84e07ae1bfb1feb188dd2
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Octoshark
4
4
 
5
- Octoshark is a simple ActiveRecord connection switcher. It provides a general purpose connection switching that can be used in a multi-database systems such as sharded environments in your Rails application. It **does not** monkey-patch any `ActiveRecord::Base` methods and requires to specify which ActiveRecord models will use the Octoshark connection.
5
+ Octoshark is a simple ActiveRecord connection switcher. It provides a general purpose connection switching mechanism that can be used in sharding and master-slave multi-database environments. It's up to you to specify how ActiveRecord models will use the Octoshark connections, see below for example scenarios.
6
6
 
7
7
 
8
8
  ## Installation
@@ -56,7 +56,11 @@ Octoshark.with_connection(:db1) do
56
56
  end
57
57
  ```
58
58
 
59
- Octoshark connection is changed for the duration of that block and then reversed back to the previous connection. Multiple connection switch blocks can be nested:
59
+ Octoshark connection is changed for the duration of the block and then reversed back to the previous connection.
60
+
61
+ `Octoshark.current_connection` returns the active connection while in `with_connection` block, and outside it raises `Octoshark::NoCurrentConnectionError` error.
62
+
63
+ Multiple connection switch blocks can be nested:
60
64
 
61
65
  ```ruby
62
66
  Octoshark.with_connection(:db1) do
@@ -89,6 +93,32 @@ end
89
93
  Similarly, in all other application entry-points that start with the default ActiveRecord connection (background jobs for an example), we need to switch the shard connection and then proceed.
90
94
 
91
95
 
96
+ ## Master-Slave Example
97
+
98
+ When we want to do something in the slave database with all ActiveRecord models, then we need to add Octoshark's current or default connection to all models, either by overriding `ActiveRecord:Base.connection` or using a module that we include in all models.
99
+
100
+ ```ruby
101
+ class ActiveRecord::Base
102
+ def self.connection
103
+ Octoshark.current_or_default_connection
104
+ end
105
+ end
106
+ ```
107
+
108
+ Here we use `Octoshark.current_or_default_connection` method which returns the current connection while in `with_connection` block and fallback to the default connection when outside.
109
+
110
+
111
+ ## Octoshark.reload!
112
+
113
+ While Octoshark tries hard to avoid any **monkey-patching** of `ActiveRecord`, there is a single patch it applies so that end-user does not have to do it manually. Basically, whenever ActiveRecord::Base establishes a new database connection, `Octoshark.reload!` needs to be called. This is necessary for Octoshark to disconnect old connection pools and set new ones, otherwise `ActiveRecord::ConnectionNotEstablished` will be raised.
114
+
115
+ Few examples where database connections are re-established:
116
+
117
+ * Unicorn before/after fork
118
+ * Spring prefork/serve
119
+ * Some rake tasks like `rake db:test:prepare`
120
+
121
+
92
122
  ## Database Cleaner
93
123
 
94
124
  Here's an example how to clean default and shard databases using both default connection and Octoshark connections:
@@ -119,7 +149,6 @@ def clean_database_with
119
149
  end
120
150
  ```
121
151
 
122
-
123
152
  ## Contributing
124
153
 
125
154
  1. Fork it ( http://github.com/dalibor/octoshark/fork )
@@ -1,5 +1,6 @@
1
- require "octoshark/version"
1
+ require 'octoshark/version'
2
2
  require 'active_record'
3
+ require 'octoshark/active_record_extensions'
3
4
 
4
5
  module Octoshark
5
6
  autoload :ConnectionSwitcher, 'octoshark/connection_switcher'
@@ -11,24 +12,41 @@ module Octoshark
11
12
  OCTOSHARK = :octoshark
12
13
 
13
14
  class << self
14
- delegate :current_connection, :with_connection, :connection,
15
- :connection_pools, :find_connection_pool, to: :switcher
16
- end
15
+ delegate :current_connection, :with_connection,
16
+ :connection, :current_or_default_connection,
17
+ :connection_pools, :find_connection_pool,
18
+ :disconnect!, to: :switcher
17
19
 
18
- def self.setup(configs)
19
- @switcher = ConnectionSwitcher.new(configs)
20
- end
20
+ def setup(configs)
21
+ @configs = configs
22
+ @switcher = ConnectionSwitcher.new(configs)
23
+ end
21
24
 
22
- def self.reset!
23
- @switcher = nil
24
- Thread.current[OCTOSHARK] = nil
25
- end
25
+ def reset!
26
+ return unless enabled?
27
+ disconnect!
28
+ @confings = nil
29
+ @switcher = nil
30
+ Thread.current[OCTOSHARK] = nil
31
+ end
32
+
33
+ def reload!
34
+ raise_not_configured_error unless @configs
35
+ disconnect!
36
+ @switcher = ConnectionSwitcher.new(@configs)
37
+ end
38
+
39
+ def enabled?
40
+ !@switcher.nil?
41
+ end
42
+
43
+ def switcher
44
+ @switcher || raise_not_configured_error
45
+ end
26
46
 
27
- def self.switcher
28
- if @switcher
29
- @switcher
30
- else
31
- raise NotConfiguredError, "Octoshark is not setup. Setup connections with Octoshark.setup(configs)"
47
+ private
48
+ def raise_not_configured_error
49
+ raise NotConfiguredError, "Octoshark is not setup"
32
50
  end
33
51
  end
34
52
  end
@@ -0,0 +1,20 @@
1
+ module Octoshark
2
+ module ActiveRecordExtensions
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ class << self
7
+ alias_method_chain :establish_connection, :octoshark
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ def establish_connection_with_octoshark(*args)
13
+ establish_connection_without_octoshark(*args)
14
+ Octoshark.reload! if Octoshark.enabled?
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ ActiveRecord::Base.send(:include, Octoshark::ActiveRecordExtensions)
@@ -16,11 +16,11 @@ module Octoshark
16
16
  end
17
17
 
18
18
  def current_connection
19
- Thread.current[OCTOSHARK] || raise(NoCurrentConnectionError, "No current connection.")
19
+ Thread.current[OCTOSHARK] || raise(NoCurrentConnectionError, "No current connection")
20
20
  end
21
21
 
22
- def connection(name)
23
- Thread.current[OCTOSHARK] = find_connection_pool(name).connection
22
+ def current_or_default_connection
23
+ Thread.current[OCTOSHARK] || @default_pool.connection
24
24
  end
25
25
 
26
26
  def with_connection(name, &block)
@@ -40,12 +40,12 @@ module Octoshark
40
40
  end
41
41
 
42
42
  def find_connection_pool(name, &block)
43
- connection_pool = @connection_pools[name]
43
+ @connection_pools[name] || raise(NoConnectionError, "No such database connection '#{name}'")
44
+ end
44
45
 
45
- if connection_pool
46
- connection_pool
47
- else
48
- raise NoConnectionError, "No such database connection '#{name}'"
46
+ def disconnect!
47
+ @connection_pools.values.each do |connection_pool|
48
+ connection_pool.disconnect!
49
49
  end
50
50
  end
51
51
  end
@@ -1,3 +1,3 @@
1
1
  module Octoshark
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["dalibor.nasevic@gmail.com"]
11
11
  spec.summary = %q{Octoshark is an ActiveRecord connection switcher}
12
12
  spec.description = %q{Octoshark is a library for switching between multiple ActiveRecord connections}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/dalibor/octoshark"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_runtime_dependency "activerecord", ">= 4.0"
21
+ spec.add_runtime_dependency "activerecord", ">= 3.0"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.5"
24
24
  spec.add_development_dependency "rake"
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Octoshark::ActiveRecordExtensions do
4
+
5
+ it "reloads Octoshark when re-establishing new connection" do
6
+ Octoshark.setup(configs)
7
+ spec = ActiveRecord::Base.remove_connection
8
+
9
+ expect { Octoshark.with_connection(:default) {} }.to raise_error(ActiveRecord::ConnectionNotEstablished)
10
+ expect { Octoshark.with_connection(:db1) {} }.not_to raise_error
11
+
12
+ ActiveRecord::Base.establish_connection(spec)
13
+
14
+ expect { Octoshark.with_connection(:default) {} }.not_to raise_error
15
+ expect { Octoshark.with_connection(:db1) {} }.not_to raise_error
16
+ end
17
+ end
@@ -1,15 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Octoshark::ConnectionSwitcher do
4
- let(:config) { {
5
- db1: { adapter: "sqlite3", database: "tmp/db1.sqlite" },
6
- db2: { adapter: "sqlite3", database: "tmp/db2.sqlite" }
7
- } }
8
-
9
- def current_database_name(connection)
10
- connection.execute('PRAGMA database_list').first['file'].split('/').last
11
- end
12
-
13
4
  describe "#initialize" do
14
5
  it "can initialize connection switcher with default connection" do
15
6
  switcher = Octoshark::ConnectionSwitcher.new
@@ -20,7 +11,7 @@ describe Octoshark::ConnectionSwitcher do
20
11
  end
21
12
 
22
13
  it "can initialize connection switcher with custom connections" do
23
- switcher = Octoshark::ConnectionSwitcher.new(config)
14
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
24
15
 
25
16
  expect(switcher.connection_pools.length).to eq(3)
26
17
  expect(switcher.connection_pools[:default]).to be_an_instance_of(ActiveRecord::ConnectionAdapters::ConnectionPool)
@@ -30,10 +21,10 @@ describe Octoshark::ConnectionSwitcher do
30
21
 
31
22
  describe "#current_connection" do
32
23
  it "returns last used connection as current one" do
33
- switcher = Octoshark::ConnectionSwitcher.new(config)
34
- connection = switcher.connection(:db1)
35
-
36
- expect(switcher.current_connection).to eq(connection)
24
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
25
+ switcher.with_connection(:db1) do |connection|
26
+ expect(switcher.current_connection).to eq(connection)
27
+ end
37
28
  end
38
29
 
39
30
  it "raises error when no current connection" do
@@ -41,12 +32,27 @@ describe Octoshark::ConnectionSwitcher do
41
32
 
42
33
  expect { switcher.current_connection }.to raise_error(Octoshark::NoCurrentConnectionError)
43
34
  end
35
+ end
44
36
 
37
+ describe "#current_or_default_connection" do
38
+ it "returns current connection" do
39
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
40
+ switcher.with_connection(:db1) do |connection|
41
+ expect(switcher.current_or_default_connection).to eq(connection)
42
+ end
43
+ end
44
+
45
+ it "returns default connection when no current connection" do
46
+ switcher = Octoshark::ConnectionSwitcher.new
47
+ connection = switcher.find_connection_pool(:default).connection
48
+
49
+ expect(switcher.current_or_default_connection).to eq(connection)
50
+ end
45
51
  end
46
52
 
47
53
  describe '#find_connection_pool' do
48
54
  it "can find connection pool by name" do
49
- switcher = Octoshark::ConnectionSwitcher.new(config)
55
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
50
56
  expect(switcher.find_connection_pool(:db1)).to be_an_instance_of(ActiveRecord::ConnectionAdapters::ConnectionPool)
51
57
  end
52
58
 
@@ -56,56 +62,42 @@ describe Octoshark::ConnectionSwitcher do
56
62
  end
57
63
  end
58
64
 
59
- describe "#connection" do
60
- it "returns useful connection from the pool" do
61
- switcher = Octoshark::ConnectionSwitcher.new(config)
62
- connection = switcher.connection(:db1)
63
- expect(current_database_name(connection)).to eq("db1.sqlite")
64
- end
65
-
66
- it "raises Octoshark::NoConnectionError" do
67
- switcher = Octoshark::ConnectionSwitcher.new({})
68
-
69
- expect { switcher.connection(:invalid) }.to raise_error(Octoshark::NoConnectionError)
70
- end
71
- end
72
-
73
65
  describe '#with_connection' do
74
66
  it "can select default connection" do
75
67
  switcher = Octoshark::ConnectionSwitcher.new({})
76
68
 
77
69
  switcher.with_connection(:default) do |connection|
78
- expect(current_database_name(switcher.current_connection)).to eq("default.sqlite")
70
+ expect(db(switcher.current_connection)).to eq("default")
79
71
  end
80
72
  end
81
73
 
82
74
  it "can use multiple connections" do
83
- switcher = Octoshark::ConnectionSwitcher.new(config)
75
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
84
76
 
85
77
  switcher.with_connection(:default) do |connection|
86
- expect(current_database_name(switcher.current_connection)).to eq("default.sqlite")
78
+ expect(db(switcher.current_connection)).to eq("default")
87
79
  end
88
80
 
89
81
  switcher.with_connection(:db1) do |connection|
90
- expect(current_database_name(switcher.current_connection)).to eq("db1.sqlite")
82
+ expect(db(switcher.current_connection)).to eq("db1")
91
83
  end
92
84
 
93
85
  switcher.with_connection(:db2) do |connection|
94
- expect(current_database_name(switcher.current_connection)).to eq("db2.sqlite")
86
+ expect(db(switcher.current_connection)).to eq("db2")
95
87
  end
96
88
  end
97
89
 
98
90
  it "can nest connection" do
99
- switcher = Octoshark::ConnectionSwitcher.new(config)
91
+ switcher = Octoshark::ConnectionSwitcher.new(configs)
100
92
 
101
93
  switcher.with_connection(:db1) do |connection|
102
- expect(current_database_name(switcher.current_connection)).to eq("db1.sqlite")
94
+ expect(db(switcher.current_connection)).to eq("db1")
103
95
 
104
96
  switcher.with_connection(:db2) do |connection|
105
- expect(current_database_name(switcher.current_connection)).to eq("db2.sqlite")
97
+ expect(db(switcher.current_connection)).to eq("db2")
106
98
  end
107
99
 
108
- expect(current_database_name(switcher.current_connection)).to eq("db1.sqlite")
100
+ expect(db(switcher.current_connection)).to eq("db1")
109
101
  end
110
102
  end
111
103
 
@@ -115,4 +107,17 @@ describe Octoshark::ConnectionSwitcher do
115
107
  expect { switcher.with_connection(:invalid) }.to raise_error(Octoshark::NoConnectionError)
116
108
  end
117
109
  end
110
+
111
+ describe "#disconnect!" do
112
+ it "removes all connections from connection pools" do
113
+ switcher = Octoshark::ConnectionSwitcher.new({})
114
+
115
+ switcher.with_connection(:default) { |connection| connection.execute("SELECT 1") }
116
+ expect(switcher.find_connection_pool(:default)).to be_connected
117
+
118
+ switcher.disconnect!
119
+
120
+ expect(switcher.find_connection_pool(:default)).to_not be_connected
121
+ end
122
+ end
118
123
  end
@@ -2,26 +2,86 @@ require 'spec_helper'
2
2
 
3
3
  describe Octoshark do
4
4
 
5
- it "can setup Octoshark with default connection" do
6
- Octoshark.setup({})
7
- expect(Octoshark.switcher).to_not be_nil
5
+ describe ".setup" do
6
+ it "creates connection switcher" do
7
+ Octoshark.setup({})
8
+
9
+ expect(Octoshark.switcher).to_not be_nil
10
+ end
8
11
  end
9
12
 
10
- it "raises NotConfiguredError exception when not configured" do
11
- Octoshark.setup({})
12
- Octoshark.reset!
13
- expect { Octoshark.switcher }.to raise_error(Octoshark::NotConfiguredError)
13
+ describe ".reset!" do
14
+ it "removes connection switcher" do
15
+ Octoshark.setup({})
16
+ Octoshark.reset!
17
+
18
+ expect { Octoshark.switcher }.to raise_error(Octoshark::NotConfiguredError)
19
+ end
20
+
21
+ it "cleans octoshark thread key" do
22
+ Octoshark.setup({})
23
+ Octoshark.reset!
24
+
25
+ expect(Thread.current[Octoshark::OCTOSHARK]).to be_nil
26
+ end
27
+
28
+ it "cleans old connections" do
29
+ check_connections_clean_up { Octoshark.reset! }
30
+ end
31
+ end
32
+
33
+ describe ".reload!" do
34
+ it "replaces connection switcher" do
35
+ Octoshark.setup({})
36
+ switcher = Octoshark.switcher
37
+
38
+ Octoshark.reload!
39
+
40
+ expect(Octoshark.switcher).to_not be_nil
41
+ expect(Octoshark.switcher).to_not eq(switcher)
42
+ end
43
+
44
+ it "clears old switcher connections" do
45
+ check_connections_clean_up { Octoshark.reload! }
46
+ end
47
+ end
48
+
49
+ describe ".enabled?" do
50
+ it "is not enabled by default" do
51
+ expect(Octoshark.enabled?).to be_falsey
52
+ end
53
+
54
+ it "is enabled when it's setup" do
55
+ Octoshark.setup({})
56
+
57
+ expect(Octoshark.enabled?).to be_truthy
58
+ end
59
+ end
60
+
61
+ describe ".switcher" do
62
+ it "returns connection switcher" do
63
+ Octoshark.setup({})
64
+
65
+ expect(Octoshark.switcher).to be_an_instance_of(Octoshark::ConnectionSwitcher)
66
+ end
67
+
68
+ it "raises 'NotConfiguredError' error if not setup" do
69
+ expect { Octoshark.switcher }.to raise_error(Octoshark::NotConfiguredError)
70
+ end
14
71
  end
15
72
 
16
73
  [
17
- :current_connection, :with_connection, :connection,
74
+ :current_connection, :with_connection,
75
+ :connection, :current_or_default_connection,
18
76
  :connection_pools, :find_connection_pool
19
77
  ].each do |method_name|
20
- it "delegates #{method_name} to connection switcher" do
21
- Octoshark.setup({})
22
- expect(Octoshark.switcher).to receive(method_name)
78
+ describe ".#{method_name}" do
79
+ it "delegates #{method_name} to connection switcher" do
80
+ Octoshark.setup({})
81
+ expect(Octoshark.switcher).to receive(method_name)
23
82
 
24
- Octoshark.send(method_name)
83
+ Octoshark.send(method_name)
84
+ end
25
85
  end
26
86
  end
27
87
  end
@@ -1,8 +1,16 @@
1
1
  require 'octoshark'
2
2
 
3
+
4
+ # Load support files
5
+ ROOT = File.expand_path('../', File.dirname(__FILE__))
6
+ Dir["#{ROOT}/spec/support/**/*.rb"].each { |f| require f }
7
+
8
+
3
9
  RSpec.configure do |config|
10
+ config.include Helpers
11
+
4
12
  config.before :each do
5
- ActiveRecord::Base.establish_connection(YAML.load(File.read('spec/config/database.yml')))
13
+ ActiveRecord::Base.establish_connection({adapter: 'sqlite3', database: 'tmp/default.sqlite'})
6
14
  Octoshark.reset!
7
15
  end
8
16
  end
@@ -0,0 +1,28 @@
1
+ module Helpers
2
+
3
+ def configs
4
+ {
5
+ db1: { adapter: "sqlite3", database: "tmp/db1.sqlite" },
6
+ db2: { adapter: "sqlite3", database: "tmp/db2.sqlite" }
7
+ }
8
+ end
9
+
10
+ def db(connection)
11
+ connection.execute('PRAGMA database_list').
12
+ first['file'].
13
+ split('/').last.
14
+ split('.').first
15
+ end
16
+
17
+ def check_connections_clean_up
18
+ Octoshark.setup({})
19
+ switcher = Octoshark.switcher
20
+
21
+ Octoshark.with_connection(:default) { |connection| connection.execute("SELECT 1") }
22
+ expect(switcher.connection_pools.map { |_, c| c.connections.count }.sum).to eq(1)
23
+
24
+ yield
25
+
26
+ expect(switcher.connection_pools.map { |_, c| c.connections.count }.sum).to eq(0)
27
+ end
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octoshark
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dalibor Nasevic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-17 00:00:00.000000000 Z
11
+ date: 2014-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -95,14 +95,16 @@ files:
95
95
  - README.md
96
96
  - Rakefile
97
97
  - lib/octoshark.rb
98
+ - lib/octoshark/active_record_extensions.rb
98
99
  - lib/octoshark/connection_switcher.rb
99
100
  - lib/octoshark/version.rb
100
101
  - octoshark.gemspec
101
- - spec/config/database.yml
102
+ - spec/octoshark/active_record_extensions_spec.rb
102
103
  - spec/octoshark/connection_switcher_spec.rb
103
104
  - spec/octoshark_spec.rb
104
105
  - spec/spec_helper.rb
105
- homepage: ''
106
+ - spec/support/helpers.rb
107
+ homepage: https://github.com/dalibor/octoshark
106
108
  licenses:
107
109
  - MIT
108
110
  metadata: {}
@@ -127,8 +129,9 @@ signing_key:
127
129
  specification_version: 4
128
130
  summary: Octoshark is an ActiveRecord connection switcher
129
131
  test_files:
130
- - spec/config/database.yml
132
+ - spec/octoshark/active_record_extensions_spec.rb
131
133
  - spec/octoshark/connection_switcher_spec.rb
132
134
  - spec/octoshark_spec.rb
133
135
  - spec/spec_helper.rb
136
+ - spec/support/helpers.rb
134
137
  has_rdoc:
@@ -1,2 +0,0 @@
1
- adapter: sqlite3
2
- database: tmp/default.sqlite