[LRUG] Handling opening and closing of transactions manually in ActiveRecord

Aanand Prasad aanand.prasad at gmail.com
Fri Oct 8 04:40:22 PDT 2010


If anyone's interested, here's how you can split out any block-based wrapper
method using Fibers:

http://gist.github.com/616653

On Fri, Oct 8, 2010 at 12:20 PM, Murray Steele <murray.steele at gmail.com>wrote:

> As penance, I dug a little.  It looks like you'd need to spin up a
> block-less version of
> active_record/connection_adapters/abstract/database_statements.rb
> #transaction (rails 2.3.x).  Could be painful because that method 'aint
> simple.
>
> However.  I wonder.  If you're on 1.9 could something cunning be done with
> Fibers being passed into the block form of transaction ?
>
> However(again) might it be easier to just:
>
> Before(:all) do
>   # create whatever
> end
>
> After(:all) do
>   # destroy whatever
>   # or
>   # use database_cleaner to truncate the DB
> end
>
> ?
>
> On 8 October 2010 12:07, Murray Steele <murray.steele at gmail.com> wrote:
>
>> Ecch.  Actually reading the linked-to article reveals what you're trying
>> to do.  My comment is pointless.  Ignore me.  I wasn't here.
>>
>>
>> On 8 October 2010 12:03, Murray Steele <murray.steele at gmail.com> wrote:
>>
>>> I thought that RSpec (via rspec-rails) respected the
>>> use_transactional_fixtures (e.g. wrap all the specs in a transaction) stuff
>>> in ActiveSupport::TestCase?  Am I wrong?
>>>
>>>
>>> On 8 October 2010 11:40, Matthew Willson <matthew at playlouder.com> wrote:
>>>
>>>> Can't speak for datamapper, or for RSpec infact, but here's a little
>>>> test mixin we use with Sequel and test/spec in case a similar approach
>>>> works.
>>>>
>>>> module TransactionalTestCase
>>>>  def run(*args, &block)
>>>>    database.transaction do
>>>>      super
>>>>      raise Sequel::Error::Rollback
>>>>    end
>>>>  end
>>>> end
>>>>
>>>> On 8 Oct 2010, at 11:32, Tim Cowlishaw wrote:
>>>>
>>>> > Hey all,
>>>> >
>>>> > I stumbled across Xavier Shay's article on setting up RSpec to use
>>>> > transactional before(:all) blocks with datamapper the other day
>>>> > (
>>>> http://rhnh.net/2010/10/06/transactional-before-all-with-rspec-and-datamapper
>>>> ),
>>>> > which is convenient as it's something I've been meaning to do for ages
>>>> > on one of our codebases that has a rather large test suite with lots
>>>> > of setup in before(:each) blocks. Therefore, I thought I'd spend a bit
>>>> > of time trying to get his solution working with ActiveRecord, rather
>>>> > than Datamapper. However, because ActiveRecord's transaction interface
>>>> > requires you to pass a block to the transaction method, containing the
>>>> > work to be done within the transaction, rather than offering
>>>> > transaction.begin and transaction.rollback methods a la datamapper,
>>>> > this is a little trickier than expected. There is
>>>> > ActiveRecord::Base.connection.begin_db_transaction, and
>>>> > ActiveRecord::Base.rollback_db_transaction, but these don't handle
>>>> > emulating nesting transactions with savepoints as
>>>> > ActiveRecord::Base.transaction does, meaning I'd have to reimplement
>>>> > that seperately - not an insurmountable task, but a sufficiently
>>>> > complex bit of work to make me nervous. Therefore, has anyone run into
>>>> > a similar need (to make before(:all) blocks transactional in rspec)
>>>> > before? if so, how did you manage it?
>>>> >
>>>> > Cheers,
>>>> >
>>>> > Tim
>>>> > _______________________________________________
>>>> > Chat mailing list
>>>> > Chat at lists.lrug.org
>>>> > http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>>>>
>>>> --
>>>> Matthew Willson
>>>> Development Lead, MSP / Playlouder
>>>>
>>>> _______________________________________________
>>>> Chat mailing list
>>>> Chat at lists.lrug.org
>>>> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>>>>
>>>
>>>
>>
>
> _______________________________________________
> Chat mailing list
> Chat at lists.lrug.org
> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20101008/41d3f8be/attachment-0003.html>


More information about the Chat mailing list