database_cleaner 1.1.1 → 1.2.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.
Files changed (39) hide show
  1. data/Gemfile.lock +12 -12
  2. data/History.rdoc +17 -0
  3. data/README.markdown +4 -0
  4. data/Rakefile +1 -0
  5. data/VERSION.yml +2 -2
  6. data/examples/Gemfile.lock +12 -12
  7. data/lib/database_cleaner/active_record/base.rb +3 -3
  8. data/lib/database_cleaner/active_record/deletion.rb +19 -36
  9. data/lib/database_cleaner/active_record/truncation.rb +40 -67
  10. data/lib/database_cleaner/base.rb +3 -3
  11. data/lib/database_cleaner/configuration.rb +1 -1
  12. data/lib/database_cleaner/data_mapper/base.rb +1 -1
  13. data/lib/database_cleaner/data_mapper/truncation.rb +22 -2
  14. data/lib/database_cleaner/generic/truncation.rb +4 -3
  15. data/lib/database_cleaner/mongo_mapper/base.rb +1 -1
  16. data/lib/database_cleaner/moped/base.rb +2 -2
  17. data/lib/database_cleaner/redis/base.rb +1 -1
  18. data/spec/database_cleaner/active_record/base_spec.rb +10 -10
  19. data/spec/database_cleaner/active_record/transaction_spec.rb +1 -1
  20. data/spec/database_cleaner/active_record/truncation/mysql2_spec.rb +2 -2
  21. data/spec/database_cleaner/active_record/truncation/mysql_spec.rb +2 -2
  22. data/spec/database_cleaner/active_record/truncation/postgresql_spec.rb +2 -2
  23. data/spec/database_cleaner/active_record/truncation/shared_fast_truncation.rb +2 -2
  24. data/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb +42 -0
  25. data/spec/database_cleaner/active_record/truncation_spec.rb +50 -29
  26. data/spec/database_cleaner/base_spec.rb +44 -48
  27. data/spec/database_cleaner/configuration_spec.rb +74 -74
  28. data/spec/database_cleaner/couch_potato/truncation_spec.rb +2 -2
  29. data/spec/database_cleaner/data_mapper/base_spec.rb +2 -2
  30. data/spec/database_cleaner/generic/base_spec.rb +1 -1
  31. data/spec/database_cleaner/generic/truncation_spec.rb +26 -16
  32. data/spec/database_cleaner/mongo_mapper/base_spec.rb +2 -2
  33. data/spec/database_cleaner/moped/truncation_spec.rb +1 -1
  34. data/spec/database_cleaner/ohm/truncation_spec.rb +8 -8
  35. data/spec/database_cleaner/redis/base_spec.rb +2 -2
  36. data/spec/database_cleaner/redis/truncation_spec.rb +8 -8
  37. data/spec/database_cleaner/sequel/base_spec.rb +2 -2
  38. data/spec/support/active_record/sqlite3_setup.rb +40 -0
  39. metadata +4 -2
@@ -167,21 +167,21 @@ GEM
167
167
  redis (3.0.4)
168
168
  rest-client (1.6.7)
169
169
  mime-types (>= 1.16)
170
- rspec (2.12.0)
171
- rspec-core (~> 2.12.0)
172
- rspec-expectations (~> 2.12.0)
173
- rspec-mocks (~> 2.12.0)
174
- rspec-core (2.12.2)
175
- rspec-expectations (2.12.1)
176
- diff-lcs (~> 1.1.3)
177
- rspec-mocks (2.12.1)
178
- rspec-rails (2.12.1)
170
+ rspec (2.14.1)
171
+ rspec-core (~> 2.14.0)
172
+ rspec-expectations (~> 2.14.0)
173
+ rspec-mocks (~> 2.14.0)
174
+ rspec-core (2.14.5)
175
+ rspec-expectations (2.14.2)
176
+ diff-lcs (>= 1.1.3, < 2.0)
177
+ rspec-mocks (2.14.3)
178
+ rspec-rails (2.14.0)
179
179
  actionpack (>= 3.0)
