transaction-simple 1.4.0 → 1.4.0.2

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.
File without changes
@@ -1,4 +1,13 @@
1
- == Transaction::Simple 1.4.0 / 2007.02.03
1
+ == 1.4.0.2 / 2012-06-20
2
+ * Bookkeeping release that fixes install in scenarios where the RubyGem
3
+ indicated it had a runtime dependency on hoe. Thanks to Michael Grosser
4
+ (https://github.com/grosser) for the inspiration.
5
+ * Marked all files as UTF-8.
6
+
7
+ == 1.4.0.1 / 2007-10-01
8
+ * Fixed a simple bug with the #transaction method handling.
9
+
10
+ == 1.4.0 / 2007-02-03
2
11
 
3
12
  * Adding a post-rewind hook (#_post_transaction_rewind) so that complex
4
13
  graph objects can correct themselves after rewinding. See the
@@ -12,13 +21,13 @@
12
21
  - Cleaned up the code a little further.
13
22
  - Changed non-gem installer to setup.rb version 3.4.1.
14
23
 
15
- == Transaction::Simple 1.3.1
24
+ == 1.3.1
16
25
 
17
26
  * Explicitly clearing the transaction checkpoint on objects when the
18
27
  last open transaction is committed or aborted.
19
28
  * Fixed up behaviour to remove a lot of #respond_to? calls.
20
29
 
21
- == Transaction::Simple 1.3.0
30
+ == 1.3.0
22
31
 
23
32
  * Updated to fix a lot of warnings.
24
33
  * Added a per-transaction-object list of excluded instance variables.
@@ -30,16 +39,16 @@
30
39
  to an object after a transaction was started would remain.
31
40
  * Reorganised unit tests.
32
41
 
33
- == Transaction::Simple 1.2.0
42
+ == 1.2.0
34
43
 
35
44
  * Added a RubyGem.
36
45
  * Added a block form of Transaction::Simple.
37
46
 
38
- == Transaction::Simple 1.1.1
47
+ == 1.1.1
39
48
 
40
49
  * Cleaned up some documentation.
41
50
 
42
- == Transaction::Simple 1.1
51
+ == 1.1
43
52
 
44
53
  * Added Transaction::Simple::ThreadSafe for truly atomic and thread-safe
45
54
  transactions.
@@ -50,18 +59,6 @@
50
59
  explicitly committing, aborting, or rewinding the intervening
51
60
  transactions.
52
61
 
53
- == Transaction::Simple 1.0
62
+ == 1.0
54
63
 
55
64
  * Created. Initial release.
56
-
57
- == Copyright
58
- Transaction::Simple
59
- Simple object transaction support for Ruby
60
- http://rubyforge.org/projects/trans-simple/
61
-
62
- Licensed under a MIT-style licence. See Licence.txt in the main
63
- distribution for full licensing information.
64
-
65
- Copyright (c) 2003 - 2007 Austin Ziegler
66
-
67
- $Id: History.txt 50 2007-02-03 20:26:19Z austin $
@@ -0,0 +1,23 @@
1
+ == Licence
2
+
3
+ This software is available under the terms of the MIT license.
4
+
5
+ * Copyright 2003–2012 Austin Ziegler
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
8
+ this software and associated documentation files (the "Software"), to deal in
9
+ the Software without restriction, including without limitation the rights to
10
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
11
+ of the Software, and to permit persons to whom the Software is furnished to do
12
+ so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
@@ -1,15 +1,16 @@
1
- History.txt
2
- Install.txt
3
- Licence.txt
1
+ History.rdoc
2
+ Licence.rdoc
4
3
  Manifest.txt
4
+ README.rdoc
5
5
  Rakefile
6
- Readme.txt
6
+ lib/transaction-simple.rb
7
7
  lib/transaction/simple.rb
8
8
  lib/transaction/simple/group.rb
9
9
  lib/transaction/simple/threadsafe.rb
10
10
  lib/transaction/simple/threadsafe/group.rb
11
- setup.rb
12
- test/test_all.rb
11
+ research/instance_variable_defined.rb
12
+ research/special-dumpable-string.rb
13
+ research/special-dumpable.rb
13
14
  test/test_broken_graph.rb
14
15
  test/test_transaction_simple.rb
15
16
  test/test_transaction_simple_group.rb
@@ -1,43 +1,53 @@
1
1
  = Transaction::Simple for Ruby
2
2
 
3
- Transaction::Simple provides a generic way to add active transaction
4
- support to objects. The transaction methods added by this module will work
5
- with most objects, excluding those that cannot be Marshal-ed (bindings,
6
- procedure objects, IO instances, or singleton objects).
3
+ home :: http://trans-simple.rubyforge.org/
4
+ code :: https://github.com/halostatue/transaction-simple
5
+ bugs :: https://github.com/halostatue/transaction-simple/issues
6
+ rdoc :: http://trans-simple.rubyforge.org/
7
7
 
8
- The transactions supported by Transaction::Simple are not associated with
9
- any sort of data store. They are "live" transactions occurring in memory
10
- on the object itself. This is to allow "test" changes to be made to an
11
- object before making the changes permanent.
8
+ == Description
9
+
10
+ Transaction::Simple provides a generic way to add active transaction support to
11
+ objects. The transaction methods added by this module will work with most
12
+ objects, excluding those that cannot be Marshal-ed (bindings, procedure
13
+ objects, IO instances, or singleton objects).
14
+
15
+ The transactions supported by Transaction::Simple are not associated with any
16
+ sort of data store. They are "live" transactions occurring in memory on the
17
+ object itself. This is to allow "test" changes to be made to an object before
18
+ making the changes permanent.
12
19
 
13
20
  Transaction::Simple can handle an "infinite" number of transaction levels
14
- (limited only by memory). If I open two transactions, commit the second,
15
- but abort the first, the object will revert to the original version.
21
+ (limited only by memory). If I open two transactions, commit the second, but
22
+ abort the first, the object will revert to the original version.
16
23
 
17
- Transaction::Simple supports "named" transactions, so that multiple levels
18
- of transactions can be committed, aborted, or rewound by referring to the
24
+ Transaction::Simple supports "named" transactions, so that multiple levels of
25
+ transactions can be committed, aborted, or rewound by referring to the
19
26
  appropriate name of the transaction. Names may be any object except nil.
20
27
 
21
- Transaction groups are also supported. A transaction group is an object
22
- wrapper that manages a group of objects as if they were a single object
23
- for the purpose of transaction management. All transactions for this group
24
- of objects should be performed against the transaction group object, not
25
- against individual objects in the group.
28
+ Transaction groups are also supported. A transaction group is an object wrapper
29
+ that manages a group of objects as if they were a single object for the purpose
30
+ of transaction management. All transactions for this group of objects should be
31
+ performed against the transaction group object, not against individual objects
32
+ in the group.
26
33
 
27
34
  Version 1.4.0 of Transaction::Simple adds a new post-rewind hook so that
28
35
  complex graph objects of the type in tests/tc_broken_graph.rb can correct
29
36
  themselves.
30
37
 
31
- Copyright:: Copyright (c) 2003 - 2007 by Austin Ziegler
32
- Version:: 1.4.0
33
- Homepage:: http://rubyforge.org/projects/trans-simple/
34
- Licence:: MIT-Style; see Licence.txt
38
+ Version 1.4.0.1 just fixes a simple bug with #transaction method handling
39
+ during the deprecation warning.
35
40
 
36
- Thanks to David Black, Mauricio Fernandez, Patrick Hurley, Pit Capitain, and
37
- Matz for their assistance with this library.
41
+ Version 1.4.0.2 is a small update for people who use Transaction::Simple in
42
+ bundler (adding lib/transaction-simple.rb) and other scenarios where having Hoe
43
+ as a runtime dependency (a bug fixed in Hoe several years ago, but not visible
44
+ in Transaction::Simple because it has not needed a re-release). All of the
45
+ files internally have also been marked as UTF-8, ensuring full Ruby 1.9
46
+ compatibility.
38
47
 
39
48
  == Usage
40
- include 'transaction/simple'
49
+
50
+ require 'transaction/simple'
41
51
 
42
52
  v = "Hello, you." # -> "Hello, you."
43
53
  v.extend(Transaction::Simple) # -> "Hello, you."
@@ -65,6 +75,7 @@ Matz for their assistance with this library.
65
75
  v.transaction_open? # -> false
66
76
 
67
77
  == Named Transaction Usage
78
+
68
79
  v = "Hello, you." # -> "Hello, you."
69
80
  v.extend(Transaction::Simple) # -> "Hello, you."
70
81
 
@@ -97,10 +108,11 @@ Matz for their assistance with this library.
97
108
  v.transaction_open? # -> false
98
109
 
99
110
  == Block Transaction Usage
111
+
100
112
  v = "Hello, you." # -> "Hello, you."
101
113
  Transaction::Simple.start(v) do |tv|
102
- # v has been extended with Transaction::Simple and an unnamed
103
- # transaction has been started.
114
+ # v has been extended with Transaction::Simple and an unnamed transaction
115
+ # has been started.
104
116
  tv.transaction_open? # -> true
105
117
  tv.gsub!(/you/, "world") # -> "Hello, world."
106
118
 
@@ -108,11 +120,11 @@ Matz for their assistance with this library.
108
120
  tv.transaction_open? # -> true
109
121
 
110
122
  tv.gsub!(/you/, "HAL") # -> "Hello, HAL."
111
- # The following breaks out of the transaction block after
112
- # aborting the transaction.
123
+ # The following breaks out of the transaction block after aborting the
124
+ # transaction.
113
125
  tv.abort_transaction # -> "Hello, you."
114
126
  end
115
- # v still has Transaction::Simple applied from here on out.
127
+ # v still has Transaction::Simple applied from here on out.
116
128
  v.transaction_open? # -> false
117
129
 
118
130
  Transaction::Simple.start(v) do |tv|
@@ -121,9 +133,9 @@ Matz for their assistance with this library.
121
133
  tv.transaction_open? # -> true
122
134
  tv.gsub!(/you/, "HAL") # -> "Hello, HAL."
123
135
 
124
- # If #commit_transaction were called without having started a
125
- # second transaction, then it would break out of the transaction
126
- # block after committing the transaction.
136
+ # If #commit_transaction were called without having started a second
137
+ # transaction, then it would break out of the transaction block after
138
+ # committing the transaction.
127
139
  tv.commit_transaction # -> "Hello, HAL."
128
140
  tv.transaction_open? # -> true
129
141
  tv.abort_transaction # -> "Hello, you."
@@ -131,6 +143,7 @@ Matz for their assistance with this library.
131
143
  v.transaction_open? # -> false
132
144
 
133
145
  == Transaction Groups
146
+
134
147
  require 'transaction/simple/group'
135
148
 
136
149
  x = "Hello, you."
@@ -165,6 +178,7 @@ Matz for their assistance with this library.
165
178
  y = -> "And you, too."
166
179
 
167
180
  == Thread Safety
181
+
168
182
  Threadsafe versions of Transaction::Simple and Transaction::Simple::Group
169
183
  exist; these are loaded from 'transaction/simple/threadsafe' and
170
184
  'transaction/simple/threadsafe/group', respectively, and are represented in
@@ -172,24 +186,25 @@ Ruby code as Transaction::Simple::ThreadSafe and
172
186
  Transaction::Simple::ThreadSafe::Group, respectively.
173
187
 
174
188
  == Contraindications
189
+
175
190
  While Transaction::Simple is very useful, it has limitations that must be
176
191
  understood prior to using it. Transaction::Simple:
177
192
 
178
193
  * uses Marshal. Thus, any object which cannot be Marshal-ed cannot use
179
- Transaction::Simple. In my experience, this affects singleton objects
180
- more often than any other object.
194
+ Transaction::Simple. In my experience, this affects singleton objects more
195
+ often than any other object.
181
196
  * does not manage external resources. Resources external to the object and
182
197
  its instance variables are not managed at all. However, all instance
183
- variables and objects "belonging" to those instance variables are
184
- managed. If there are object reference counts to be handled,
185
- Transaction::Simple will probably cause problems.
198
+ variables and objects "belonging" to those instance variables are managed. If
199
+ there are object reference counts to be handled, Transaction::Simple will
200
+ probably cause problems.
186
201
  * is not thread-safe. In the ACID ("atomic, consistent, isolated,
187
202
  durable") test, Transaction::Simple provides consistency and durability, but
188
203
  cannot itself provide isolation. Transactions should be considered "critical
189
204
  sections" in multi-threaded applications. Thread safety of the transaction
190
205
  acquisition and release process itself can be ensured with the thread-safe
191
- version, Transaction::Simple::ThreadSafe. With transaction groups, some
192
- level of atomicity is assured.
206
+ version, Transaction::Simple::ThreadSafe. With transaction groups, some level
207
+ of atomicity is assured.
193
208
  * does not maintain Object#__id__ values on rewind or abort. This only affects
194
209
  complex self-referential graphs. tests/tc_broken_graph.rb demonstrates this
195
210
  and its mitigation with the new post-rewind hook. #_post_transaction_rewind.
@@ -201,4 +216,4 @@ understood prior to using it. Transaction::Simple:
201
216
  * Can be a memory hog if you use many levels of transactions on many
202
217
  objects.
203
218
 
204
- $Id: Readme.txt 50 2007-02-03 20:26:19Z austin $
219
+ :include: Licence.rdoc
data/Rakefile CHANGED
@@ -1,122 +1,24 @@
1
- #! /usr/bin/env rake
2
- #--
3
- # Transaction::Simple
4
- # Simple object transaction support for Ruby
5
- # http://rubyforge.org/projects/trans-simple/
6
- # Version 1.4.0
7
- #
8
- # Licensed under a MIT-style licence. See Licence.txt in the main
9
- # distribution for full licensing information.
10
- #
11
- # Copyright (c) 2003 - 2007 Austin Ziegler
12
- #
13
- # $Id: Rakefile 51 2007-02-03 21:45:27Z austin $
14
- #++
1
+ # -*- ruby encoding: utf-8 -*-
15
2
 
16
3
  require 'rubygems'
17
4
  require 'hoe'
18
5
 
19
- $LOAD_PATH.unshift('lib')
6
+ Hoe.plugin :doofus
7
+ Hoe.plugin :gemspec
8
+ Hoe.plugin :rubyforge
9
+ Hoe.plugin :git
20
10
 
21
- require 'transaction/simple'
11
+ Hoe.spec 'transaction-simple' do
12
+ self.rubyforge_name = "trans-simple"
22
13
 
23
- TSVER = Transaction::Simple::TRANSACTION_SIMPLE_VERSION
24
- DISTDIR = "transaction-simple-#{TSVER}"
25
- TARFILE = "pkg/#{DISTDIR}.tar.gz"
26
- MANIFEST = File.read("Manifest.txt").split
14
+ developer('Austin Ziegler', 'austin@rubyforge.org')
27
15
 
28
- Hoe.new "transaction-simple", TSVER do |p|
29
- p.rubyforge_name = "trans-simple"
30
- # This is a lie becasue I will continue to use Archive::Tar::Minitar.
31
- p.need_tar = false
32
- # need_zip - Should package create a zipfile? [default: false]
16
+ self.remote_rdoc_dir = ''
17
+ self.rsync_args << ' --exclude=statsvn/'
33
18
 
34
- p.author = "Austin Ziegler"
35
- p.email = "austin@rubyforge.org"
36
- p.url = "http://rubyforge.org/projects/trans-simple"
37
- p.summary = "Simple object transaction support for Ruby."
38
- p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
39
- p.description = p.paragraphs_of("Readme.txt", 1..1).join("\n\n")
40
-
41
- p.spec_extras[:required_ruby_version] = ">=1.8.2"
42
- p.spec_extras[:extra_rdoc_files] = MANIFEST.grep(/txt$/) -
43
- ["Manifest.txt"]
44
- p.clean_globs << "./**/log"
45
-
46
- # extra_deps - An array of rubygem dependencies.
47
- # clean_globs - An array of file patterns to delete on clean.
48
- # rdoc_pattern - A regexp to match documentation files against the manifest.
49
- # spec_extras - A hash of extra values to set in the gemspec.
50
- # test_globs - An array of test file patterns [default: test/**/test_*.rb]
51
-
52
- # bin_files
53
- # lib_files
54
- # spec
55
- # test_files
19
+ self.history_file = 'History.rdoc'
20
+ self.readme_file = 'README.rdoc'
21
+ self.extra_rdoc_files = FileList["*.rdoc"].to_a
56
22
  end
57
23
 
58
- desc "Build a Transaction::Simple .tar.gz distribution."
59
- task :tar => [ TARFILE ]
60
- file TARFILE => [ :test ] do |t|
61
- require 'archive/tar/minitar'
62
- require 'zlib'
63
- files = MANIFEST.map { |f|
64
- fn = File.join(DISTDIR, f)
65
- tm = File.stat(f).mtime
66
-
67
- if File.directory?(f)
68
- { :name => fn, :mode => 0755, :dir => true, :mtime => tm }
69
- else
70
- mode = if f =~ %r{^bin}
71
- 0755
72
- else
73
- 0644
74
- end
75
- data = File.read(f)
76
- { :name => fn, :mode => mode, :data => data, :size => data.size,
77
- :mtime => tm }
78
- end
79
- }
80
-
81
- begin
82
- unless File.directory?(File.dirname(t.name))
83
- require 'fileutils'
84
- File.mkdir_p File.dirname(t.name)
85
- end
86
- tf = File.open(t.name, 'wb')
87
- gz = Zlib::GzipWriter.new(tf)
88
- tw = Archive::Tar::Minitar::Writer.new(gz)
89
-
90
- files.each do |entry|
91
- if entry[:dir]
92
- tw.mkdir(entry[:name], entry)
93
- else
94
- tw.add_file_simple(entry[:name], entry) { |os|
95
- os.write(entry[:data])
96
- }
97
- end
98
- end
99
- ensure
100
- tw.close if tw
101
- gz.close if gz
102
- end
103
- end
104
- task :package => [ TARFILE ]
105
-
106
- task :build_manifest do |t|
107
- require 'find'
108
-
109
- paths = []
110
- Find.find(".") do |path|
111
- next if File.directory?(path)
112
- next if path =~ /\.svn/
113
- next if path =~ %r{/research/}
114
- next if path =~ /\.swp$/
115
- next if path =~ /~$/
116
- paths << path.sub(%r{^\./}, '')
117
- end
118
-
119
- File.open("Manifest.txt", "w") do |f|
120
- f.puts paths.sort.join("\n")
121
- end
122
- end
24
+ # vim: syntax=ruby
@@ -0,0 +1,5 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ require 'transaction/simple'
4
+
5
+ # vim: syntax=ruby
@@ -1,19 +1,6 @@
1
- # :title: Transaction::Simple -- Active Object Transaction Support for Ruby
2
- # :main: Readme.txt
3
-
4
- #--
5
- # Transaction::Simple
6
- # Simple object transaction support for Ruby
7
- # http://rubyforge.org/projects/trans-simple/
8
- # Version 1.4.0
9
- #
10
- # Licensed under a MIT-style licence. See Licence.txt in the main
11
- # distribution for full licensing information.
12
- #
13
- # Copyright (c) 2003 - 2007 Austin Ziegler
14
- #
15
- # $Id: simple.rb 50 2007-02-03 20:26:19Z austin $
16
- #++
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ # :main: README.rdoc
17
4
 
18
5
  # The "Transaction" namespace can be used for additional transaction support
19
6
  # objects and modules.
@@ -44,13 +31,19 @@ module Transaction
44
31
  :cannot_commit_named_transaction => te % "cannot commit nonexistant transaction %s.",
45
32
  :cannot_start_empty_block_transaction => te % "cannot start a block transaction with no objects.",
46
33
  :cannot_obtain_transaction_lock => te % "cannot obtain transaction lock for #%s.",
34
+ :transaction => "Transaction",
35
+ :opened => "open",
36
+ :closed => "closed",
37
+ :transaction_name => "Transaction Name",
38
+ :start_transaction => "Start Transaction",
39
+ :rewind_transaction => "Rewind Transaction",
40
+ :commit_transaction => "Commit Transaction",
41
+ :abort_transaction => "Abort Transaction",
47
42
  }
48
43
  end
49
44
 
50
- # = Transaction::Simple for Ruby
51
- # Simple object transaction support for Ruby
52
45
  module Transaction::Simple
53
- TRANSACTION_SIMPLE_VERSION = '1.4.0'
46
+ VERSION = TRANSACTION_SIMPLE_VERSION = '1.4.0.2'
54
47
 
55
48
  class << self
56
49
  # Sets the Transaction::Simple debug object. It must respond to #<<.
@@ -66,6 +59,10 @@ module Transaction::Simple
66
59
  end
67
60
  end
68
61
 
62
+ # Set to +true+ if you want the checkpoint printed with debugging
63
+ # messages where it matters.
64
+ attr_accessor :debug_with_checkpoint
65
+
69
66
  # Returns +true+ if we are debugging.
70
67
  def debugging?
71
68
  defined? @debugging and @debugging
@@ -76,31 +73,70 @@ module Transaction::Simple
76
73
  @tdi ||= ""
77
74
  @tdi
78
75
  end
76
+
77
+ # Fast debugging.
78
+ def debug(format, *args)
79
+ return unless debugging?
80
+ debug_io << (format % args)
81
+ end
82
+ end
83
+
84
+ def ___tmessage
85
+ Transaction::Messages
86
+ end
87
+ private :___tmessage
88
+
89
+ def ___tdebug(char, format, *args)
90
+ return unless Transaction::Simple.debugging?
91
+ if @__transaction_level__ > 0
92
+ Transaction::Simple.debug "#{char * @__transaction_level__} #{format}", args
93
+ else
94
+ Transaction::Simple.debug "#{format}", args
95
+ end
79
96
  end
97
+ private :___tdebug
98
+
99
+ def ___tdebug_checkpoint
100
+ return unless Transaction::Simple.debugging?
101
+ return unless Transaction::Simple.debug_with_checkpoint
102
+
103
+ ___tdebug '|', '%s', @__transaction_checkpoint__.inspect
104
+ end
105
+ private :___tdebug_checkpoint
80
106
 
81
107
  # If +name+ is +nil+ (default), then returns +true+ if there is currently
82
108
  # a transaction open. If +name+ is specified, then returns +true+ if there
83
109
  # is currently a transaction known as +name+ open.
84
110
  def transaction_open?(name = nil)
85
111
  defined? @__transaction_checkpoint__ or @__transaction_checkpoint__ = nil
112
+
113
+ has_t = nil
114
+
86
115
  if name.nil?
87
- Transaction::Simple.debug_io << "Transaction " << "[#{(@__transaction_checkpoint__.nil?) ? 'closed' : 'open'}]\n" if Transaction::Simple.debugging?
88
- return (not @__transaction_checkpoint__.nil?)
116
+ has_t = (not @__transaction_checkpoint__.nil?)
89
117
  else
90
- Transaction::Simple.debug_io << "Transaction(#{name.inspect}) " << "[#{(@__transaction_checkpoint__.nil?) ? 'closed' : 'open'}]\n" if Transaction::Simple.debugging?
91
- return ((not @__transaction_checkpoint__.nil?) and @__transaction_names__.include?(name))
118
+ has_t = ((not @__transaction_checkpoint__.nil?) and
119
+ @__transaction_names__.include?(name))
92
120
  end
121
+
122
+ ___tdebug '>', "%s [%s]", ___tmessage[:transaction], ___tmessage[has_t ? :opened : :closed]
123
+
124
+ has_t
93
125
  end
94
126
 
95
127
  # Returns the current name of the transaction. Transactions not explicitly
96
128
  # named are named +nil+.
97
129
  def transaction_name
98
- raise Transaction::TransactionError, Transaction::Messages[:no_transaction_open] if @__transaction_checkpoint__.nil?
99
- Transaction::Simple.debug_io << "#{'|' * @__transaction_level__} " << "Transaction Name: #{@__transaction_names__[-1].inspect}\n" if Transaction::Simple.debugging?
100
- if @__transaction_names__[-1].kind_of?(String)
101
- @__transaction_names__[-1].dup
130
+ raise Transaction::TransactionError, ___tmessage[:no_transaction_open] if @__transaction_checkpoint__.nil?
131
+
132
+ name = @__transaction_names__.last
133
+
134
+ ___tdebug '|', "%s(%s)", ___tmessage[:transaction_name], name.inspect
135
+
136
+ if name.kind_of?(String)
137
+ name.dup
102
138
  else
103
- @__transaction_names__[-1]
139
+ name
104
140
  end
105
141
  end
106
142
 
@@ -114,17 +150,15 @@ module Transaction::Simple
114
150
 
115
151
  name = name.dup.freeze if name.kind_of?(String)
116
152
 
117
- raise Transaction::TransactionError, Transaction::Messages[:unique_names] if name and @__transaction_names__.include?(name)
153
+ raise Transaction::TransactionError, ___tmessage[:unique_names] if name and @__transaction_names__.include?(name)
118
154
 
119
155
  @__transaction_names__ << name
120
156
  @__transaction_level__ += 1
121
157
 
122
- if Transaction::Simple.debugging?
123
- ss = "(#{name.inspect})"
124
- ss = "" unless ss
158
+ ___tdebug '>', "%s(%s)", ___tmessage[:start_transaction], name.inspect
159
+ ___tdebug_checkpoint
125
160
 
126
- Transaction::Simple.debug_io << "#{'>' * @__transaction_level__} " << "Start Transaction#{ss}\n"
127
- end
161
+ checkpoint = Marshal.dump(self)
128
162
 
129
163
  @__transaction_checkpoint__ = Marshal.dump(self)
130
164
  end
@@ -185,36 +219,39 @@ module Transaction::Simple
185
219
  # parent.abort_transaction
186
220
  # puts parent.valid? # => true
187
221
  def rewind_transaction(name = nil)
188
- raise Transaction::TransactionError, Transaction::Messages[:cannot_rewind_no_transaction] if @__transaction_checkpoint__.nil?
222
+ raise Transaction::TransactionError, ___tmessage[:cannot_rewind_no_transaction] if @__transaction_checkpoint__.nil?
189
223
 
190
- # Check to see if we are trying to rewind a transaction that is
191
- # outside of the current transaction block.
224
+ # Check to see if we are trying to rewind a transaction that is outside
225
+ # of the current transaction block.
192
226
  defined? @__transaction_block__ or @__transaction_block__ = nil
193
227
  if @__transaction_block__ and name
194
228
  nix = @__transaction_names__.index(name) + 1
195
- raise Transaction::TransactionError, Transaction::Messages[:cannot_rewind_transaction_before_block] if nix < @__transaction_block__
229
+ raise Transaction::TransactionError, ___tmessage[:cannot_rewind_transaction_before_block] if nix < @__transaction_block__
196
230
  end
197
231
 
198
232
  if name.nil?
199
233
  checkpoint = @__transaction_checkpoint__
200
234
  __rewind_this_transaction
201
235
  @__transaction_checkpoint__ = checkpoint
202
- ss = "" if Transaction::Simple.debugging?
203
236
  else
204
- raise Transaction::TransactionError, Transaction::Messages[:cannot_rewind_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
205
- ss = "(#{name})" if Transaction::Simple.debugging?
237
+ raise Transaction::TransactionError, ___tmessage[:cannot_rewind_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
206
238
 
207
- while @__transaction_names__[-1] != name
239
+ while @__transaction_names__.last != name
240
+ ___tdebug_checkpoint
208
241
  @__transaction_checkpoint__ = __rewind_this_transaction
209
- Transaction::Simple.debug_io << "#{'|' * @__transaction_level__} " << "Rewind Transaction#{ss}\n" if Transaction::Simple.debugging?
242
+ ___tdebug '<', ___tmessage[:rewind_transaction], name
210
243
  @__transaction_level__ -= 1
211
244
  @__transaction_names__.pop
212
245
  end
246
+
213
247
  checkpoint = @__transaction_checkpoint__
214
248
  __rewind_this_transaction
215
249
  @__transaction_checkpoint__ = checkpoint
216
250
  end
217
- Transaction::Simple.debug_io << "#{'|' * @__transaction_level__} " << "Rewind Transaction#{ss}\n" if Transaction::Simple.debugging?
251
+
252
+ ___tdebug '|', "%s(%s)", ___tmessage[:rewind_transaction], name.inspect
253
+ ___tdebug_checkpoint
254
+
218
255
  self
219
256
  end
220
257
 
@@ -230,7 +267,7 @@ module Transaction::Simple
230
267
  # (Transaction::Simple.start), then the execution of the block will be
231
268
  # halted with +break+ +self+.
232
269
  def abort_transaction(name = nil)
233
- raise Transaction::TransactionError, Transaction::Messages[:cannot_abort_no_transaction] if @__transaction_checkpoint__.nil?
270
+ raise Transaction::TransactionError, ___tmessage[:cannot_abort_no_transaction] if @__transaction_checkpoint__.nil?
234
271
 
235
272
  # Check to see if we are trying to abort a transaction that is outside
236
273
  # of the current transaction block. Otherwise, raise TransactionAborted
@@ -238,8 +275,7 @@ module Transaction::Simple
238
275
  defined? @__transaction_block__ or @__transaction_block__ = nil
239
276
  if @__transaction_block__ and name
240
277
  nix = @__transaction_names__.index(name) + 1
241
- raise Transaction::TransactionError, Transaction::Messages[:cannot_abort_transaction_before_block] if nix < @__transaction_block__
242
-
278
+ raise Transaction::TransactionError, ___tmessage[:cannot_abort_transaction_before_block] if nix < @__transaction_block__
243
279
  raise Transaction::TransactionAborted if @__transaction_block__ == nix
244
280
  end
245
281
 
@@ -248,7 +284,7 @@ module Transaction::Simple
248
284
  if name.nil?
249
285
  __abort_transaction(name)
250
286
  else
251
- raise Transaction::TransactionError, Transaction::Messages[:cannot_abort_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
287
+ raise Transaction::TransactionError, ___tmessage[:cannot_abort_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
252
288
  __abort_transaction(name) while @__transaction_names__.include?(name)
253
289
  end
254
290
 
@@ -262,7 +298,7 @@ module Transaction::Simple
262
298
  # then all transactions are closed and committed until the named
263
299
  # transaction is reached.
264
300
  def commit_transaction(name = nil)
265
- raise Transaction::TransactionError, Transaction::Messages[:cannot_commit_no_transaction] if @__transaction_checkpoint__.nil?
301
+ raise Transaction::TransactionError, ___tmessage[:cannot_commit_no_transaction] if @__transaction_checkpoint__.nil?
266
302
  @__transaction_block__ ||= nil
267
303
 
268
304
  # Check to see if we are trying to commit a transaction that is outside
@@ -270,7 +306,7 @@ module Transaction::Simple
270
306
  # TransactionCommitted if they are the same.
271
307
  if @__transaction_block__ and name
272
308
  nix = @__transaction_names__.index(name) + 1
273
- raise Transaction::TransactionError, Transaction::Messages[:cannot_commit_transaction_before_block] if nix < @__transaction_block__
309
+ raise Transaction::TransactionError, ___tmessage[:cannot_commit_transaction_before_block] if nix < @__transaction_block__
274
310
 
275
311
  raise Transaction::TransactionCommitted if @__transaction_block__ == nix
276
312
  end
@@ -278,21 +314,23 @@ module Transaction::Simple
278
314
  raise Transaction::TransactionCommitted if @__transaction_block__ == @__transaction_level__
279
315
 
280
316
  if name.nil?
281
- ss = "" if Transaction::Simple.debugging?
317
+ ___tdebug "<", "%s(%s)", ___tmessage[:commit_transaction], name.inspect
282
318
  __commit_transaction
283
- Transaction::Simple.debug_io << "#{'<' * @__transaction_level__} " << "Commit Transaction#{ss}\n" if Transaction::Simple.debugging?
284
319
  else
285
- raise Transaction::TransactionError, Transaction::Messages[:cannot_commit_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
286
- ss = "(#{name})" if Transaction::Simple.debugging?
320
+ raise Transaction::TransactionError, ___tmessage[:cannot_commit_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
287
321
 
288
- while @__transaction_names__[-1] != name
289
- Transaction::Simple.debug_io << "#{'<' * @__transaction_level__} " << "Commit Transaction#{ss}\n" if Transaction::Simple.debugging?
322
+ while @__transaction_names__.last != name
323
+ ___tdebug "<", "%s(%s)", ___tmessage[:commit_transaction], name.inspect
290
324
  __commit_transaction
325
+ ___tdebug_checkpoint
291
326
  end
292
- Transaction::Simple.debug_io << "#{'<' * @__transaction_level__} " << "Commit Transaction#{ss}\n" if Transaction::Simple.debugging?
327
+
328
+ ___tdebug "<", "%s(%s)", ___tmessage[:commit_transaction], name.inspect
293
329
  __commit_transaction
294
330
  end
295
331
 
332
+ ___tdebug_checkpoint
333
+
296
334
  self
297
335
  end
298
336
 
@@ -317,19 +355,19 @@ module Transaction::Simple
317
355
  else nil
318
356
  end
319
357
 
320
- if method
321
- warn "The #transaction method has been deprecated. Use #{method} instead."
358
+ if _method
359
+ warn "The #transaction method has been deprecated. Use #{_method} instead."
322
360
  else
323
361
  warn "The #transaction method has been deprecated."
324
362
  end
325
363
 
326
- case method
364
+ case _method
327
365
  when :transaction_name
328
- __send__ method
366
+ __send__ _method
329
367
  when nil
330
368
  nil
331
369
  else
332
- __send__ method, name
370
+ __send__ _method, name
333
371
  end
334
372
  end
335
373
 
@@ -344,7 +382,7 @@ module Transaction::Simple
344
382
 
345
383
  class << self
346
384
  def __common_start(name, vars, &block)
347
- raise Transaction::TransactionError, Transaction::Messages[:cannot_start_empty_block_transaction] if vars.empty?
385
+ raise Transaction::TransactionError, ___tmessage[:cannot_start_empty_block_transaction] if vars.empty?
348
386
 
349
387
  if block
350
388
  begin
@@ -414,30 +452,25 @@ module Transaction::Simple
414
452
  def __abort_transaction(name = nil) #:nodoc:
415
453
  @__transaction_checkpoint__ = __rewind_this_transaction
416
454
 
417
- if Transaction::Simple.debugging?
418
- if name.nil?
419
- ss = ""
420
- else
421
- ss = "(#{name.inspect})"
422
- end
423
-
424
- Transaction::Simple.debug_io << "#{'<' * @__transaction_level__} " << "Abort Transaction#{ss}\n"
425
- end
455
+ ___tdebug '<', "%s(%s)", ___tmessage[:abort_transaction], name.inspect
456
+ ___tdebug_checkpoint
426
457
 
427
458
  @__transaction_level__ -= 1
428
459
  @__transaction_names__.pop
460
+
429
461
  if @__transaction_level__ < 1
430
462
  @__transaction_level__ = 0
431
463
  @__transaction_names__ = []
432
464
  @__transaction_checkpoint__ = nil
433
465
  end
434
466
  end
467
+ private :__abort_transaction
435
468
 
436
469
  SKIP_TRANSACTION_VARS = %w(@__transaction_checkpoint__ @__transaction_level__)
437
470
 
438
471
  def __rewind_this_transaction #:nodoc:
439
472
  defined? @__transaction_checkpoint__ or @__transaction_checkpoint__ = nil
440
- raise Transaction::TransactionError, Transaction::Messages[:cannot_rewind_no_transaction] if @__transaction_checkpoint__.nil?
473
+ raise Transaction::TransactionError, ___tmessage[:cannot_rewind_no_transaction] if @__transaction_checkpoint__.nil?
441
474
  rr = Marshal.restore(@__transaction_checkpoint__)
442
475
 
443
476
  replace(rr) if respond_to?(:replace)
@@ -461,10 +494,11 @@ module Transaction::Simple
461
494
  $-w = w # 20070203 OH is this very UGLY
462
495
  res
463
496
  end
497
+ private :__rewind_this_transaction
464
498
 
465
499
  def __commit_transaction #:nodoc:
466
500
  defined? @__transaction_checkpoint__ or @__transaction_checkpoint__ = nil
467
- raise Transaction::TransactionError, Transaction::Messages[:cannot_commit_no_transaction] if @__transaction_checkpoint__.nil?
501
+ raise Transaction::TransactionError, ___tmessage[:cannot_commit_no_transaction] if @__transaction_checkpoint__.nil?
468
502
  old = Marshal.restore(@__transaction_checkpoint__)
469
503
  w, $-w = $-w, false # 20070203 OH is this very UGLY
470
504
  @__transaction_checkpoint__ = old.instance_variable_get(:@__transaction_checkpoint__)
@@ -479,8 +513,7 @@ module Transaction::Simple
479
513
  @__transaction_checkpoint__ = nil
480
514
  end
481
515
  end
482
-
483
- private :__abort_transaction
484
- private :__rewind_this_transaction
485
516
  private :__commit_transaction
486
517
  end
518
+
519
+ # vim: syntax=ruby