Class: DataMapper::Adapters::Sql::Mappings::Column

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

Overview

TODO: There are of course many more options to add here. Ordinal, Length/Size, Nullability are just a few.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter, table, name, type, options = {}) ⇒ Column

Returns a new instance of Column.



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 12

def initialize(adapter, table, name, type, options = {})
  @adapter = adapter
  @table = table
  @name, @type, @options = name.to_sym, type, options
  
  (class << self; self end).class_eval <<-EOS
    def type_cast_value(value)
      @adapter.type_cast_#{type}(value)
    end
  EOS
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



10
11
12
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 10

def name
  @name
end

#optionsObject

Returns the value of attribute options.



10
11
12
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 10

def options
  @options
end

#typeObject

Returns the value of attribute type.



10
11
12
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 10

def type
  @type
end

Instance Method Details

#column_nameObject



55
56
57
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 55

def column_name
  @column_name || (@column_name = (@options.has_key?(:column) ? @options[:column].to_s : name.to_s.gsub(/\?$/, '')).freeze)
end

#inspectObject



82
83
84
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 82

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

#instance_variable_nameObject



47
48
49
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 47

def instance_variable_name
  @instance_variable_name || (@instance_variable_name = "@#{@name.to_s.gsub(/\?$/, '')}".freeze)
end

#key?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 39

def key?
  @options[:key] || false
end

#lazy=(value) ⇒ Object



24
25
26
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 24

def lazy=(value)
  @options[:lazy] = value
end

#lazy?Boolean

Determines if the field should be lazy loaded. You can set this explicitly, or accept the default, which is false for all but text fields.

Returns:

  • (Boolean)


31
32
33
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 31

def lazy?
  @options[:lazy] || (type == :text)
end

#nullable?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 35

def nullable?
  @options[:nullable] || true
end

#sizeObject



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

def size
  @size || begin
    return @size = @options[:size] if @options.has_key?(:size)
    return @size = @options[:length] if @options.has_key?(:length)

    @size = case type
      when :integer then 4
      when :string, :class then 50
      else nil
    end
  end
end

#to_sObject



51
52
53
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 51

def to_s
  @name.to_s
end

#to_sql(include_table_name = false) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 59

def to_sql(include_table_name = false)
  if include_table_name
    @to_sql_with_table_name || @to_sql_with_table_name = begin
      (@table.to_sql + '.' + @adapter.quote_column_name(column_name)).freeze
    end
  else
    @to_sql || (@to_sql = @adapter.quote_column_name(column_name).freeze)
  end
end

#to_symObject



43
44
45
# File 'lib/data_mapper/adapters/sql/mappings/column.rb', line 43

def to_sym
  @name
end