Class: DataMapper::Mappings::Table

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database, klass) ⇒ Table

Returns a new instance of Table.



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/data_mapper/mappings/table.rb', line 10

def initialize(database, klass)
  unless database.kind_of?(DataMapper::Database) && klass.kind_of?(Class)
    raise "Database and klass are required: #{ { :database => database, :klass => klass }.inspect }"
  end
  
  @database = database
  @klass = 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 } }
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



8
9
10
# File 'lib/data_mapper/mappings/table.rb', line 8

def klass
  @klass
end

Instance Method Details

#[](column_name) ⇒ Object



54
55
56
57
# File 'lib/data_mapper/mappings/table.rb', line 54

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



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/data_mapper/mappings/table.rb', line 42

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(@database, column_name, type, options)
    @columns << column
  end
  
  return column
end

#columnsObject



22
23
24
25
# File 'lib/data_mapper/mappings/table.rb', line 22

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

#default_foreign_keyObject



77
78
79
# File 'lib/data_mapper/mappings/table.rb', line 77

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

#find_by_column_name(column_name) ⇒ Object



59
60
61
# File 'lib/data_mapper/mappings/table.rb', line 59

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

#inspectObject



85
86
87
# File 'lib/data_mapper/mappings/table.rb', line 85

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



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/data_mapper/mappings/table.rb', line 27

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

#nameObject



63
64
65
66
67
68
69
70
71
# File 'lib/data_mapper/mappings/table.rb', line 63

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

#name=(value) ⇒ Object



73
74
75
# File 'lib/data_mapper/mappings/table.rb', line 73

def name=(value)
  @name = value
end

#to_sqlObject



81
82
83
# File 'lib/data_mapper/mappings/table.rb', line 81

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