mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
constructor can take column info
This commit is contained in:
parent
741b879577
commit
dd425e1258
2 changed files with 26 additions and 8 deletions
|
@ -10,16 +10,20 @@ module Arel
|
|||
def initialize name, engine = Table.engine
|
||||
@name = name
|
||||
@engine = engine
|
||||
@engine = engine[:engine] if Hash === engine
|
||||
@columns = nil
|
||||
@aliases = []
|
||||
@table_alias = nil
|
||||
@primary_key = nil
|
||||
|
||||
# Sometime AR sends an :as parameter to table, to let the table know that
|
||||
# it is an Alias. We may want to override new, and return a TableAlias
|
||||
# node?
|
||||
@table_alias = engine[:as] if Hash === engine
|
||||
if Hash === engine
|
||||
@engine = engine[:engine] || Table.engine
|
||||
@columns = attributes_for engine[:columns]
|
||||
|
||||
# Sometime AR sends an :as parameter to table, to let the table know
|
||||
# that it is an Alias. We may want to override new, and return a
|
||||
# TableAlias node?
|
||||
@table_alias = engine[:as]
|
||||
end
|
||||
end
|
||||
|
||||
def primary_key
|
||||
|
@ -82,9 +86,8 @@ module Arel
|
|||
end
|
||||
|
||||
def columns
|
||||
@columns ||= @engine.connection.columns(@name, "#{@name} Columns").map do |column|
|
||||
Attributes.for(column).new self, column.name.to_sym, column
|
||||
end
|
||||
@columns ||=
|
||||
attributes_for @engine.connection.columns(@name, "#{@name} Columns")
|
||||
end
|
||||
|
||||
def [] name
|
||||
|
@ -95,6 +98,14 @@ module Arel
|
|||
end
|
||||
|
||||
private
|
||||
def attributes_for columns
|
||||
return nil unless columns
|
||||
|
||||
columns.map do |column|
|
||||
Attributes.for(column).new self, column.name.to_sym, column
|
||||
end
|
||||
end
|
||||
|
||||
def table_exists?
|
||||
@table_exists ||= tables.key?(@name) || engine.connection.table_exists?(name)
|
||||
end
|
||||
|
|
|
@ -71,6 +71,13 @@ module Arel
|
|||
end
|
||||
|
||||
describe 'new' do
|
||||
it 'takes :columns' do
|
||||
columns = Table.engine.connection.columns("users")
|
||||
@relation = Table.new(:users, :columns => columns)
|
||||
check @relation.columns.first.name.should == :id
|
||||
check @relation.engine.should == Table.engine
|
||||
end
|
||||
|
||||
it 'should accept an engine' do
|
||||
rel = Table.new :users, 'foo'
|
||||
check rel.engine.should == 'foo'
|
||||
|
|
Loading…
Reference in a new issue