Class: DataMapper::Adapters::Sql::Mappings::Table

Inherits:
Object
  • Object
show all
Defined in:
lib/data_mapper/adapters/sql/mappings/table.rb

Defined Under Namespace

Classes: Association

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter, setup_klass) ⇒ Table

Returns a new instance of Table.



29
30
31
32
33
34
35
36
37
38
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 29

def initialize(adapter, setup_klass)
  raise "\"setup_klass\" must not be nil!" if setup_klass.nil?
  @adapter = adapter
  @klass = setup_klass
  @columns = []
  @columns_hash = Hash.new { |h,k| h[k] = @columns.find { |c| c.name == k } }
  @columns_by_column_name = Hash.new { |h,k| h[k.to_s] = @columns.find { |c| c.column_name == k.to_s } }
  @has_many = []
  @associations = []
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



27
28
29
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 27

def klass
  @klass
end

Instance Method Details

#[](column_name) ⇒ Object



96
97
98
99
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 96

def [](column_name)
  return key if column_name == :id
  @columns_hash[column_name.kind_of?(Symbol) ? column_name : column_name.to_sym]
end

#add_column(column_name, type, options) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 84

def add_column(column_name, type, options)
  column = @columns.find { |c| c.name == column_name.to_sym }
        
  if column.nil?
    reset_derived_columns!
    column = Column.new(@adapter, self, column_name, type, options)
    @columns.send(column_name == :id ? :unshift : :push, column)
  end
        
  return column
end

#associationsObject



40
41
42
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 40

def associations
  @associations
end

#columnsObject

def has_many_associations

@has_many

end



52
53
54
55
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 52

def columns
  key if @key.nil?
  @columns
end

#create!Object



65
66
67
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 65

def create!
  @adapter.save(database, @klass) unless exists?
end

#default_foreign_keyObject



119
120
121
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 119

def default_foreign_key
  @default_foreign_key || (@default_foreign_key = "#{String::memoized_underscore(Inflector.singularize(name))}_id".freeze)
end

#drop!Object



61
62
63
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 61

def drop!
  @adapter.delete(@klass, :drop => true) if exists?
end

#exists?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 57

def exists?
  @adapter.table_exists?(name)
end

#find_by_column_name(column_name) ⇒ Object



101
102
103
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 101

def find_by_column_name(column_name)
  @columns_by_column_name[column_name.kind_of?(String) ? column_name : column_name.to_s]
end

#inspectObject



127
128
129
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 127

def inspect
  "#<%s:0x%x @klass=%s, @name=%s, @columns=%s>" % [self.class.name, (object_id * 2), @klass.name, to_sql, @columns.inspect]
end

#keyObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 69

def key
  if @key.nil?
    key_column = @columns.find { |c| c.key? }
    @key = if key_column.nil?
      column = add_column(:id, :integer, :key => true)
      @klass.send(:attr_reader, :id) unless @klass.methods.include?(:id)
      column
    else
      key_column
    end
  end

  @key
end

#nameObject



105
106
107
108
109
110
111
112
113
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 105

def name
  @name || begin
    @name = if @klass.superclass != DataMapper::Base && @klass.superclass != Object
      @adapter[@klass.superclass].name
    else
      Inflector.tableize(@klass.name)
    end.freeze
  end
end

#name=(value) ⇒ Object



115
116
117
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 115

def name=(value)
  @name = value
end

#to_sqlObject



123
124
125
# File 'lib/data_mapper/adapters/sql/mappings/table.rb', line 123

def to_sql
  @to_sql || (@to_sql = @adapter.quote_table_name(name).freeze)
end