180
180
  activesupport (>= 3.0)
181
181
  railties (>= 3.0)
182
- rspec-core (~> 2.12.0)
183
- rspec-expectations (~> 2.12.0)
184
- rspec-mocks (~> 2.12.0)
182
+ rspec-core (~> 2.14.0)
183
+ rspec-expectations (~> 2.14.0)
184
+ rspec-mocks (~> 2.14.0)
185
185
  sequel (3.21.0)
186
186
  slop (3.3.3)
187
187
  sprockets (2.2.2)
@@ -1,3 +1,20 @@
1
+ == 1.2.0 2013-10-09
2
+
3
+ A huge thanks goes to @tommeier for fixing the bug with class loading that was cuasing the wrong adapters
4
+ to be used in certain cases.
5
+
6
+ === New Features/Changes
7
+
8
+ * Upgraded RSpec to remove deprecation warnings (John Rowe)
9
+ * Caching of tables to truncate is now optional (@marcoow)
10
+
11
+ === Bug Fixes
12
+
13
+ * Use class_eval loading of superclasses to ensure right version of class is patched. (Tom Meier, Joel Nimety, Ernesto Tagwerker)
14
+ * Add truncate_tables method to SQLiteAdapter. (Chris Mo)
15
+ * Fixes missing #uses_sequence invokation in adapter classes for sqlite and sqlite3 (Lefteris Laskaridis)
16
+
17
+
1
18
  == 1.1.1 2013-08-01
2
19
 
3
20
  === Bug Fixes
