transactional-factories 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,8 @@
1
+
2
+ =Version 0.4.0 - 2010-10-29=
3
+
4
+ * Added support for testcase.transaction_class method to allow a testcase to specify which connection to use for transactions.
5
+
6
+ =Version 0.5.0 - 2010-10-29=
7
+
8
+ * Added support for multiple simultaneous transactions. 0.4.0 did not really make any sense without this.
data/README.rdoc CHANGED
@@ -32,13 +32,10 @@ transactional-factories provides self.setup and self.teardown callbacks that are
32
32
 
33
33
  === Multiple Database Connections
34
34
 
35
- If you have an application that connects to multiple databases, you will need to tell transactional-factories which connection to use when creating a transaction. This is done at with another class-level callback: TestCase.transaction_class. E.g.,
35
+ If you have an application that connects to multiple databases, transactional-factories needs to create transactions for all of them. This is done at with another class-level accessor: TestCase.transaction_classes. In the example below two transactions (to two different databases) are created:
36
36
 
37
37
  class MyModelTest < Test::Unit::TestCase
38
- def self.transaction_class
39
- # Default is ActiveRecord::Base
40
- ModelWithDifferentDatabaseConnection
41
- end
38
+ self.transaction_classes = [ModelWithDifferentDatabaseConnection, ActiveRecord::Base]
42
39
  end
43
40
 
44
41
  === Dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -28,6 +28,7 @@ module TransactionalFactories
28
28
  include ClassMethods
29
29
  alias_method_chain 'suite', 'transactions'
30
30
  cattr_accessor :use_transactional_factories
31
+ cattr_accessor :transaction_classes
31
32
  end
32
33
  end
33
34
  end
@@ -10,16 +10,20 @@ module TransactionalFactories
10
10
  raise TransactionalFixturesEnabled, 'transactional-factories does not work with transactional fixtures. Please set use_transactional_fixtures = false.'
11
11
  end
12
12
  end
13
- transaction_class = testcase.class.respond_to?(:transaction_class) ? testcase.class.transaction_class : ActiveRecord::Base
13
+ transaction_classes = testcase.class.transaction_classes if testcase.class.respond_to?(:transaction_classes)
14
+ unless transaction_classes.nil? or transaction_classes.is_a?(Enumerable)
15
+ transaction_classes = [transaction_classes]
16
+ end
17
+ transaction_classes ||= [ActiveRecord::Base]
18
+
14
19
  if @tests.any? { |testcase| testcase.method_name != 'default_test' }
15
- transaction_class.transaction(:requires_new => true) do
20
+ run_rollback_transactions(transaction_classes) do
16
21
  testcase.class.setup if testcase
17
22
  begin
18
23
  yield(STARTED, name)
19
24
  @tests.each do |test|
20
- transaction_class.transaction(:requires_new => true) do
25
+ run_rollback_transactions(transaction_classes) do
21
26
  test.run(result, &progress_block)
22
- raise ActiveRecord::Rollback
23
27
  end
24
28
  end
25
29
  yield(FINISHED, name)
@@ -29,9 +33,20 @@ module TransactionalFactories
29
33
  testcase.class.teardown if testcase.class.respond_to?(:teardown)
30
34
  end
31
35
  Timecop.return if defined?(Timecop)
32
- raise ActiveRecord::Rollback
33
36
  end
34
37
  end
35
38
  end
39
+
40
+ # Recursively setup transactions that roll back...
41
+ def run_rollback_transactions(transaction_classes, &block)
42
+ transaction_classes.first.transaction(:requires_new => true) do
43
+ if transaction_classes.size <= 1
44
+ yield
45
+ else
46
+ run_rollback_transactions(transaction_classes[1..transaction_classes.size-1], &block)
47
+ end
48
+ raise ActiveRecord::Rollback
49
+ end
50
+ end
36
51
  end
37
52
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 4
7
+ - 5
8
8
  - 0
9
- version: 0.4.0
9
+ version: 0.5.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrew Carpenter
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-29 00:00:00 -07:00
18
+ date: 2010-11-01 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -56,6 +56,7 @@ extra_rdoc_files:
56
56
  - LICENSE-MIT
57
57
  - README.rdoc
58
58
  files:
59
+ - CHANGELOG
59
60
  - LICENSE-MIT
60
61
  - README.rdoc
61
62
  - Rakefile