class BrainDamage::Migration

Public Class Methods

new(resource) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 3
def initialize(resource)
  @resource = resource
end

Public Instance Methods

add_options(line, related_field, field_options) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 46
def add_options(line, related_field, field_options)
  options = belongs_to_options line, related_field, field_options

  field_options.slice(:default, :precision, :scale).each do |key, value|
    options << "#{key}: #{value.inspect}"
  end

  options_string = options.join ', '

  if options.length > 0 and !line.include? options_string
    return "#{line}, #{options_string}"
  end

  line
end
add_options_to_lines() click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 33
def add_options_to_lines
  @migration_lines.map! { |line|
    if is_column_line? line
      related_column = line.scan(/:(\w+)/).first.first.to_sym
      column_options = @resource.columns[related_column] || {}

      add_options line, related_column, column_options
    else
      line
    end
  }
end
belongs_to_options(line, related_field, field_options) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 62
def belongs_to_options(line, related_field, field_options)
  return [] unless is_belongs_to_line? line
  return ["references: :#{field_options[:class_name].underscore.pluralize}"] if field_options[:class_name]
  []
end
improve_code(migration_code) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 20
def improve_code(migration_code)
  @migration_lines = migration_code.split "\n"

  return migration_code if @migration_lines.length == 2

  add_options_to_lines
  remake_migration
end
is_belongs_to_line?(line) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 68
def is_belongs_to_line? line
  line.include? 't.belongs_to'
end
is_column_line?(line) click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 29
def is_column_line? line
  line =~ /t\..*:\w+/
end
migration_file_exists?() click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 7
def migration_file_exists?
  file_name = migration_file_full_path
  file_name && File.exists?(file_name)
end
Also aliased as: skip?
migration_file_full_path() click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 12
def migration_file_full_path
  Dir["db/migrate/*"].select { |file_name|
    file_name.split('/').last =~ /\d+_create_#{@resource.name.underscore.pluralize}.rb/
  }.first
end
remake_migration() click to toggle source
# File lib/generators/brain_damage/lib/migration.rb, line 72
def remake_migration
  @migration_lines.join "\n"
end
skip?()