Module: Automigration::Field

Defined in:
lib/automigration/field.rb

Constant Summary collapse

KIND =
%w[
  belongs_to
  boolean
  date
  datetime
  decimal
  float
  integer
  string
  text
  time
]

Class Method Summary collapse

Class Method Details

.extend_model!(model, field) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/automigration/field.rb', line 58

def self.extend_model!(model, field)
  type = field[:as]
  name = field[:name]
  accessible = field[:accessible]
  
  if type == :belongs_to
    model.belongs_to name, :class_name => field[:class_name], :inverse_of => field[:inverse_of]

    if accessible
      model.attr_accessible "#{name}_id"
    end
  end

  if accessible
    model.attr_accessible name
  end
end

.to_db_columns(field) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/automigration/field.rb', line 16

def self.to_db_columns(field) 
  type = field[:as]

  if type == :belongs_to
    name = "#{field[:name]}_id"
    column_type = :integer
  else
    name = field[:name]
    column_type = type
  end

  if type == :boolean
    default = !!field[:default]
  else
    default = field[:default]
  end
  
  Automigration::DbColumn.new(name, column_type, {
    :default => default,
    :null => field[:null], 
    :limit => field[:limit], 
    :scale => field[:scale], 
    :precision => field[:precision]
  })
end

.valid_options_keys(field) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/automigration/field.rb', line 42

def self.valid_options_keys(field)
  valid_keys = [
    :name, :as,                                  # system attributes
    :default, :null, :limit, :scale, :precision, # db columns keys
    :accessible                                  # mark attribute as accessible
  ]

  type = field[:as]

  if type == :belongs_to
    valid_keys += [:class_name, :inverse_of]
  end

  field.assert_valid_keys(*valid_keys)
end