database_cleaner 1.4.0 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4527ac30a6efa3d7c5938b87344a51f1ab0c7314
4
- data.tar.gz: cbdaea723b3b1a2de12449af9b3cef9539e2dd4e
3
+ metadata.gz: 35bb176b3479b670a9d789e0b6115590fe84aeee
4
+ data.tar.gz: 30b5dbd03d0b8ac5249712fbe2b1e9ec44809f99
5
5
  SHA512:
6
- metadata.gz: 196e5a7355500166c4738165b498bb2c4886a1091317a1a9fb99552efcc4f659109f0093778bf3cbfd88eb4afcdec431c30b9f591a037c9900cffd707b7b9670
7
- data.tar.gz: 664d22fb94baa71bc7610cb919c3ea8180a55117667b5ac671a6d826c27b586cb40ec1ff4e447f1bc554ac6bb3aa50da5296c55244a1e623250ac99014d7998f
6
+ metadata.gz: 9e70863bb6c44d9fea1364be4d5308a7221c1b2babd6bc4d4fbbc5515eaee929d54b5bf655d8816ad7f1085f34136dcf7d471437c6c2ed535985e3fe421c3f63
7
+ data.tar.gz: b93b8e8de63d8d5c7602b6e7ab219ebb4bfa9cfc9013e30f723879538aa1d0ef1943ca1652892836de8cd633a689af083ab639b24dc8370036e360ced9608cfb
data/Gemfile.lock CHANGED
@@ -162,7 +162,7 @@ GEM
162
162
  multi_json (1.2.0)
163
163
  multi_xml (0.5.5)
164
164
  multipart-post (2.0.0)
165
- mysql (2.8.1)
165
+ mysql (2.9.1)
166
166
  mysql2 (0.3.16)
167
167
  neo4j-community (2.1.5)
168
168
  neo4j-core (3.0.8)
@@ -279,7 +279,7 @@ DEPENDENCIES
279
279
  mongoid
280
280
  mongoid-tree
281
281
  moped
282
- mysql (~> 2.8.1)
282
+ mysql (~> 2.9.1)
283
283
  mysql2
284
284
  neo4j-core
285
285
  ohm (~> 0.1.3)
data/History.rdoc CHANGED
@@ -1,19 +1,30 @@
1
1
  == Development (master)
2
2
 
3
+ == 1.4.1 2015-03-09
4
+ * Support for deletion with Sequel. (@cyberdelia)
5
+ * Use ActiveRecord::Base configuration when different from config file. (@wendy0402)
6
+ * Removed dependency of Mongo. (@codegourmet)
7
+ * Fixed issue with tables schema prefix in Postgres. (@phoenixek12)
8
+ * Use ruby 1.8 syntax. (@daniel-g)
9
+ * Added license to gemspec. (@chrismar035)
10
+ * Improved coverage for migrations table. (@jonallured)
11
+
12
+ == 1.4.0 2014-12-17
13
+
3
14
  === New Features/Changes
4
- * Using the deletion strategy with Mysql now only deletes those tables
5
- which have had records added to them. (@MadRabbit)
6
- * Add support for `pre_count` on Sequel with Mysql. (@vrinek)
7
- * Add support for neo4j. (@dpisarewski)
15
+ * Support for Neo4j. (@dpisarewski)
16
+ * Support for multiple connections on Mongoid. (@nyarly)
17
+
18
+ === Better Performance
19
+ * Using the deletion strategy with Mysql now only deletes those tables which have had records added to them. (@MadRabbit)
20
+ * Add support for pre_count on Sequel with Mysql. (@vrinek)
8
21
  * Cache collection names in mongo's truncation strategy. (@nyarly)
9
- * Support for mongoid multiple connections. (@nyarly)
10
- * Support for deletion with Sequel. (@cyberdelia)
11
22
 
12
23
  === Bug Fixes
13
- * Fix `undefined method error` with DataMapper SQLite adaptor. (@lanej)
24
+ * Fix undefined method error with DataMapper SQLite adaptor. (@lanej)
14
25
  * Fully define Mysql2 adaptor constant. (@jgonera)
