module ModelTableMapper

Constants

VERSION

Public Class Methods

list(*args) click to toggle source
# File lib/model_table_mapper.rb, line 5
def self.list(*args)
  model_files = []
  Find.find('app/models') do |path|
    model_files << path if path =~ /.*\.rb/
  end
  models = model_files.map do |file_name|
    file_content = File.open("#{file_name}").read
    class_statement = file_content.match(/^class +[\w:]+ *< *(ApplicationRecord|ActiveRecord::Base)\s*/).try(:[], 0)
    class_statement.match(/class +([\w:]+)/).try(:[], 1) if class_statement.present?
  end.compact
  model_table_hash = models.each_with_object({}) do |model, result|
    result[model] = model.constantize.table_name
  end
  if args.present?
    filename = args[0].strip
    filename = (filename =~ /.csv$/).present? ? filename : "#{filename}.csv"
    CSV.open(filename, "wb") {|csv| csv << ['model', 'table']; model_table_hash.to_a.each {|elem| csv << elem} }
    puts "CSV output file: #{filename}"
  end
  model_table_hash
end