db-nuker 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4a12ad9532a4566eb448f3a9231df54ada5e6e41
4
+ data.tar.gz: cd91edb66d3da1c9b761cc45b84490903c4e7b74
5
+ SHA512:
6
+ metadata.gz: 2b4e229a89faeebe4cc6c28b35bfe79a06408f1855678e365c449d87d4fcb89be322c306d6f636463960583448fa3e697d3fca823aba93656a7533a2140a4c4a
7
+ data.tar.gz: 028bb1f9f907f20a000ca368c3d88be70dc3a713126c8257c66fd9b60e7a1ecf5d392fb298d9e6cd96fe09df2010061fd82827c9a108854cdaed9ac3d9ef4aa7
@@ -0,0 +1,49 @@
1
+ # DB Nuker
2
+
3
+ Faster database cleaner for _MySQL_
4
+
5
+ ## Usage
6
+
7
+ 1) Add it your gemfile
8
+
9
+ ```ruby
10
+ gem 'db-nuker'
11
+ ```
12
+
13
+ 2) Create file `spec/support/db_nuker.rb`
14
+
15
+ ```ruby
16
+ RSpec.configure do |config|
17
+ config.use_transactional_fixtures = false
18
+
19
+ config.before(:suite) do
20
+ DBNuker.boom!
21
+ end
22
+
23
+ config.after(:each) do
24
+ DBNuker.boom!
25
+ end
26
+ end
27
+ ```
28
+
29
+ 3) Enjoy!
30
+
31
+ ## How Does It Work?
32
+
33
+ Pure magic!
34
+
35
+ ## No, Really?
36
+
37
+ It cleans only those tables that have records in them
38
+
39
+ ## Known Caveates
40
+
41
+ Doesn't reset the tables auto-increments. Well, you shouldn't rely
42
+ on certain IDs in your tests anyways.
43
+
44
+
45
+ ## License & Copyright
46
+
47
+ All code in this repository is released under the terms of the MIT license
48
+
49
+ Copyright (C) 2014 Nikolay Nemshilov
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/lib/db_nuker'
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "db-nuker"
6
+ gem.version = DBNuker::VERSION
7
+
8
+ gem.authors = ["Nikolay Nemshilov"]
9
+ gem.email = ['nemshilov@gmail.com']
10
+ gem.description = "An awesome db nuker"
11
+ gem.summary = "An awesome db nuker. FTW"
12
+ gem.license = 'MIT'
13
+
14
+ gem.files = `git ls-files`.split($/)
15
+ end
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__) + "/db_nuker.rb"
2
+ require File.dirname(__FILE__) + "/mysql2_patch.rb"
@@ -0,0 +1,32 @@
1
+ module DBNuker
2
+ VERSION = "1.0.0"
3
+
4
+ def self.boom!
5
+ query = tables_to_delete.map do |table|
6
+ "DELETE FROM #{table};"
7
+ end.join("")
8
+
9
+ execute query if query.size > 0
10
+ end
11
+
12
+ def self.connection
13
+ ActiveRecord::Base.connection
14
+ end
15
+
16
+ def self.execute(query)
17
+ connection.execute query
18
+ end
19
+
20
+ def self.tables_to_delete
21
+ result = execute("SELECT table_name FROM information_schema.tables WHERE table_schema = '#{db_name}' AND table_rows > 0")
22
+ result.map{ |row| row[0] } - tables_to_skip
23
+ end
24
+
25
+ def self.tables_to_skip
26
+ @tables_to_skip ||= %w{ schema_migrations sessions }
27
+ end
28
+
29
+ def self.db_name
30
+ @db_name ||= connection.instance_variable_get('@config')[:database]
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ ActiveRecord::Base.instance_eval do
2
+ def self.mysql2_connection(config)
3
+ config[:username] = 'root' if config[:username].nil?
4
+ config[:flags] = 2 | 65536 | 131072 # FOUND_ROWS | MULTI_STATEMENTS | MULTI_RESULTS
5
+
6
+ client = Mysql2::Client.new(config.symbolize_keys)
7
+ options = config.values_at(:host, :username, :password, :database, :port, :socket, :flags)
8
+
9
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.new(client, logger, options, config)
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: db-nuker
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Nikolay Nemshilov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: An awesome db nuker
14
+ email:
15
+ - nemshilov@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - db-nuker.gemspec
22
+ - lib/db-nuker.rb
23
+ - lib/db_nuker.rb
24
+ - lib/mysql2_patch.rb
25
+ homepage:
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.2.2
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: An awesome db nuker. FTW
49
+ test_files: []