15
26
  * Don't truncate schema tables in Postgres. (@billywatson)
16
- * Fix issue #284. (@MartinNowak)
27
+ * Fix issue where Moped cleaner was missing collections with 'system' in their name. (@MartinNowak)
17
28
 
18
29
  == 1.3.0 2014-05-23
19
30
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 4
4
- :patch: 0
4
+ :patch: 1
data/examples/Gemfile CHANGED
@@ -28,7 +28,7 @@ group :development, :test do
28
28
 
29
29
  gem "sequel", "~> 3.21.0"
30
30
  #gem "ibm_db" # I don't want to add this dependency, even as a dev one since it requires DB2 to be installed
31
- gem 'mysql', '~> 2.8.1'
31
+ gem 'mysql', '~> 2.9.1'
32
32
  gem 'mysql2'
33
33
  gem 'pg'
34
34
  gem 'ohm', '~> 0.1.3'
@@ -162,7 +162,7 @@ GEM
162
162
  multi_json (1.2.0)
163
163
  multi_xml (0.5.5)
164
164
  multipart-post (2.0.0)
165
- mysql (2.8.1)
165
+ mysql (2.9.1)
166
166
  mysql2 (0.3.16)
167
167
  neo4j-community (2.1.5)
168
168
  neo4j-core (3.0.8)
@@ -279,7 +279,7 @@ DEPENDENCIES
279
279
  mongoid
280
280
  mongoid-tree
281
281
  moped
282
- mysql (~> 2.8.1)
282
+ mysql (~> 2.9.1)
283
283
  mysql2
284
284
  neo4j-core
285
285
  ohm (~> 0.1.3)
@@ -2,6 +2,3 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'database_cleaner'
3
3
 
4
4
  require 'rspec/expectations'
5
-
6
- require 'test/unit/assertions'
7
-
@@ -34,10 +34,19 @@ module DatabaseCleaner
34
34
  def load_config
35
35
  if self.db != :default && self.db.is_a?(Symbol) && File.file?(ActiveRecord.config_file_location)
36
36
  connection_details = YAML::load(ERB.new(IO.read(ActiveRecord.config_file_location)).result)
37
- @connection_hash = connection_details[self.db.to_s]
37
+ @connection_hash = valid_config(connection_details)[self.db.to_s]
38
38
  end
39
39
  end
40
40
 
41
+ def valid_config(connection_file)
42
+ if !::ActiveRecord::Base.configurations.nil? && !::ActiveRecord::Base.configurations.empty?
43
+ if connection_file != ::ActiveRecord::Base.configurations
44
+ return ::ActiveRecord::Base.configurations
45
+ end
46
+ end
47
+ connection_file
48
+ end
49
+
41
50
  def connection_class
42
51
  @connection_class ||= if db && !db.is_a?(Symbol)
43
52
  db
@@ -19,7 +19,7 @@ module DatabaseCleaner::ActiveRecord
19
19
  end
20
20
  end
21
21
  if connection_class.connection.respond_to?(:begin_transaction)
22
- connection_class.connection.begin_transaction joinable: false
22
+ connection_class.connection.begin_transaction :joinable => false
23
23
  else
24
24
  connection_class.connection.begin_db_transaction
25
25
  end
@@ -24,7 +24,7 @@ module DatabaseCleaner
24
24
  def database_cleaner_view_cache
25
25
  @views ||= select_values("select table_name from information_schema.views where table_schema = '#{current_database}'") rescue []
26
26
  end
27
-
27
+
28
28
  def database_cleaner_table_cache
29
29
  # the adapters don't do caching (#130) but we make the assumption that the list stays the same in tests
30
30
  @database_cleaner_tables ||= tables
@@ -177,7 +177,7 @@ module DatabaseCleaner
177
177
  cur_val = select_value("SELECT currval('#{table}_id_seq');").to_i rescue 0
178
178
  cur_val > 0
179
179
  end
180
-
180
+
181
181
  def has_sequence?(table)
182
182
  select_value("SELECT true FROM pg_class WHERE relname = '#{table}_id_seq';")
183
183
  end
@@ -190,7 +190,10 @@ module DatabaseCleaner
190
190
  rows = select_rows <<-_SQL
191
191
  SELECT schemaname || '.' || tablename
192
192
  FROM pg_tables
193
- WHERE tablename !~ '_prt_' AND schemaname = ANY (current_schemas(false))
193
+ WHERE
194
+ tablename !~ '_prt_' AND
195
+ tablename <> '#{::ActiveRecord::Migrator.schema_migrations_table_name}' AND
196
+ schemaname = ANY (current_schemas(false))
194
197
  _SQL
195
198
  rows.collect { |result| result.first }
196
199
  end
@@ -242,7 +245,14 @@ module DatabaseCleaner::ActiveRecord
242
245
 
243
246
  def tables_to_truncate(connection)
244
247
  tables_in_db = cache_tables? ? connection.database_cleaner_table_cache : connection.tables
245
- (@only || tables_in_db) - @tables_to_exclude - connection.database_cleaner_view_cache
248
+ to_reject = (@tables_to_exclude + connection.database_cleaner_view_cache)
249
+ (@only || tables_in_db).reject do |table|
250
+ if ( m = table.match(/([^.]+)$/) )
251
+ to_reject.include?(m[1])
252
+ else
253
+ false
254
+ end
255
+ end
246
256
  end
247
257
 
248
258
  # overwritten
@@ -1,5 +1,3 @@
1
- require 'mongoid'
2
-
3
1
  module DatabaseCleaner
4
2
  module Mongo
5
3
  def self.available_strategies
@@ -20,7 +20,7 @@ module DatabaseCleaner
20
20
  def mongoid_collection_names
21
21
  @@mongoid_collection_names ||= Hash.new{|h,k| h[k]=[]}.tap do |names|
22
22
  ObjectSpace.each_object(Class) do |klass|
23
- next unless klass.ancestors.include?(::Mongoid::Document)
23
+ next unless klass.ancestors.map(&:to_s).include?('Mongoid::Document')
24
24
  next if klass.embedded
25
25
  next if klass.collection_name.empty?
26
26
  names[klass.db.name] << klass.collection_name
@@ -2,7 +2,6 @@ require 'database_cleaner/mongoid/base'
2
2
  require 'database_cleaner/generic/truncation'
3
3
  require 'database_cleaner/mongo/truncation_mixin'
4
4
  require 'database_cleaner/moped/truncation_base'
5
- require 'mongoid/tree'
6
5
  require 'mongoid/version'
7
6
 
8
7
  module DatabaseCleaner
@@ -84,6 +84,34 @@ my_db:
84
84
  subject.load_config
85
85
  end
86
86
 
87
+ context 'use ActiveRecord::Base.configuration' do
88
+ it 'when config file different with it' do
89
+ ::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "two"} })
90
+ subject.load_config
91
+ subject.connection_hash.should eq({ "database" => "two"})
92
+ end
93
+ end
94
+
95
+ context 'use config file' do
96
+ it 'when config file same with it' do
97
+ ::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "one"} })
98
+ subject.load_config
99
+ subject.connection_hash.should eq({ "database" => "one"})
100
+ end
101
+
102
+ it 'when ::ActiveRecord::Base.configurations nil' do
103
+ ::ActiveRecord::Base.stub(:configurations).and_return(nil)
104
+ subject.load_config
105
+ subject.connection_hash.should eq({ "database" => "one"})
106
+ end
107
+
108
+ it 'when ::ActiveRecord::Base.configurations empty' do
109
+ ::ActiveRecord::Base.stub(:configurations).and_return({})
110
+ subject.load_config
111
+ subject.connection_hash.should eq({ "database" => "one"})
112
+ end
113
+ end
114
+
87
115
  it "should store the relevant config in connection_hash" do
88
116
  subject.load_config
89
117
  subject.connection_hash.should eq( "database" => "one" )
@@ -6,6 +6,15 @@ require 'database_cleaner/active_record/truncation/shared_fast_truncation'
6
6
 
