This repository was archived by the owner on Apr 17, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 41
This repository was archived by the owner on Apr 17, 2018. It is now read-only.
Can't swap the value of a unique property between two objects #22
Copy link
Copy link
Open
Labels
Description
Hopefully the ticket title explains the problem well enough, I'm too tired to go into prose...
This came about with integers, as we were trying to re-implement a simple for of is-list. But I've written an example from scratch to illustrate the problem:
require 'rubygems'
require 'dm-core'
require 'dm-validations'
require 'spec'
SQLITE_FILE = File.join(`pwd`.chomp, "test.db")
DataMapper.setup(:default, "sqlite3:#{SQLITE_FILE}")
DataMapper.setup(:reloaded, "sqlite3:#{SQLITE_FILE}")
class Farm
include DataMapper::Resource
property :id, Serial
has n, :cows, :order => [:cow_id]
end
class Cow
include DataMapper::Resource
property :id, Serial
property :cow_id, Integer
property :name, String
# Comment out the following line to make the spec pass
validates_is_unique :name, :scope => [:farm]
belongs_to :farm
end
module IdentityMapHelper
def with_db_reconnect(&blk)
original_repository = DataMapper::Repository.context.pop
repository(:reloaded, &blk)
DataMapper::Repository.context << original_repository
end
end
Spec::Runner.configure do |config|
include IdentityMapHelper
config.before(:each) do
Farm.auto_migrate!
Cow.auto_migrate!
end
config.before(:each) do
DataMapper::Repository.context << repository(:default)
end
config.after(:each) do
DataMapper::Repository.context.pop
end
end
describe "Renaming a cow" do
before(:each) do
@bluebell_farm = Farm.create!
@cow_1 = Cow.create(:cow_id => 1, :name => "Daisy")
@cow_2 = Cow.create(:cow_id => 1, :name => "Florence")
@cow_3 = Cow.create(:cow_id => 1, :name => "Tastyburger")
@bluebell_farm.cows << @cow_1 << @cow_2 << @cow_3
@bluebell_farm.save
end
it "should let you rename the cows" do
@cow_1.name = "Florence"
@cow_2.name = "Daisy"
@bluebell_farm.save
with_db_reconnect do
bluebell_farm_reloaded = Farm.get(@bluebell_farm.id)
cow_1_reloaded = bluebell_farm_reloaded.cows[0]
cow_2_reloaded = bluebell_farm_reloaded.cows[1]
cow_1_reloaded.name.should == "Florence"
cow_2_reloaded.name.should == "Daisy"
end
end
endCreated by Ashley Moran - 2009-06-30 20:08:34 UTC
Original Lighthouse ticket: http://datamapper.lighthouseapp.com/projects/20609/tickets/936