database_rewinder 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +21 -2
- data/database_rewinder.gemspec +2 -2
- data/lib/database_rewinder.rb +17 -1
- data/lib/database_rewinder/active_record_monkey.rb +52 -15
- data/test/database_rewinder_test.rb +51 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdfa4a22f839cc429f7334f0c175a8f51a1c398e67cb10ebe831f9ba18761fed
|
4
|
+
data.tar.gz: f7bc66b8f216587fdc6af220a5033d973c6da09c2035a0c63c8a5741b31c5fd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83b2df863231cef40e644e8a6e567862842bb630cbebd965769a19e365c23dd1877675c548e81150e797b95e8f069bc5b45119c3f7186944d44cd9f889c42ed8
|
7
|
+
data.tar.gz: 34aa414d520248f0989087acb94d1e2c01f861c84baceb6cfa89c8bbb424018374fc75e261d52e18d651e994a25ae62e2ed447215f8cbd81b19ae729e7de301d
|
data/.travis.yml
CHANGED
@@ -6,8 +6,8 @@ addons:
|
|
6
6
|
|
7
7
|
before_install:
|
8
8
|
# install older versions of rubygems and bundler only on Ruby < 2.7
|
9
|
-
- if [ `echo "${TRAVIS_RUBY_VERSION:0:3} < 2.7" | bc` == 1 ]; then gem i rubygems-update -v '<3' && update_rubygems; fi;
|
10
|
-
- if [ `echo "${TRAVIS_RUBY_VERSION:0:3} < 2.7" | bc` == 1 ]; then gem i bundler -v '<2'; fi;
|
9
|
+
- if [ "${TRAVIS_RUBY_VERSION}" != "ruby-head" ] && [ `echo "${TRAVIS_RUBY_VERSION:0:3} < 2.7" | bc` == 1 ]; then gem i rubygems-update -v '<3' && update_rubygems; fi;
|
10
|
+
- if [ "${TRAVIS_RUBY_VERSION}" != "ruby-head" ] && [ `echo "${TRAVIS_RUBY_VERSION:0:3} < 2.7" | bc` == 1 ]; then gem i bundler -v '<2'; fi;
|
11
11
|
- sudo service mysql restart
|
12
12
|
|
13
13
|
|
@@ -33,12 +33,30 @@ dist: xenial
|
|
33
33
|
|
34
34
|
matrix:
|
35
35
|
include:
|
36
|
+
- rvm: ruby-head
|
37
|
+
gemfile: gemfiles/rails_edge.gemfile
|
38
|
+
env: DB=postgresql
|
39
|
+
- rvm: ruby-head
|
40
|
+
gemfile: gemfiles/rails_61.gemfile
|
41
|
+
env: DB=postgresql
|
36
42
|
- rvm: 3.0.1
|
37
43
|
gemfile: gemfiles/rails_edge.gemfile
|
38
44
|
env: DB=postgresql
|
45
|
+
- rvm: 3.0.1
|
46
|
+
gemfile: gemfiles/rails_edge.gemfile
|
47
|
+
env: DB=mysql
|
48
|
+
- rvm: 3.0.1
|
49
|
+
gemfile: gemfiles/rails_edge.gemfile
|
50
|
+
env: DB=sqlite3
|
39
51
|
- rvm: 3.0.1
|
40
52
|
gemfile: gemfiles/rails_61.gemfile
|
41
53
|
env: DB=postgresql
|
54
|
+
- rvm: 3.0.1
|
55
|
+
gemfile: gemfiles/rails_61.gemfile
|
56
|
+
env: DB=mysql
|
57
|
+
- rvm: 3.0.1
|
58
|
+
gemfile: gemfiles/rails_61.gemfile
|
59
|
+
env: DB=sqlite3
|
42
60
|
- rvm: 2.6.7
|
43
61
|
gemfile: gemfiles/rails_60.gemfile
|
44
62
|
env: DB=postgresql
|
@@ -68,4 +86,5 @@ matrix:
|
|
68
86
|
env: DB=postgresql
|
69
87
|
|
70
88
|
allow_failures:
|
89
|
+
- rvm: ruby-head
|
71
90
|
- gemfile: gemfiles/rails_edge.gemfile
|
data/database_rewinder.gemspec
CHANGED
@@ -6,10 +6,10 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = "database_rewinder"
|
9
|
-
spec.version = '0.9.
|
9
|
+
spec.version = '0.9.6'
|
10
10
|
spec.authors = ["Akira Matsuda"]
|
11
11
|
spec.email = ["ronnie@dio.jp"]
|
12
|
-
spec.description = "A minimalist's tiny and ultra-fast database cleaner"
|
12
|
+
spec.description = "A minimalist's tiny and ultra-fast database cleaner for Active Record"
|
13
13
|
spec.summary = "A minimalist's tiny and ultra-fast database cleaner"
|
14
14
|
spec.homepage = 'https://github.com/amatsuda/database_rewinder'
|
15
15
|
spec.license = "MIT"
|
data/lib/database_rewinder.rb
CHANGED
@@ -92,7 +92,7 @@ module DatabaseRewinder
|
|
92
92
|
|
93
93
|
def configuration_hash_for(connection_name)
|
94
94
|
if database_configuration.respond_to?(:configs_for)
|
95
|
-
hash_config =
|
95
|
+
hash_config = database_configuration_for(connection_name)
|
96
96
|
if hash_config
|
97
97
|
if hash_config.respond_to?(:configuration_hash)
|
98
98
|
hash_config.configuration_hash.stringify_keys
|
@@ -104,6 +104,22 @@ module DatabaseRewinder
|
|
104
104
|
database_configuration[connection_name]
|
105
105
|
end
|
106
106
|
end
|
107
|
+
|
108
|
+
def database_configuration_for(connection_name)
|
109
|
+
traditional_configuration_for(connection_name) || multiple_database_configuration_for(connection_name)
|
110
|
+
end
|
111
|
+
|
112
|
+
def traditional_configuration_for(connection_name)
|
113
|
+
database_configuration.configs_for(env_name: connection_name).first
|
114
|
+
end
|
115
|
+
|
116
|
+
def multiple_database_configuration_for(connection_name)
|
117
|
+
if (ActiveRecord::VERSION::MAJOR >= 6) && (ActiveRecord::VERSION::MINOR >= 1)
|
118
|
+
database_configuration.configs_for(name: connection_name)
|
119
|
+
else
|
120
|
+
database_configuration.configs_for(spec_name: connection_name)
|
121
|
+
end
|
122
|
+
end
|
107
123
|
end
|
108
124
|
|
109
125
|
private_class_method :configuration_hash_for, :get_cache_key
|
@@ -2,29 +2,66 @@
|
|
2
2
|
|
3
3
|
module DatabaseRewinder
|
4
4
|
module InsertRecorder
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
module Execute
|
6
|
+
module NoKwargs
|
7
|
+
def execute(sql, *)
|
8
|
+
DatabaseRewinder.record_inserted_table self, sql
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module WithKwargs
|
14
|
+
def execute(sql, *, **)
|
15
|
+
DatabaseRewinder.record_inserted_table self, sql
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module ExecQuery
|
22
|
+
module NoKwargs
|
23
|
+
def exec_query(sql, *)
|
24
|
+
DatabaseRewinder.record_inserted_table self, sql
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module WithKwargs
|
30
|
+
def exec_query(sql, *, **)
|
31
|
+
DatabaseRewinder.record_inserted_table self, sql
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
8
35
|
end
|
9
36
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
37
|
+
# This method actually no longer has to be a `prepended` hook because InsertRecorder is a module without a direct method now, but still doing this just for compatibility
|
38
|
+
def self.prepended(mod)
|
39
|
+
if meth = mod.instance_method(:execute)
|
40
|
+
if meth.parameters.any? {|type, _name| [:key, :keyreq, :keyrest].include? type }
|
41
|
+
mod.send :prepend, Execute::WithKwargs
|
42
|
+
else
|
43
|
+
mod.send :prepend, Execute::NoKwargs
|
44
|
+
end
|
14
45
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
46
|
+
if meth = mod.instance_method(:exec_query)
|
47
|
+
if meth.parameters.any? {|type, _name| [:key, :keyreq, :keyrest].include? type }
|
48
|
+
mod.send :prepend, ExecQuery::WithKwargs
|
49
|
+
else
|
50
|
+
mod.send :prepend, ExecQuery::NoKwargs
|
51
|
+
end
|
19
52
|
end
|
20
53
|
end
|
21
54
|
end
|
22
55
|
end
|
23
56
|
|
24
|
-
::ActiveRecord::ConnectionAdapters::SQLite3Adapter.send :prepend, DatabaseRewinder::InsertRecorder if defined? ::ActiveRecord::ConnectionAdapters::SQLite3Adapter
|
25
|
-
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send :prepend, DatabaseRewinder::InsertRecorder if defined? ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
26
|
-
::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.send :prepend, DatabaseRewinder::InsertRecorder if defined? ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
|
27
57
|
|
58
|
+
# Already loaded adapters (SQLite3Adapter, PostgreSQLAdapter, AbstractMysqlAdapter, and possibly another third party adapter)
|
59
|
+
::ActiveRecord::ConnectionAdapters::AbstractAdapter.descendants.each do |adapter|
|
60
|
+
# Note: this would only prepend on AbstractMysqlAdapter and not on Mysql2Adapter because ```Mysql2Adapter < InsertRecorder``` becomes true immediately after AbstractMysqlAdapter prepends InsertRecorder
|
61
|
+
adapter.send :prepend, DatabaseRewinder::InsertRecorder unless adapter < DatabaseRewinder::InsertRecorder
|
62
|
+
end
|
63
|
+
|
64
|
+
# Third party adapters that might be loaded in the future
|
28
65
|
def (::ActiveRecord::ConnectionAdapters::AbstractAdapter).inherited(adapter)
|
29
|
-
adapter.prepend DatabaseRewinder::InsertRecorder
|
66
|
+
adapter.send :prepend, DatabaseRewinder::InsertRecorder
|
30
67
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
5
|
class DatabaseRewinder::DatabaseRewinderTest < ActiveSupport::TestCase
|
6
|
-
if ActiveRecord::VERSION::
|
6
|
+
if ActiveRecord::VERSION::MAJOR >= 5
|
7
7
|
self.use_transactional_tests = false
|
8
8
|
else
|
9
9
|
self.use_transactional_fixtures = false
|
@@ -44,6 +44,54 @@ class DatabaseRewinder::DatabaseRewinderTest < ActiveSupport::TestCase
|
|
44
44
|
DatabaseRewinder[:aho, connection: 'ccc']
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
if ActiveRecord::VERSION::MAJOR >= 6
|
49
|
+
sub_test_case 'with traditional configurations' do
|
50
|
+
test 'simply giving a connection name only' do
|
51
|
+
assert_cleaners_added ['aaa'] do
|
52
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'aaa' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
53
|
+
DatabaseRewinder['aaa']
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
test 'giving a connection name via Hash with :connection key' do
|
58
|
+
assert_cleaners_added ['bbb'] do
|
59
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'bbb' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
60
|
+
DatabaseRewinder[connection: 'bbb']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
test 'the Cleaner compatible syntax' do
|
65
|
+
assert_cleaners_added ['ccc'] do
|
66
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'ccc' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
67
|
+
DatabaseRewinder[:aho, connection: 'ccc']
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
sub_test_case 'with multiple database configurations' do
|
73
|
+
test 'simply giving a connection name only' do
|
74
|
+
assert_cleaners_added ['aaa'] do
|
75
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'aaa' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
76
|
+
DatabaseRewinder['aaa']
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
test 'giving a connection name via Hash with :connection key' do
|
81
|
+
assert_cleaners_added ['bbb'] do
|
82
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'bbb' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
83
|
+
DatabaseRewinder[connection: 'bbb']
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
test 'the Cleaner compatible syntax' do
|
88
|
+
assert_cleaners_added ['ccc'] do
|
89
|
+
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'ccc' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
90
|
+
DatabaseRewinder[:aho, connection: 'ccc']
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
47
95
|
end
|
48
96
|
|
49
97
|
test 'for connecting to multiple databases' do
|
@@ -87,7 +135,7 @@ class DatabaseRewinder::DatabaseRewinderTest < ActiveSupport::TestCase
|
|
87
135
|
assert_equal ['bars'], @cleaner.inserted_tables
|
88
136
|
end
|
89
137
|
|
90
|
-
if ActiveRecord::VERSION::
|
138
|
+
if ActiveRecord::VERSION::MAJOR >= 6
|
91
139
|
test 'insert_all' do
|
92
140
|
Bar.insert_all! [{name: 'bar1'}]
|
93
141
|
assert_equal ['bars'], @cleaner.inserted_tables
|
@@ -159,7 +207,7 @@ class DatabaseRewinder::DatabaseRewinderTest < ActiveSupport::TestCase
|
|
159
207
|
assert_equal 0, Bar.count
|
160
208
|
end
|
161
209
|
|
162
|
-
if ActiveRecord::VERSION::
|
210
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
163
211
|
sub_test_case 'migrations' do
|
164
212
|
test '.clean_all should not touch AR::SchemaMigration' do
|
165
213
|
begin
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_rewinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: A minimalist's tiny and ultra-fast database cleaner
|
111
|
+
description: A minimalist's tiny and ultra-fast database cleaner for Active Record
|
112
112
|
email:
|
113
113
|
- ronnie@dio.jp
|
114
114
|
executables: []
|
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
166
|
requirements: []
|
167
|
-
rubygems_version: 3.
|
167
|
+
rubygems_version: 3.2.15
|
168
168
|
signing_key:
|
169
169
|
specification_version: 4
|
170
170
|
summary: A minimalist's tiny and ultra-fast database cleaner
|