@@ -181,6 +181,10 @@ The following options are available for ActiveRecord's `:truncation` strategy _o
181
181
  * `:pre_count` - When set to `true` this will check each table for existing rows before truncating it. This can speed up test suites when many of the tables to be truncated are never populated. Defaults to `:false`. (Also, see the section on [What strategy is fastest?](#what-strategy-is-fastest))
182
182
  * `:reset_ids` - This only matters when `:pre_count` is used, and it will make sure that a tables auto-incrementing id is reset even if there are no rows in the table (e.g. records were created in the test but also removed before DatabaseCleaner gets to it). Defaults to `true`.
183
183
 
184
+ The following option is available for ActiveRecord's `:truncation` and `:deletion` strategy for any DB.
185
+
186
+ * `:cache_tables` - When set to `true` the list of tables to truncate or delete from will only be read from the DB once, otherwise it will be read before each cleanup run. Set this to `false` if you create and drop tables in your tests. Defaults to `true`.
187
+
184
188
 
185
189
  ### RSpec Example
186
190
 
data/Rakefile CHANGED
@@ -14,6 +14,7 @@ begin
14
14
  s.description = "Strategies for cleaning databases. Can be used to ensure a clean state for testing."
15
15
  s.files = FileList["[A-Z]*.*", "{examples,lib,features,spec}/**/*", "Rakefile", "cucumber.yml"]
16
16
  s.authors = ["Ben Mabey"]
17
+ s.licence = 'MIT'
17
18
  end
18
19
  rescue LoadError
19
20
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
@@ -1,5 +1,5 @@
1
1
  ---
2
- :minor: 1
2
+ :minor: 2
3
3
  :build:
4
- :patch: 1
4
+ :patch: 0
5
5
  :major: 1
@@ -167,21 +167,21 @@ GEM
167
167
  redis (3.0.4)
168
168
  rest-client (1.6.7)
169
169
  mime-types (>= 1.16)
170
- rspec (2.12.0)
171
- rspec-core (~> 2.12.0)
172
- rspec-expectations (~> 2.12.0)
173
- rspec-mocks (~> 2.12.0)
174
- rspec-core (2.12.2)
175
- rspec-expectations (2.12.1)
176
- diff-lcs (~> 1.1.3)
177
- rspec-mocks (2.12.1)
178
- rspec-rails (2.12.1)
170
+ rspec (2.14.1)
171
+ rspec-core (~> 2.14.0)
172
+ rspec-expectations (~> 2.14.0)
173
+ rspec-mocks (~> 2.14.0)
174
+ rspec-core (2.14.5)
175
+ rspec-expectations (2.14.2)
176
+ diff-lcs (>= 1.1.3, < 2.0)
177
+ rspec-mocks (2.14.3)
178
+ rspec-rails (2.14.0)
179
179
  actionpack (>= 3.0)
180
180
  activesupport (>= 3.0)
181
181
  railties (>= 3.0)
182
- rspec-core (~> 2.12.0)
183
- rspec-expectations (~> 2.12.0)
184
- rspec-mocks (~> 2.12.0)
182
+ rspec-core (~> 2.14.0)
183
+ rspec-expectations (~> 2.14.0)
184
+ rspec-mocks (~> 2.14.0)
185
185
  sequel (3.21.0)
186
186
  slop (3.3.3)
187
187
  sprockets (2.2.2)
@@ -28,7 +28,7 @@ module DatabaseCleaner
28
28
  end
29
29
 
30
30
  def db
31
- @db || super
31
+ @db ||= super
32
32
  end
33
33
 
34
34
  def load_config
@@ -39,8 +39,8 @@ module DatabaseCleaner
39
39
  end
40
40
 
41
41
  def connection_class
42
- @connection_class ||= if @db && !@db.is_a?(Symbol)
43
- @db
42
+ @connection_class ||= if db && !db.is_a?(Symbol)
43
+ db
44
44
  elsif connection_hash
45
45
  lookup_from_connection_pool || establish_connection
46
46
  else
@@ -3,55 +3,41 @@ require 'active_record/connection_adapters/abstract_adapter'
3
3
  require "database_cleaner/generic/truncation"
4
4
  require 'database_cleaner/active_record/base'
5
5
  require 'database_cleaner/active_record/truncation'
6
- # This file may seem to have duplication with that of truncation, but by keeping them separate
7
- # we avoiding loading this code when it is not being used (which is the common case).
8
6
 
9
- module ActiveRecord
7
+ module DatabaseCleaner
10
8
  module ConnectionAdapters
11
-
12
- class MysqlAdapter < MYSQL_ADAPTER_PARENT
13
- def delete_table(table_name)
14
- execute("DELETE FROM #{quote_table_name(table_name)};")
15
- end
16
- end
17
-
18
- class Mysql2Adapter < MYSQL2_ADAPTER_PARENT
19
- def delete_table(table_name)
20
- execute("DELETE FROM #{quote_table_name(table_name)};")
21
- end
22
- end
23
-
24
- class JdbcAdapter < AbstractAdapter
25
- def delete_table(table_name)
26
- execute("DELETE FROM #{quote_table_name(table_name)};")
27
- end
28
- end
29
-
30
- class PostgreSQLAdapter < POSTGRES_ADAPTER_PARENT
9
+ module AbstractDeleteAdapter
31
10
  def delete_table(table_name)
32
- execute("DELETE FROM #{quote_table_name(table_name)};")
11
+ raise NotImplementedError
33
12
  end
34
13
  end
35
14
 
36
- class SQLServerAdapter < AbstractAdapter
15
+ module GenericDeleteAdapter
37
16
  def delete_table(table_name)
38
17
  execute("DELETE FROM #{quote_table_name(table_name)};")
39
18
  end
40
19
  end
41
-
42
- class OracleEnhancedAdapter < AbstractAdapter
43
- def delete_table(table_name)
44
- execute("DELETE FROM #{quote_table_name(table_name)}")
45
- end
46
- end
47
-
48
20
  end
49
21
  end
50
22
 
23
+ module ActiveRecord
24
+ module ConnectionAdapters
25
+ AbstractAdapter.class_eval { include DatabaseCleaner::ConnectionAdapters::AbstractDeleteAdapter }
26
+
27
+ JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(JdbcAdapter)
28
+ AbstractMysqlAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(AbstractMysqlAdapter)
29
+ Mysql2Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(Mysql2Adapter)
30
+ SQLiteAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(SQLiteAdapter)
31
+ SQLite3Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(SQLite3Adapter)
32
+ PostgreSQLAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(PostgreSQLAdapter)
33
+ IBM_DBAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(IBM_DBAdapter)
34
+ SQLServerAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(SQLServerAdapter)
35
+ OracleEnhancedAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::GenericDeleteAdapter } if defined?(OracleEnhancedAdapter)
36
+ end
37
+ end
51
38
 
52
39
  module DatabaseCleaner::ActiveRecord
53
40
  class Deletion < Truncation
54
-
55
41
  def clean
56
42
  connection = connection_class.connection
57
43
  connection.disable_referential_integrity do
@@ -60,8 +46,5 @@ module DatabaseCleaner::ActiveRecord
60
46
  end
61
47
  end
62
48
  end
63
-
64
49
  end
65
50
  end
66
-
67
-
@@ -2,16 +2,19 @@ require 'active_record/base'
2
2
 
3
3
  require 'active_record/connection_adapters/abstract_adapter'
4
4
 
5
- begin
6
- require 'active_record/connection_adapters/abstract_mysql_adapter'
7
- rescue LoadError
5
+ #Load available connection adapters
6
+ %w( abstract_mysql_adapter postgresql_adapter sqlite3_adapter ).each do |known_adapter|
7
+ begin
8
+ require "active_record/connection_adapters/#{known_adapter}"
9
+ rescue LoadError
10
+ end
8
11
  end
9
12
 
10
13
  require "database_cleaner/generic/truncation"
11
14
  require 'database_cleaner/active_record/base'
12
15
 
13
16
  module DatabaseCleaner
14
- module ActiveRecord
17
+ module ConnectionAdapters
15
18
 
16
19
  module AbstractAdapter
17
20
  # used to be called views but that can clash with gems like schema_plus
@@ -19,7 +22,6 @@ module DatabaseCleaner
19
22
  def database_cleaner_view_cache
20
23
  @views ||= select_values("select table_name from information_schema.views where table_schema = '#{current_database}'") rescue []
21
24
  end
22
-
23
25
  def database_cleaner_table_cache
24
26
  # the adapters don't do caching (#130) but we make the assumption that the list stays the same in tests
25
27
  @database_cleaner_tables ||= tables
@@ -36,8 +38,7 @@ module DatabaseCleaner
36
38
  end
37
39
  end
38
40
 
39
- module MysqlAdapter
40
-
41
+ module AbstractMysqlAdapter
41
42
  def truncate_table(table_name)
42
43
  execute("TRUNCATE TABLE #{quote_table_name(table_name)};")
43
44
  end
@@ -53,7 +54,6 @@ module DatabaseCleaner
53
54
 
54
55
  private
55
56
 
56
-
57
57
  def row_count(table)
58
58
  # Patch for MysqlAdapter with ActiveRecord 3.2.7 later
59
59
  # select_value("SELECT 1") #=> "1"
@@ -65,15 +65,15 @@ module DatabaseCleaner
65
65
  # but then the table is cleaned. In other words, this function tells us if the given table
66
66
  # was ever inserted into.
67
67
  def has_been_used?(table)
68
- if row_count(table) > 0
68
+ if has_rows?(table)
69
69
  true
70
70
  else
71
71
  # Patch for MysqlAdapter with ActiveRecord 3.2.7 later
72
72
  # select_value("SELECT 1") #=> "1"
73
73
  select_value(<<-SQL).to_i > 1 # returns nil if not present
74
- SELECT Auto_increment
75
- FROM information_schema.tables
76
- WHERE table_name='#{table}';
74
+ SELECT Auto_increment
75
+ FROM information_schema.tables
76
+ WHERE table_name='#{table}';
77
77
  SQL
78
78
  end
79
79
  end
@@ -83,14 +83,12 @@ module DatabaseCleaner
83
83
  end
84
84
  end
85
85
 
86
-
87
86
  module IBM_DBAdapter
88
87
  def truncate_table(table_name)
89
88
  execute("TRUNCATE #{quote_table_name(table_name)} IMMEDIATE")
90
89
  end
91
90
  end
92
91
 
93
-
94
92
  module SQLiteAdapter
95
93
  def delete_table(table_name)
96
94
  execute("DELETE FROM #{quote_table_name(table_name)};")
@@ -100,6 +98,10 @@ module DatabaseCleaner
100
98
  end
101
99
  alias truncate_table delete_table
102
100
 
101
+ def truncate_tables(tables)
102
+ tables.each { |t| truncate_table(t) }
103
+ end
104
+
103
105
  private
104
106
 
105
107
  # Returns a boolean indicating if the SQLite database is using the sqlite_sequence table.
@@ -118,6 +120,12 @@ module DatabaseCleaner
118
120
  end
119
121
  end
120
122
 
123
+ module OracleEnhancedAdapter
124
+ def truncate_table(table_name)
125
+ execute("TRUNCATE TABLE #{quote_table_name(table_name)}")
126
+ end
127
+ end
128
+
121
129
  module PostgreSQLAdapter
122
130
  def db_version
123
131
  @db_version ||= postgresql_version
@@ -160,66 +168,26 @@ module DatabaseCleaner
160
168
  select_value("SELECT true FROM #{table} LIMIT 1;")
161
169
  end
162
170
  end
163
-
164
- module OracleEnhancedAdapter
165
- def truncate_table(table_name)
166
- execute("TRUNCATE TABLE #{quote_table_name(table_name)}")
167
- end
168
- end
169
-
170
171
  end
171
172
  end
172
173
 
173
- #TODO: Remove monkeypatching and decorate the connection instead!
174
-
175
174
  module ActiveRecord
176
175
  module ConnectionAdapters
177
- # Activerecord-jdbc-adapter defines class dependencies a bit differently - if it is present, confirm to ArJdbc hierarchy to avoid 'superclass mismatch' errors.
178
- USE_ARJDBC_WORKAROUND = defined?(ArJdbc)
179
- # ActiveRecord 3.1+ support
180
- MYSQL_ABSTRACT_ADAPTER = defined?(AbstractMysqlAdapter) ? AbstractMysqlAdapter : AbstractAdapter
181
-
182
- AbstractAdapter.send(:include, ::DatabaseCleaner::ActiveRecord::AbstractAdapter)
183
-
184
- if USE_ARJDBC_WORKAROUND
185
- MYSQL_ADAPTER_PARENT = JdbcAdapter
186
- else
187
- MYSQL_ADAPTER_PARENT = MYSQL_ABSTRACT_ADAPTER
188
- class SQLiteAdapter < AbstractAdapter; end
189
- end
190
- MYSQL2_ADAPTER_PARENT = MYSQL_ABSTRACT_ADAPTER
191
-
192
- if defined?(SQLite3Adapter) && SQLite3Adapter.superclass == ActiveRecord::ConnectionAdapters::AbstractAdapter
193
- SQLITE_ADAPTER_PARENT = USE_ARJDBC_WORKAROUND ? JdbcAdapter : AbstractAdapter
194
- else
195
- SQLITE_ADAPTER_PARENT = USE_ARJDBC_WORKAROUND ? JdbcAdapter : SQLiteAdapter
196
- end
197
- POSTGRES_ADAPTER_PARENT = USE_ARJDBC_WORKAROUND ? JdbcAdapter : AbstractAdapter
198
-
199
- MYSQL_ADAPTER_PARENT.class_eval { include ::DatabaseCleaner::ActiveRecord::MysqlAdapter }
200
- MYSQL2_ADAPTER_PARENT.class_eval { include ::DatabaseCleaner::ActiveRecord::MysqlAdapter }
201
- SQLITE_ADAPTER_PARENT.class_eval { include ::DatabaseCleaner::ActiveRecord::SQLiteAdapter }
202
- POSTGRES_ADAPTER_PARENT.class_eval { include ::DatabaseCleaner::ActiveRecord::PostgreSQLAdapter }
203
-
204
- class IBM_DBAdapter < AbstractAdapter
205
- include ::DatabaseCleaner::ActiveRecord::IBM_DBAdapter
206
- end
207
-
208
- class JdbcAdapter < AbstractAdapter
209
- include ::DatabaseCleaner::ActiveRecord::TruncateOrDelete
210
- end
211
-
212
- class SQLServerAdapter < AbstractAdapter
213
- include ::DatabaseCleaner::ActiveRecord::TruncateOrDelete
214
- end
215
-
216
- class OracleEnhancedAdapter < AbstractAdapter
217
- include ::DatabaseCleaner::ActiveRecord::OracleEnhancedAdapter
218
- end
176
+ #Apply adapter decoraters where applicable (adapter should be loaded)
177
+ AbstractAdapter.class_eval { include DatabaseCleaner::ConnectionAdapters::AbstractAdapter }
178
+
179
+ JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } if defined?(JdbcAdapter)
180
+ AbstractMysqlAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(AbstractMysqlAdapter)
181
+ Mysql2Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(Mysql2Adapter)
182
+ SQLiteAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::SQLiteAdapter } if defined?(SQLiteAdapter)
183
+ SQLite3Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::SQLiteAdapter } if defined?(SQLite3Adapter)
184
+ PostgreSQLAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::PostgreSQLAdapter } if defined?(PostgreSQLAdapter)
185
+ IBM_DBAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::IBM_DBAdapter } if defined?(IBM_DBAdapter)
186
+ SQLServerAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } if defined?(SQLServerAdapter)
187
+ OracleEnhancedAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleEnhancedAdapter } if defined?(OracleEnhancedAdapter)
219
188
  end
