class ActiveRecord::Generators::ModelGenerator

:nodoc:
:nodoc:

def abstract_class_name

def abstract_class_name
  "#{database.camelize}Record"
end

def attributes_with_index

def attributes_with_index
  attributes.select { |a| !a.reference? && a.has_index? }
end

def create_migration_file

creates the migration file for the model.
def create_migration_file
  return if skip_migration_creation?
  attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false
  migration_template "../../migration/templates/create_table_migration.rb", File.join(db_migrate_path, "create_#{table_name}.rb")
end

def create_model_file

def create_model_file
  generate_abstract_class if database && !parent
  template "model.rb", File.join("app/models", class_path, "#{file_name}.rb")
end

def create_module_file

def create_module_file
  return if regular_class_path.empty?
  template "module.rb", File.join("app/models", "#{class_path.join('/')}.rb") if behavior == :invoke
end

def database

def database
  options[:database]
end

def generate_abstract_class

def generate_abstract_class
  path = File.join("app/models", "#{database.underscore}_record.rb")
  return if File.exist?(path)
  template "abstract_base_class.rb", path
end

def migration

def migration
  options[:migration]
end

def parent

def parent
  options[:parent]
end

def parent_class_name

Used by the migration template to determine the parent name of the model
def parent_class_name
  if parent
    parent
  elsif database
    abstract_class_name
  else
    "ApplicationRecord"
  end
end

def skip_migration_creation?

- migrations option is nil or false
- options parent is present and database option is not present
Skip creating migration file if:
def skip_migration_creation?
  parent && !database || !migration
end