Skip to content
This repository has been archived by the owner on Apr 17, 2018. It is now read-only.

Commit

Permalink
[dm-is-versioned] Updated versioning to work with Module using STI
Browse files Browse the repository at this point in the history
[#914 state:resolved]
  • Loading branch information
dkubb committed Aug 15, 2009
1 parent 806b5c3 commit acf7a8a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 16 deletions.
23 changes: 14 additions & 9 deletions dm-is-versioned/lib/dm-is-versioned/is/versioned.rb
Expand Up @@ -57,15 +57,16 @@ def is_versioned(options = {})
end

properties.each do |property|
before "#{property.name}=".to_sym do
if value = property.get(self)
pending_version_attributes[property.name] ||= value
name = property.name
before "#{name}=".to_sym do
unless (value = property.get(self)).nil? || pending_version_attributes.key?(name)
pending_version_attributes[name] = value
end
end
end

after :update do |retval|
if retval && pending_version_attributes.has_key?(on)
if retval && pending_version_attributes.key?(on)
model::Version.create(attributes.merge(pending_version_attributes))
pending_version_attributes.clear
end
Expand All @@ -83,11 +84,15 @@ def const_missing(name)
model = DataMapper::Model.new

properties.each do |property|
# duplication is necessary since Property#options are frozen since 0.10.0
options = property.options.dup
options[:key] = true if property.name == @on || property.serial?
options[:serial] = false
model.property(property.name, property.type, options)
type = property.type
type = Class if type == DataMapper::Types::Discriminator

options = property.options.merge(
:key => property.name == @on,
:serial => false
)

model.property(property.name, type, options)
end

const_set(name, model)
Expand Down
15 changes: 8 additions & 7 deletions dm-is-versioned/spec/versioned_spec.rb
Expand Up @@ -5,7 +5,8 @@ class Story

property :id, Serial
property :title, String
property :updated_at, DateTime, :nullable => false
property :updated_at, DateTime
property :type, Discriminator

before :save do
# For the sake of testing, make sure the updated_at is always unique
Expand Down Expand Up @@ -37,7 +38,7 @@ class Story
end

describe '#create' do
before do
before :all do
Story.auto_migrate!
Story.create(:title => 'A Very Interesting Article')
end
Expand All @@ -48,12 +49,12 @@ class Story
end

describe '#save' do
before do
before :all do
Story.auto_migrate!
end

describe '(with new resource)' do
before do
before :all do
@story = Story.new(:title => 'A Story')
@story.save
end
Expand All @@ -64,7 +65,7 @@ class Story
end

describe '(with a clean existing resource)' do
before do
before :all do
@story = Story.create(:title => 'A Story')
@story.save
end
Expand All @@ -75,7 +76,7 @@ class Story
end

describe '(with a dirty existing resource)' do
before do
before :all do
@story = Story.create(:title => 'A Story')
@story.title = 'An Inner Update'
@story.title = 'An Updated Story'
Expand All @@ -98,7 +99,7 @@ class Story
end

describe '#versions' do
before do
before :all do
Story.auto_migrate!
@story = Story.create(:title => 'A Story')
end
Expand Down

0 comments on commit acf7a8a

Please sign in to comment.