220
189
  end
221
190
 
222
-
223
191
  module DatabaseCleaner::ActiveRecord
224
192
  class Truncation
225
193
  include ::DatabaseCleaner::ActiveRecord::Base
@@ -239,7 +207,8 @@ module DatabaseCleaner::ActiveRecord
239
207
  private
240
208
 
241
209
  def tables_to_truncate(connection)
242
- (@only || connection.database_cleaner_table_cache) - @tables_to_exclude - connection.database_cleaner_view_cache
210
+ tables_in_db = cache_tables? ? connection.database_cleaner_table_cache : connection.tables
211
+ (@only || tables_in_db) - @tables_to_exclude - connection.database_cleaner_view_cache
243
212
  end
244
213
 
245
214
  # overwritten
@@ -247,6 +216,10 @@ module DatabaseCleaner::ActiveRecord
247
216
  [::ActiveRecord::Migrator.schema_migrations_table_name]
248
217
  end
249
218
 
219
+ def cache_tables?
220
+ !!@cache_tables
221
+ end
222
+
250
223
  def pre_count?
251
224
  @pre_count == true
252
225
  end
@@ -25,7 +25,7 @@ module DatabaseCleaner
25
25
  end
26
26
 
27
27
  def db
28
- @db || :default
28
+ @db ||= :default
29
29
  end
30
30
 
31
31
  def create_strategy(*args)
@@ -67,7 +67,7 @@ module DatabaseCleaner
67
67
  end
68
68
 
69
69
  def strategy
70
- @strategy || NullStrategy
70
+ @strategy ||= NullStrategy
71
71
  end
72
72
 
73
73
  def orm=(desired_orm)
@@ -128,7 +128,7 @@ module DatabaseCleaner
128
128
  def orm_strategy(strategy)
129
129
  require "database_cleaner/#{orm.to_s}/#{strategy.to_s}"
130
130
  orm_module.const_get(strategy.to_s.capitalize)
131
- rescue LoadError => e
131
+ rescue LoadError
132
132
  if orm_module.respond_to? :available_strategies
133
133
  raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
134
134
  else