Skip to content

Commit

Permalink
Extract specs for Session::Relation#save and add #new
Browse files Browse the repository at this point in the history
  • Loading branch information
solnic committed Jun 24, 2013
1 parent 290594d commit fb0f422
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 34 deletions.
7 changes: 7 additions & 0 deletions lib/rom/session/relation.rb
Expand Up @@ -19,6 +19,13 @@ def self.build(relation, tracker, identity_map)
new(relation.inject_mapper(mapper), tracker)
end

def new(*args, &block)
# FIXME: expose some nice API on the mapper to build new models
object = mapper.loader.send(:model).new(*args, &block)
track(object)
object
end

def identity(object)
dumper.identity(object)
end
Expand Down
1 change: 0 additions & 1 deletion spec/shared/unit/relation_context.rb
Expand Up @@ -10,6 +10,5 @@
let(:relation) { Relation.new(axiom, mapper) }
let(:users) { session[:users] }


let(:user) { session[:users].all.first }
end
27 changes: 27 additions & 0 deletions spec/unit/rom/session/relation/save_spec.rb
@@ -0,0 +1,27 @@
require 'spec_helper'

describe Session::Relation, '#save' do
subject { users.save(user).state(user) }

include_context 'Session::Relation'

context 'when an object is new' do
let(:user) { users.new(:id => 3, :name => 'John') }

it { should be_created }
end

context 'when an object is persisted' do
context 'when not dirty' do
it { should be_persisted }
end

context 'when dirty' do
before do
user.name = 'John Doe'
end

it { should be_updated }
end
end
end
33 changes: 0 additions & 33 deletions spec/unit/rom/session_spec.rb
Expand Up @@ -13,39 +13,6 @@

let(:object) { env[:users].all.first }

describe '#save' do
context 'when an object is persisted' do
context 'when not dirty' do
it 'does not queue an object to be updated' do
session[:users].save(object)

expect(session[:users].state(object)).to be_persisted
end
end

context 'when dirty' do
it 'queues an object to be updated' do
object.name = 'John Doe'

session[:users].save(object)

expect(session[:users].state(object)).to be_updated
end
end
end

context 'when an object is new' do
it 'queues an object to be created' do
user = model.new(:id => 3, :name => 'John')

session[:users].track(user)
session[:users].save(user)

expect(session[:users].state(user)).to be_created
end
end
end

describe '#delete' do
it 'queues an object to be deleted' do
session[:users].delete(object)
Expand Down

0 comments on commit fb0f422

Please sign in to comment.