7
7
  module ActiveRecord
8
8
  module ConnectionAdapters
9
+ describe "schema_migrations table" do
10
+ it "is not truncated" do
11
+ active_record_pg_migrate
12
+ DatabaseCleaner::ActiveRecord::Truncation.new.clean
13
+ result = active_record_pg_connection.execute("select count(*) from schema_migrations;")
14
+ result.values.first.should eq ["2"]
15
+ end
16
+ end
17
+
9
18
  describe do
10
19
  before(:all) { active_record_pg_setup }
11
20
 
@@ -42,6 +51,15 @@ module ActiveRecord
42
51
  end
43
52
  end
44
53
 
54
+ describe ":except option cleanup" do
55
+ it "should not truncate the tables specified in the :except option" do
56
+ 2.times { User.create }
57
+
58
+ ::DatabaseCleaner::ActiveRecord::Truncation.new(:except => ['users']).clean
59
+ expect( User.count ).to eq 2
60
+ end
61
+ end
62
+
45
63
  describe '#database_cleaner_table_cache' do
46
64
  it 'should default to the list of tables with their schema' do
47
65
  connection.database_cleaner_table_cache.first.should match(/^public\./)
@@ -43,8 +43,8 @@ module DatabaseCleaner
43
43
  end
44
44
 
45
45
  supported_configurations = [
46
- { url: 'mysql:///', connection_options: db_config['mysql'] },
47
- { url: 'postgres:///', connection_options: db_config['postgres'] }
46
+ { :url => 'mysql:///', :connection_options => db_config['mysql'] },
47
+ { :url => 'postgres:///', :connection_options => db_config['postgres'] }
48
48
  ]
49
49
 
50
50
  supported_configurations.each do |config|
@@ -8,18 +8,18 @@ module MySQL2Helper
8
8
  # require 'logger'
9
9
  # ActiveRecord::Base.logger = Logger.new(STDERR)
10
10
 
11
- def config
11
+ def default_config
12
12
  db_config['mysql2']
13
13
  end
14
14
 
15
15
  def create_db
16
- establish_connection(config.merge(:database => nil))
16
+ establish_connection(default_config.merge(:database => nil))
17
17
 
18
- ActiveRecord::Base.connection.drop_database config['database'] rescue nil
19
- ActiveRecord::Base.connection.create_database config['database']
18
+ ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
19
+ ActiveRecord::Base.connection.create_database default_config['database']
20
20
  end
21
21
 
22
- def establish_connection config = config
22
+ def establish_connection(config = default_config)
23
23
  ActiveRecord::Base.establish_connection config
24
24
  end
25
25
 
@@ -7,18 +7,18 @@ module MySQLHelper
7
7
  # require 'logger'
8
8
  # ActiveRecord::Base.logger = Logger.new(STDERR)
9
9
 
10
- def config
10
+ def default_config
11
11
  db_config['mysql']
12
12
  end
13
13
 
14
14
  def create_db
15
- establish_connection(config.merge(:database => nil))
15
+ establish_connection(default_config.merge(:database => nil))
16
16
 
17
- ActiveRecord::Base.connection.drop_database config['database'] rescue nil
18
- ActiveRecord::Base.connection.create_database config['database']
17
+ ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
18
+ ActiveRecord::Base.connection.create_database default_config['database']
19
19
  end
20
20
 
21
- def establish_connection config = config
21
+ def establish_connection(config = default_config)
22
22
  ActiveRecord::Base.establish_connection config
23
23
  end
24
24
 
@@ -6,22 +6,22 @@ module PostgreSQLHelper
6
6
 
7
7
  # ActiveRecord::Base.logger = Logger.new(STDERR)
8
8
 
9
- def config
9
+ def default_config
10
10
  db_config['postgres']
11
11
  end
12
12
 
13
13
  def create_db
14
- @encoding = config['encoding'] || ENV['CHARSET'] || 'utf8'
14
+ @encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
15
15
  begin
