class RareMap::Mapper

RareMap::Mapper converts relational databases into ActiveRecord files. @author Wei-Ming Wu

Public Class Methods

new() click to toggle source

Creates a Mapper.

@return [Mapper] a Mapper object

# File lib/rare_map.rb, line 24
def initialize
  @rails_root = locate_rails_root
end

Public Instance Methods

mapping() click to toggle source

Converts relational databases into ActiveRecord files by given RareMap config yaml file.

# File lib/rare_map.rb, line 29
def mapping
  @db_profiles = load_config @rails_root ? File.join(@rails_root, 'config') : '.'
  @db_profiles.each do |profile|
    profile.schema = read_schema profile
    profile.tables = parse_schema profile.schema
  end
  @models = build_models @db_profiles
  generate_models @models, @rails_root
  if @rails_root
    puts '*****************************************************************'
    puts '  Activerecord models are generated. Enjoy it!'
    puts '*****************************************************************'
  else
    puts '*****************************************************************'
    puts '  A demo.rb is generated.'
    puts '*****************************************************************'
    generate_demo unless File.exist?('demo.rb')
  end
  @models
  
rescue ConfigNotFoundError => e
  puts "Please put your database config in `#{'config/' if @rails_root}rare_map.yml`."
end

Private Instance Methods

generate_demo() click to toggle source
# File lib/rare_map.rb, line 55
def generate_demo
  f = File.new('demo.rb', 'w')
  f.write "require 'active_record'\n"
  f.write "require 'activerecord-jdbc-adapter' if RUBY_PLATFORM == 'java'\n"
  f.write "Dir[File.dirname(__FILE__) + '/app/models/**/*_base.rb'].each { |file| require file }\n"
  f.write "Dir[File.dirname(__FILE__) + '/app/models/**/*.rb'].each { |file| require file }\n"
  f.close
end