database_cleaner-core 2.0.0.beta
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 +7 -0
- data/.gitignore +19 -0
- data/.rspec +4 -0
- data/.ruby-version.sample +1 -0
- data/.travis.yml +13 -0
- data/CONTRIBUTE.markdown +27 -0
- data/Gemfile +5 -0
- data/Guardfile +5 -0
- data/History.rdoc +482 -0
- data/LICENSE +20 -0
- data/README.markdown +355 -0
- data/Rakefile +11 -0
- data/bin/setup +7 -0
- data/cucumber.yml +1 -0
- data/database_cleaner-core.gemspec +29 -0
- data/database_cleaner.gemspec +18 -0
- data/lib/database_cleaner-core.rb +1 -0
- data/lib/database_cleaner/base.rb +101 -0
- data/lib/database_cleaner/configuration.rb +86 -0
- data/lib/database_cleaner/core.rb +29 -0
- data/lib/database_cleaner/cucumber.rb +3 -0
- data/lib/database_cleaner/deprecation.rb +20 -0
- data/lib/database_cleaner/generic/base.rb +29 -0
- data/lib/database_cleaner/generic/transaction.rb +11 -0
- data/lib/database_cleaner/generic/truncation.rb +40 -0
- data/lib/database_cleaner/null_strategy.rb +20 -0
- data/lib/database_cleaner/safeguard.rb +107 -0
- data/lib/database_cleaner/spec.rb +2 -0
- data/lib/database_cleaner/spec/database_helper.rb +82 -0
- data/lib/database_cleaner/spec/shared_examples.rb +24 -0
- data/lib/database_cleaner/version.rb +3 -0
- data/tmp/.keep +0 -0
- metadata +161 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module DatabaseCleaner
|
4
|
+
module Spec
|
5
|
+
class DatabaseHelper < Struct.new(:db)
|
6
|
+
def self.with_all_dbs &block
|
7
|
+
%w[mysql2 sqlite3 postgres].map(&:to_sym).each do |db|
|
8
|
+
yield new(db)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def setup
|
13
|
+
create_db
|
14
|
+
establish_connection
|
15
|
+
load_schema
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :connection
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
drop_db
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def establish_connection(config = default_config)
|
27
|
+
raise NotImplementedError
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_db
|
31
|
+
if db == :sqlite3
|
32
|
+
# NO-OP
|
33
|
+
elsif db == :postgres
|
34
|
+
establish_connection default_config.merge('database' => 'postgres')
|
35
|
+
connection.execute "CREATE DATABASE #{default_config['database']}" rescue nil
|
36
|
+
else
|
37
|
+
establish_connection default_config.merge("database" => nil)
|
38
|
+
connection.execute "CREATE DATABASE IF NOT EXISTS #{default_config['database']}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def load_schema
|
43
|
+
connection.execute <<-SQL
|
44
|
+
CREATE TABLE IF NOT EXISTS users (
|
45
|
+
id SERIAL PRIMARY KEY,
|
46
|
+
name INTEGER
|
47
|
+
);
|
48
|
+
SQL
|
49
|
+
|
50
|
+
connection.execute <<-SQL
|
51
|
+
CREATE TABLE IF NOT EXISTS agents (
|
52
|
+
name INTEGER
|
53
|
+
);
|
54
|
+
SQL
|
55
|
+
end
|
56
|
+
|
57
|
+
def drop_db
|
58
|
+
if db == :sqlite3
|
59
|
+
begin
|
60
|
+
File.unlink(db_config['sqlite3']['database'])
|
61
|
+
rescue Errno::ENOENT
|
62
|
+
end
|
63
|
+
elsif db == :postgres
|
64
|
+
# FIXME
|
65
|
+
connection.execute "DROP TABLE IF EXISTS users"
|
66
|
+
connection.execute "DROP TABLE IF EXISTS agents"
|
67
|
+
else
|
68
|
+
connection.execute "DROP DATABASE IF EXISTS #{default_config['database']}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def db_config
|
73
|
+
config_path = 'spec/support/config.yml'
|
74
|
+
@db_config ||= YAML.load(IO.read(config_path))
|
75
|
+
end
|
76
|
+
|
77
|
+
def default_config
|
78
|
+
db_config[db.to_s]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.shared_examples_for "a database_cleaner strategy" do
|
2
|
+
it { is_expected.to respond_to(:db) }
|
3
|
+
it { is_expected.to respond_to(:db=) }
|
4
|
+
it { is_expected.to respond_to(:start) }
|
5
|
+
it { is_expected.to respond_to(:clean) }
|
6
|
+
it { is_expected.to respond_to(:cleaning) }
|
7
|
+
end
|
8
|
+
|
9
|
+
RSpec.shared_examples_for "a database_cleaner adapter" do
|
10
|
+
it { expect(described_class).to respond_to(:available_strategies) }
|
11
|
+
it { expect(described_class).to respond_to(:default_strategy) }
|
12
|
+
|
13
|
+
it 'default_strategy should be part of available_strategies' do
|
14
|
+
expect(described_class.available_strategies).to include(described_class.default_strategy)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'all strategies should adhere to a database_cleaner strategy interface' do
|
18
|
+
described_class.available_strategies.each do |strategy|
|
19
|
+
subject { described_class.const_get(strategy.to_s.capitalize).new }
|
20
|
+
|
21
|
+
it_behaves_like 'a database_cleaner strategy'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/tmp/.keep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: database_cleaner-core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0.beta
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Mabey
|
8
|
+
- Ernesto Tagwerker
|
9
|
+
autorequire:
|
10
|
+
bindir: exe
|
11
|
+
cert_chain: []
|
12
|
+
date: 2020-04-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: guard-rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: listen
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: cucumber
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
description: Strategies for cleaning databases. Can be used to ensure a clean slate
|
99
|
+
for testing.
|
100
|
+
email:
|
101
|
+
- ernesto@ombulabs.com
|
102
|
+
executables: []
|
103
|
+
extensions: []
|
104
|
+
extra_rdoc_files: []
|
105
|
+
files:
|
106
|
+
- ".gitignore"
|
107
|
+
- ".rspec"
|
108
|
+
- ".ruby-version.sample"
|
109
|
+
- ".travis.yml"
|
110
|
+
- CONTRIBUTE.markdown
|
111
|
+
- Gemfile
|
112
|
+
- Guardfile
|
113
|
+
- History.rdoc
|
114
|
+
- LICENSE
|
115
|
+
- README.markdown
|
116
|
+
- Rakefile
|
117
|
+
- bin/setup
|
118
|
+
- cucumber.yml
|
119
|
+
- database_cleaner-core.gemspec
|
120
|
+
- database_cleaner.gemspec
|
121
|
+
- lib/database_cleaner-core.rb
|
122
|
+
- lib/database_cleaner/base.rb
|
123
|
+
- lib/database_cleaner/configuration.rb
|
124
|
+
- lib/database_cleaner/core.rb
|
125
|
+
- lib/database_cleaner/cucumber.rb
|
126
|
+
- lib/database_cleaner/deprecation.rb
|
127
|
+
- lib/database_cleaner/generic/base.rb
|
128
|
+
- lib/database_cleaner/generic/transaction.rb
|
129
|
+
- lib/database_cleaner/generic/truncation.rb
|
130
|
+
- lib/database_cleaner/null_strategy.rb
|
131
|
+
- lib/database_cleaner/safeguard.rb
|
132
|
+
- lib/database_cleaner/spec.rb
|
133
|
+
- lib/database_cleaner/spec/database_helper.rb
|
134
|
+
- lib/database_cleaner/spec/shared_examples.rb
|
135
|
+
- lib/database_cleaner/version.rb
|
136
|
+
- tmp/.keep
|
137
|
+
homepage: https://github.com/DatabaseCleaner/database_cleaner
|
138
|
+
licenses:
|
139
|
+
- MIT
|
140
|
+
metadata: {}
|
141
|
+
post_install_message:
|
142
|
+
rdoc_options: []
|
143
|
+
require_paths:
|
144
|
+
- lib
|
145
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 1.3.1
|
155
|
+
requirements: []
|
156
|
+
rubygems_version: 3.0.3
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: Strategies for cleaning databases. Can be used to ensure a clean slate for
|
160
|
+
testing.
|
161
|
+
test_files: []
|