1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

making sure update delegates to update and insert delegates to insert

This commit is contained in:
Aaron Patterson 2010-08-23 13:28:08 -07:00
parent 2579fec805
commit 8966434f2a
3 changed files with 56 additions and 5 deletions

View file

@ -6,22 +6,21 @@ module Arel
def update values def update values
um = UpdateManager.new @engine um = UpdateManager.new @engine
if String === values if Nodes::SqlLiteral === values
values = SqlLiteral.new values
um.table @ctx.froms.last um.table @ctx.froms.last
else else
um.table values.first.first.relation um.table values.first.first.relation
end end
um.set values um.set values
um.wheres = @ctx.wheres um.wheres = @ctx.wheres
@engine.connection.execute um.to_sql @engine.connection.update um.to_sql, 'AREL'
end end
# FIXME: this method should go away # FIXME: this method should go away
def insert values def insert values
im = InsertManager.new @engine im = InsertManager.new @engine
im.insert values im.insert values
@engine.connection.execute im.to_sql @engine.connection.insert im.to_sql
end end
def delete def delete

51
spec/arel/crud_spec.rb Normal file
View file

@ -0,0 +1,51 @@
module Arel
class FakeCrudder < SelectManager
class FakeEngine
attr_reader :calls
def initialize
@calls = []
end
def connection; self end
def method_missing name, *args
@calls << [name, args]
end
end
include Crud
attr_reader :engine
attr_accessor :ctx
def initialize engine = FakeEngine.new
super
end
end
describe 'crud' do
describe 'insert' do
it 'should call insert on the connection' do
table = Table.new :users
fc = FakeCrudder.new
fc.insert [[table[:id], 'foo']]
fc.engine.calls.find { |method, _|
method == :insert
}.should_not be_nil
end
end
describe 'update' do
it 'should call update on the connection' do
table = Table.new :users
fc = FakeCrudder.new
fc.from table
fc.update [[table[:id], 'foo']]
fc.engine.calls.find { |method, _|
method == :update
}.should_not be_nil
end
end
end
end

View file

@ -17,9 +17,10 @@ module Arel
def quote_column_name thing; @engine.connection.quote_column_name thing end def quote_column_name thing; @engine.connection.quote_column_name thing end
def quote thing, column; @engine.connection.quote thing, column end def quote thing, column; @engine.connection.quote thing, column end
def execute sql def execute sql, name = nil
@executed << sql @executed << sql
end end
alias :update :execute
end end
describe 'select manager' do describe 'select manager' do