16
- establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
17
- ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => @encoding))
16
+ establish_connection(default_config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
17
+ ActiveRecord::Base.connection.create_database(default_config['database'], default_config.merge('encoding' => @encoding))
18
18
  rescue Exception => e
19
19
  $stderr.puts e, *(e.backtrace)
20
- $stderr.puts "Couldn't create database for #{config.inspect}"
20
+ $stderr.puts "Couldn't create database for #{default_config.inspect}"
21
21
  end
22
22
  end
23
23
 
24
- def establish_connection config = config
24
+ def establish_connection(config = default_config)
25
25
  ActiveRecord::Base.establish_connection(config)
26
26
  end
27
27
 
@@ -31,6 +31,13 @@ module PostgreSQLHelper
31
31
  active_record_load_schema
32
32
  end
33
33
 
34
+ def active_record_pg_migrate
35
+ `dropdb #{default_config['database']}`
36
+ create_db
37
+ establish_connection
38
+ ActiveRecord::Migrator.migrate 'spec/support/active_record/migrations'
39
+ end
40
+
34
41
  def active_record_pg_connection
35
42
  ActiveRecord::Base.connection
36
43
  end
@@ -6,21 +6,21 @@ module SQLite3Helper
6
6
 
7
7
  # ActiveRecord::Base.logger = Logger.new(STDERR)
8
8
 
9
- def config
9
+ def default_config
10
10
  db_config['sqlite3']
11
11
  end
12
12
 
13
13
  def create_db
14
- @encoding = config['encoding'] || ENV['CHARSET'] || 'utf8'
14
+ @encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
15
15
  begin
16
- establish_connection(config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
16
+ establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
17
17
  rescue Exception => e
18
18
  $stderr.puts e, *(e.backtrace)
19
- $stderr.puts "Couldn't create database for #{config.inspect}"
19
+ $stderr.puts "Couldn't create database for #{default_config.inspect}"
20
20
  end
21
21
  end
22
22
 
23
- def establish_connection config = config
23
+ def establish_connection(config = default_config)
24
24
  ActiveRecord::Base.establish_connection(config)
25
25
  end
26
26
 
@@ -5,21 +5,21 @@ module DataMapperSQLite3Helper
5
5
 
6
6
  puts "DataMapper #{DataMapper::VERSION}, sqlite3"
7
7
 
8
- def config
8
+ def default_config
9
9
  db_config['sqlite3']
10
10
  end
11
11
 
12
12
  def create_db
13
- @encoding = config['encoding'] || ENV['CHARSET'] || 'utf8'
13
+ @encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
14
14
  begin
15
- establish_connection(config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
15
+ establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
16
16
  rescue Exception => e
17
17
  $stderr.puts e, *(e.backtrace)
18
- $stderr.puts "Couldn't create database for #{config.inspect}"
18
+ $stderr.puts "Couldn't create database for #{default_config.inspect}"
19
19
  end
20
20
  end
21
21
 
22
- def establish_connection(config = config)
22
+ def establish_connection(config = default_config)
23
23
  DataMapper.setup(:default, config)
24
24
  end
25
25
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: database_cleaner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Mabey
@@ -360,7 +360,7 @@ dependencies:
360
360
  - - ">="
361
361
  - !ruby/object:Gem::Version
362
362
  version: '0'
363
- description: Strategies for cleaning databases. Can be used to ensure a clean state
363
+ description: Strategies for cleaning databases. Can be used to ensure a clean state
364
364
  for testing.
365
365
  email: ben@benmabey.com
366
366
  executables: []
@@ -496,8 +496,9 @@ files:
496
496
  - spec/support/active_record/sqlite3_setup.rb
497
497
  - spec/support/data_mapper/schema_setup.rb
498
498
  - spec/support/data_mapper/sqlite3_setup.rb
499
- homepage: http://github.com/bmabey/database_cleaner
500
- licenses: []
499
+ homepage: http://github.com/DatabaseCleaner/database_cleaner
500
+ licenses:
501
+ - MIT
501
502
  metadata: {}
502
503
  post_install_message:
503
504
  rdoc_options: []