Class: MigrationEmitter

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/extra_user_attributes/migration_emitter.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(table_name, initial = [], options = {}) ⇒ MigrationEmitter

Returns a new instance of MigrationEmitter.



6
7
8
9
10
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 6

def initialize(table_name, initial = [], options={})
  self.table_name = table_name
  self.columns = initial
  self.options = options
end

Instance Attribute Details

#columnsObject

Returns the value of attribute columns.



3
4
5
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 3

def columns
  @columns
end

#optionsObject

Returns the value of attribute options.



4
5
6
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 4

def options
  @options
end

#table_nameObject

Returns the value of attribute table_name.



2
3
4
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 2

def table_name
  @table_name
end

Class Method Details

.entity(class_name, *initial) ⇒ Object



21
22
23
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 21

def self.entity(class_name, *initial)
  return self.new(class_name.to_s.tableize.to_sym, initial)
end

.join_table(*classes) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 12

def self.join_table(*classes)
  a = self.new classes.map_to(:to_s).map_to(:tableize).sort.join('_').to_sym
  (0..1).each {|i|
    a.column classes[i].foreign_key, :integer, :index=>:true
  }
  a.options[:id] = false
  a
end

Instance Method Details

#add_columnsObject



42
43
44
45
46
47
48
49
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 42

def add_columns
  columns.map{|c|
    "add_column " +
      [table_name.inspect, c[:name].inspect, c[:datatype].inspect,
        map_inspect(c[:options].except(:index))
      ].flatten.join(', ')
  }.join("\n    ") + "\n    " + create_indexes
end

#column(name, datatype, options = {}) ⇒ Object



25
26
27
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 25

def column(name, datatype, options={})
  self.columns << {:name=>name, :datatype=>datatype, :options=>options}
end

#create_tableObject



29
30
31
32
33
34
35
36
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 29

def create_table
  return "
  create_table #{create_table_def} do |t|
    #{columns.map{|c| coldef(c)}.join("\n    ")}
    t.timestamps
  end
  " + create_indexes
end

#drop_tableObject



38
39
40
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 38

def drop_table
  "drop_table #{table_name.inspect}"
end

#remove_columnsObject



51
52
53
# File 'lib/generators/extra_user_attributes/migration_emitter.rb', line 51

def remove_columns
  columns.map{|c| "remove_column #{table_name.inspect}, #{c[:name].inspect}"}.join("\n    ")
end