class ModelMill::Generators::ModelsGenerator

Public Instance Methods

generate_models() click to toggle source

argument :excludes, :type => :array, :required => false, :default => []

# File lib/generators/model_mill/models/models_generator.rb, line 9
def generate_models
  if options[:namespace]
    empty_directory("app/models/#{options[:namespace].downcase}")
    generate_base_namespaced_model
  end
  discovered_tables.each do |table_name|
    @model_name = model_name_from_table_name table_name
    @model_file_name = model_file_name_from_table_name table_name
    @columns = connection.columns(table_name)
    @indexes = connection.indexes(table_name)
    @associations = detected_associations(table_name, @columns)
    template 'model.rb', "app/models/#{options[:namespace] ? options[:namespace]+'/' : ''}#{@model_file_name}.rb"
  end
  puts %Q(config.autoload_paths += %W(\#{config.root}/app/models/#{options[:namespace].downcase})) if options[:namespace]
end

Private Instance Methods

connection() click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 26
def connection
  @conn ||= options[:namespace] ? Kernel.const_get(options[:namespace].camelize)::Base.connection : ActiveRecord::Base.connection
end
connection_info() click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 30
def connection_info
  YAML.load(ERB.new(File.read(File.expand_path(File.join("config","database.yml")))))[options[:namespace].downcase]
end
detected_associations(table_name, columns) click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 50
def detected_associations(table_name, columns)
  {:belongs_to => [], :has_many => []}.tap do |associations|
    columns.each do |col|
      associations[:belongs_to].push({:name => $1}) if col.name =~ /(.*)\_id$/
    end

    discovered_tables.each do |tn|
      next if tn == table_name
      connection.columns(tn).each do |col|
        associations[:has_many].push({:name => tn}) if col.name =~ /#{table_name.singularize}\_id$/
      end
    end
  end
end
discovered_tables() click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 38
def discovered_tables
  connection.tables.sort
end
generate_base_namespaced_model() click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 34
def generate_base_namespaced_model
  template 'base.rb', "app/models/#{options[:namespace]}/base.rb"
end
model_file_name_from_table_name(tn) click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 46
def model_file_name_from_table_name tn
  tn.singularize.underscore
end
model_name_from_table_name(tn) click to toggle source
# File lib/generators/model_mill/models/models_generator.rb, line 42
def model_name_from_table_name tn
  tn.singularize.camelize
end