forked from zerohistory/toystore
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Separate dirty tracking of plain objects verse (persistable and query…
…able) stored objects.
- Loading branch information
1 parent
9522e87
commit 0756e3d
Showing
6 changed files
with
88 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
module Toy | ||
module DirtyStore | ||
extend ActiveSupport::Concern | ||
include ActiveModel::Dirty | ||
include Reloadable | ||
include Persistence | ||
include Querying | ||
|
||
def initialize(*) | ||
super | ||
|
||
if persisted? | ||
@previously_changed = {} | ||
@changed_attributes.clear if @changed_attributes | ||
end | ||
end | ||
|
||
def reload | ||
super.tap do | ||
@previously_changed = {} | ||
@changed_attributes = {} | ||
end | ||
end | ||
|
||
def save(*) | ||
super.tap do | ||
@previously_changed = changes | ||
@changed_attributes.clear if @changed_attributes | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
require 'helper' | ||
|
||
describe Toy::DirtyStore do | ||
uses_constants('User') | ||
|
||
before do | ||
User.attribute(:name, String) | ||
end | ||
|
||
it "does not have changes when loaded from database" do | ||
user = User.create | ||
loaded = User.get(user.id) | ||
loaded.should_not be_changed | ||
end | ||
|
||
describe "#reload" do | ||
before { @user = User.create(:name => 'John') } | ||
let(:user) { @user } | ||
|
||
it "clears changes" do | ||
user.name = 'Steve' | ||
user.reload | ||
user.should_not be_changed | ||
end | ||
|
||
it "clears previously changed" do | ||
user.reload | ||
user.previous_changes.should be_empty | ||
end | ||
end | ||
|
||
describe "#save" do | ||
before { @user = User.create(:name => 'Geoffrey') } | ||
let(:user) { @user } | ||
|
||
it "clears changes" do | ||
user.name = 'John' | ||
user.should be_changed | ||
user.save | ||
user.should_not be_changed | ||
end | ||
|
||
it "sets previous changes" do | ||
user.previous_changes.should == {'name' => [nil, 'Geoffrey']} | ||
end | ||
end | ||
end |