Skip to content

Instantly share code, notes, and snippets.

@smerritt
Created December 18, 2009 21:00
Show Gist options
  • Save smerritt/259758 to your computer and use it in GitHub Desktop.
Save smerritt/259758 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# To see:
#
# 1. gem bundle
# 2. bin/spec bug.rb
Bundler.require_env
DataMapper.setup(:repo1, 'sqlite3:///tmp/repo1.db')
DataMapper.setup(:repo2, 'sqlite3:///tmp/repo2.db')
class Model1
include DataMapper::Resource
def self.default_repository_name() :repo1 end
property :id, Serial
end
class Model2
include DataMapper::Resource
def self.default_repository_name() :repo2 end
property :id, Serial
end
describe "transactions" do
it "should be per-adapter" do
Model1.new.transaction do
Model2.repository.adapter.current_transaction.should be_nil
end
end
end
gem 'dm-core', '=0.10.2'
gem "data_objects", '=0.10'
gem "do_sqlite3", '=0.10'
gem 'rspec', :require_as => 'spec'
#!/usr/bin/env ruby
# To see:
#
# 1. gem bundle
# 2. bin/spec potential_fix.rb
Bundler.require_env
DataMapper.setup(:repo1, 'sqlite3:///tmp/repo1.db')
DataMapper.setup(:repo2, 'sqlite3:///tmp/repo2.db')
class Model1
include DataMapper::Resource
def self.default_repository_name() :repo1 end
property :id, Serial
end
class Model2
include DataMapper::Resource
def self.default_repository_name() :repo2 end
property :id, Serial
end
# A potential fix
module DataMapper
class Transaction
module Adapter
def transactions
# The replaced implementation is the following:
#
# Thread.current[:dm_transactions] ||= []
Thread.current[:dm_transactions] ||= {}
Thread.current[:dm_transactions][self] ||= []
end
end
end
end
describe "transactions" do
it "should be per-adapter" do
Model1.new.transaction do
Model2.repository.adapter.current_transaction.should be_nil
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment