class TheSchemaIs::MissingColumn

Constants

MSG

Private Instance Methods

insert_column(corrector, name, col) click to toggle source
# File lib/the_schema_is/cops.rb, line 149
def insert_column(corrector, name, col)
  prev_statement = model_columns
                   .slice(*schema_columns.keys[0...schema_columns.keys.index(name)])
                   .values.last&.source

  if prev_statement
    indent = prev_statement.loc.expression.column
    corrector.insert_after(
      prev_statement.loc.expression,
      "\n#{' ' * indent}#{col.source.loc.expression.source}"
    )
  else
    indent = model.schema.loc.expression.column + 2
    corrector.insert_after(
      # of "the_schema_is do |t|" -- children[1] is "|t|""
      model.schema.children[1].loc.expression,
      "\n#{' ' * indent}#{col.source.loc.expression.source}"
    )
  end
end
missing_columns() click to toggle source
# File lib/the_schema_is/cops.rb, line 170
def missing_columns
  schema_columns.reject { |name,| model_columns.keys.include?(name) }
end
register_offense(_node) click to toggle source
# File lib/the_schema_is/cops.rb, line 139
def register_offense(_node)
  return if model.schema.nil? || schema.nil?

  missing_columns.each do |name, col|
    add_offense(model.schema, message: MSG % col.name) do |corrector|
      insert_column(corrector, name, col)
    end
  end
end