octoshark 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +5 -2
- data/Appraisals +0 -4
- data/README.md +7 -0
- data/Rakefile +34 -1
- data/lib/octoshark/active_record_extensions.rb +6 -2
- data/lib/octoshark/connection_manager.rb +10 -1
- data/lib/octoshark/version.rb +1 -1
- data/octoshark.gemspec +1 -0
- data/spec/octoshark/active_record_extensions_spec.rb +17 -0
- data/spec/octoshark/connection_manager_spec.rb +26 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/config.yml.template +21 -0
- data/spec/support/config.yml.travis +21 -0
- data/spec/support/helpers.rb +12 -4
- metadata +20 -3
- data/gemfiles/rails3.gemfile +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d10a2b8a447790535e9be0663c9d1acc6957d910
|
4
|
+
data.tar.gz: c39b418126b47da9297c24d6d13587262a7d5f49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78c66eeb430047ecc67499f8d3ad9d44a9eec1e2f7c88c889427c309286d99c1860c1a6c9d3a6815a95323db3993c485991370cd3e786cd3b1f9f3c8acd3095c
|
7
|
+
data.tar.gz: 91016b143ce9fa9179ac1376905df68d32dc4980989e31d2bed926641457d4f34d752ef5d6e267ded3d15f034e9e1697625b5522232e21fa45287e3a3995dd5e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -6,10 +6,13 @@ notifications:
|
|
6
6
|
email:
|
7
7
|
- dalibor.nasevic@gmail.com
|
8
8
|
gemfile:
|
9
|
-
- gemfiles/rails3.gemfile
|
10
9
|
- gemfiles/rails3.1.gemfile
|
11
10
|
- gemfiles/rails3.2.gemfile
|
12
11
|
- gemfiles/rails4.gemfile
|
13
12
|
- gemfiles/rails4.1.gemfile
|
14
13
|
- gemfiles/rails4.2.gemfile
|
15
|
-
|
14
|
+
before_script:
|
15
|
+
- cp spec/support/config.yml.travis spec/support/config.yml
|
16
|
+
- bundle exec rake db:create
|
17
|
+
script:
|
18
|
+
- bundle exec rspec spec
|
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -140,6 +140,13 @@ end
|
|
140
140
|
|
141
141
|
`CONN_MANAGER.with_new_connection` method creates a temporary connection that will automatically disconnect. If you want to reuse it in subsequent connection switches, set `reusable: true` and it will be added to the connection manager and reused with the next calls. Depends on the use-case and what's preferable. In test environment usually you would want to set it to `reusable` so that database cleaner can clean data with transaction strategy.
|
142
142
|
|
143
|
+
Alternatively, for better performance (only supported on MySQL), database connection can be switched with `use database` statement. Once connection manager is defined with connectino configs to database servers, selecting a database can be done with:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
CONN_MANAGER.use_database(:db1, 'database') do
|
147
|
+
# run queries on database server identified by 'db1' using database 'database'
|
148
|
+
end
|
149
|
+
```
|
143
150
|
|
144
151
|
## Octoshark.reset_connection_managers!
|
145
152
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,39 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
2
|
require 'rspec/core/rake_task'
|
3
|
+
require 'yaml'
|
4
|
+
require 'mysql2'
|
5
|
+
require 'octoshark'
|
3
6
|
|
4
7
|
RSpec::Core::RakeTask.new(:spec)
|
5
8
|
|
6
9
|
task :default => :spec
|
10
|
+
|
11
|
+
namespace :db do
|
12
|
+
task :establish_connection do
|
13
|
+
configs = YAML.load_file('spec/support/config.yml').with_indifferent_access
|
14
|
+
config = configs[:db1].except(:database)
|
15
|
+
@databases = configs.map { |_, config| config[:database] }
|
16
|
+
ActiveRecord::Base.establish_connection(config)
|
17
|
+
end
|
18
|
+
|
19
|
+
task :create => :establish_connection do
|
20
|
+
@databases.each do |database|
|
21
|
+
begin
|
22
|
+
ActiveRecord::Base.connection.create_database(database)
|
23
|
+
puts "#{database} created."
|
24
|
+
rescue ActiveRecord::StatementInvalid => e
|
25
|
+
if e.message.match /database exists/
|
26
|
+
puts "#{database} exists."
|
27
|
+
else
|
28
|
+
raise e
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
task :drop => :establish_connection do
|
35
|
+
@databases.each do |database|
|
36
|
+
ActiveRecord::Base.connection.drop_database(database)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -23,7 +23,7 @@ module Octoshark
|
|
23
23
|
module ActiveRecordAbstractAdapter
|
24
24
|
extend ActiveSupport::Concern
|
25
25
|
|
26
|
-
attr_accessor :connection_name
|
26
|
+
attr_accessor :connection_name, :database_name
|
27
27
|
|
28
28
|
included do
|
29
29
|
alias_method_chain :log, :octoshark
|
@@ -31,7 +31,11 @@ module Octoshark
|
|
31
31
|
|
32
32
|
def log_with_octoshark(sql, name = "SQL", *other_args, &block)
|
33
33
|
if connection_name
|
34
|
-
|
34
|
+
if database_name
|
35
|
+
name = "[Octoshark: #{connection_name} #{database_name}] #{name}"
|
36
|
+
else
|
37
|
+
name = "[Octoshark: #{connection_name}] #{name}"
|
38
|
+
end
|
35
39
|
end
|
36
40
|
|
37
41
|
log_without_octoshark(sql, name, *other_args, &block)
|
@@ -44,6 +44,11 @@ module Octoshark
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
def use_database(name, database_name, &block)
|
48
|
+
connection_pool = find_connection_pool(name)
|
49
|
+
with_connection_pool(name, connection_pool, database_name, &block)
|
50
|
+
end
|
51
|
+
|
47
52
|
def without_connection(&block)
|
48
53
|
change_connection_reference(nil) do
|
49
54
|
yield
|
@@ -97,9 +102,13 @@ module Octoshark
|
|
97
102
|
ActiveRecord::ConnectionAdapters::ConnectionPool.new(spec)
|
98
103
|
end
|
99
104
|
|
100
|
-
def with_connection_pool(name, connection_pool, &block)
|
105
|
+
def with_connection_pool(name, connection_pool, database_name = nil, &block)
|
101
106
|
connection_pool.with_connection do |connection|
|
102
107
|
connection.connection_name = name
|
108
|
+
if database_name
|
109
|
+
connection.database_name = database_name
|
110
|
+
connection.execute("use #{database_name}")
|
111
|
+
end
|
103
112
|
|
104
113
|
change_connection_reference(connection) do
|
105
114
|
yield(connection)
|
data/lib/octoshark/version.rb
CHANGED
data/octoshark.gemspec
CHANGED
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.0.0"
|
26
26
|
spec.add_development_dependency "sqlite3", "~> 1.3.0"
|
27
|
+
spec.add_development_dependency "mysql2", "~> 0.3.14"
|
27
28
|
spec.add_development_dependency "appraisal"
|
28
29
|
end
|
@@ -18,6 +18,23 @@ describe "ActiveRecord Extensions" do
|
|
18
18
|
ActiveRecord::Base.logger = nil
|
19
19
|
end
|
20
20
|
|
21
|
+
it "logs current database name", mysql2: true do
|
22
|
+
io = StringIO.new
|
23
|
+
logger = Logger.new(io)
|
24
|
+
database_name = mysql2_configs[:db1][:database]
|
25
|
+
|
26
|
+
ActiveRecord::Base.logger = logger
|
27
|
+
|
28
|
+
manager = Octoshark::ConnectionManager.new(mysql2_configs)
|
29
|
+
manager.use_database(:db1, database_name) do |connection|
|
30
|
+
connection.execute("SELECT 1")
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(io.string).to include("[Octoshark: db1 #{database_name}]")
|
34
|
+
|
35
|
+
ActiveRecord::Base.logger = nil
|
36
|
+
end
|
37
|
+
|
21
38
|
it "logs the connection name for the Octoshark connection only" do
|
22
39
|
io = StringIO.new
|
23
40
|
logger = Logger.new(io)
|
@@ -164,6 +164,32 @@ describe Octoshark::ConnectionManager do
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
+
describe "#use_database" do
|
168
|
+
it "can nest connection", mysql2: true do
|
169
|
+
manager = Octoshark::ConnectionManager.new(mysql2_configs)
|
170
|
+
|
171
|
+
db1 = mysql2_configs[:db1]['database']
|
172
|
+
db2 = mysql2_configs[:db2]['database']
|
173
|
+
|
174
|
+
manager.use_database(:db1, db1) do
|
175
|
+
expect(db(manager.current_connection)).to eq(db1)
|
176
|
+
|
177
|
+
manager.use_database(:db2, db2) do
|
178
|
+
expect(db(manager.current_connection)).to eq(db2)
|
179
|
+
end
|
180
|
+
|
181
|
+
expect(db(manager.current_connection)).to eq(db1)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
it "returns value from execution", mysql2: true do
|
186
|
+
manager = Octoshark::ConnectionManager.new(mysql2_configs)
|
187
|
+
db1 = mysql2_configs[:db1]['database']
|
188
|
+
result = manager.use_database(:db1, db1) { |connection| connection.execute("SELECT 1") }.to_a
|
189
|
+
expect(result).to eq([[1]])
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
167
193
|
describe '#without_connection' do
|
168
194
|
it "can reset current connection temporarily inside nested connection block" do
|
169
195
|
manager = Octoshark::ConnectionManager.new(configs)
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,11 @@ RSpec.configure do |config|
|
|
19
19
|
ActiveRecord::Base.establish_connection({adapter: 'sqlite3', database: 'tmp/default.sqlite'})
|
20
20
|
end
|
21
21
|
|
22
|
+
config.before :each, :mysql2 do
|
23
|
+
config = mysql2_configs[:db1].except(:database)
|
24
|
+
ActiveRecord::Base.establish_connection(config)
|
25
|
+
end
|
26
|
+
|
22
27
|
config.after :suite do
|
23
28
|
FileUtils.rm_rf(TMP)
|
24
29
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
db1:
|
2
|
+
adapter: mysql2
|
3
|
+
encoding: utf8
|
4
|
+
reconnect: false
|
5
|
+
database: octoshark_db1
|
6
|
+
pool: 5
|
7
|
+
username: root
|
8
|
+
password: pass
|
9
|
+
host: localhost
|
10
|
+
port: 3306
|
11
|
+
|
12
|
+
db2:
|
13
|
+
adapter: mysql2
|
14
|
+
encoding: utf8
|
15
|
+
reconnect: false
|
16
|
+
database: octoshark_db2
|
17
|
+
pool: 5
|
18
|
+
username: root
|
19
|
+
password: pass
|
20
|
+
host: localhost
|
21
|
+
port: 3306
|
@@ -0,0 +1,21 @@
|
|
1
|
+
db1:
|
2
|
+
adapter: mysql2
|
3
|
+
encoding: utf8
|
4
|
+
reconnect: false
|
5
|
+
database: octoshark_db1
|
6
|
+
pool: 5
|
7
|
+
username: travis
|
8
|
+
password:
|
9
|
+
host: localhost
|
10
|
+
port: 3306
|
11
|
+
|
12
|
+
db2:
|
13
|
+
adapter: mysql2
|
14
|
+
encoding: utf8
|
15
|
+
reconnect: false
|
16
|
+
database: octoshark_db2
|
17
|
+
pool: 5
|
18
|
+
username: travis
|
19
|
+
password:
|
20
|
+
host: localhost
|
21
|
+
port: 3306
|
data/spec/support/helpers.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
module Helpers
|
2
4
|
|
3
5
|
def configs
|
@@ -7,10 +9,16 @@ module Helpers
|
|
7
9
|
}
|
8
10
|
end
|
9
11
|
|
12
|
+
def mysql2_configs
|
13
|
+
YAML.load_file('spec/support/config.yml').with_indifferent_access
|
14
|
+
end
|
15
|
+
|
10
16
|
def db(connection)
|
11
|
-
connection
|
12
|
-
|
13
|
-
split('/').last.
|
14
|
-
|
17
|
+
case connection
|
18
|
+
when ActiveRecord::ConnectionAdapters::SQLite3Adapter
|
19
|
+
connection.execute('PRAGMA database_list').first['file'].split('/').last.split('.').first
|
20
|
+
when ActiveRecord::ConnectionAdapters::Mysql2Adapter
|
21
|
+
connection.instance_variable_get(:@config)[:database]
|
22
|
+
end
|
15
23
|
end
|
16
24
|
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.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dalibor Nasevic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.3.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mysql2
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.3.14
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.3.14
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: appraisal
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,7 +126,6 @@ files:
|
|
112
126
|
- Rakefile
|
113
127
|
- gemfiles/rails3.1.gemfile
|
114
128
|
- gemfiles/rails3.2.gemfile
|
115
|
-
- gemfiles/rails3.gemfile
|
116
129
|
- gemfiles/rails4.1.gemfile
|
117
130
|
- gemfiles/rails4.2.gemfile
|
118
131
|
- gemfiles/rails4.gemfile
|
@@ -126,6 +139,8 @@ files:
|
|
126
139
|
- spec/octoshark/connection_manager_spec.rb
|
127
140
|
- spec/octoshark_spec.rb
|
128
141
|
- spec/spec_helper.rb
|
142
|
+
- spec/support/config.yml.template
|
143
|
+
- spec/support/config.yml.travis
|
129
144
|
- spec/support/helpers.rb
|
130
145
|
homepage: https://github.com/dalibor/octoshark
|
131
146
|
licenses:
|
@@ -156,5 +171,7 @@ test_files:
|
|
156
171
|
- spec/octoshark/connection_manager_spec.rb
|
157
172
|
- spec/octoshark_spec.rb
|
158
173
|
- spec/spec_helper.rb
|
174
|
+
- spec/support/config.yml.template
|
175
|
+
- spec/support/config.yml.travis
|
159
176
|
- spec/support/helpers.rb
|
160
177
|
has_rdoc:
|