rare_map >= 2.0.0

Relational db to ActiveREcord models MAPper

RareMap can be used for BOTH standalone application & Rails

  • Installation:

    gem install rare_map
    

Basic RareMap use

Standalone:

Create a new rare_map.yml with following lines in the root of your application

Rails:

Create a new config/rare_map.yml with following lines in rails

  • rare_map.yml

    legacy:
      adapter: sqlite3
      database: db/db1.sqlite3
    
    old_db:
      adapter: mysql2
      host: localhost
      database: db_name
      port: 3306
      username: user
      password: pw
    
  • Run following command in the root of your application or rails

    $ raremap
    
  • Standalone: A demo.rb example is generated for you in the root of your application

  • RareMap console which is like rails console for standalone app can be run by following command

    $ raremap console  # or simply run `raremap c`
    

Advanced RareMap use

her_group:
  -
    db1:
      adapter: sqlite3
      database: db/db1.sqlite3
  -
    db2:
      adapter: sqlite3
      database: db/db1.sqlite3

his_group:
  -
    db1:
      adapter: sqlite3
      database: db/db3.sqlite3
  -
    db2:
      adapter: sqlite3
      database: db/db4.sqlite3

There are benefits by separating databases into groups

  1. Associations are built between databases within a group

  2. Group name is treated as a module namespace

  3. Models of a group are organized within a folder

If all your data reside in several legacy databases, it is important to build back those associations across databases

If there are 2 or more tables with the same name, giving them group names could avoid naming collision

If there are tons of tables, it is better to organize them well

Set up RareMap Options

rare_map_opts:
  foreign_key:
    suffix: fk
    alias:
      abnormal_fk1: table1
      abnormal_fk2: table2
  primary_key:
    table1: abnormal_pk
  • rare_map_opts[suffix]: If your foreign keys are not ended with ‘id’, you can specify the suffix you want here

  • rare_map_opts[alias]: If naming convention is not followed by some foreign keys, you can list them here

  • rare_map_opts: Usually rare_map can identify the primary key of a table, if it fails, please list primary keys here

RareMap Options Precedence

You can place rare_map options in 3 ways

rare_map_opts:             # Global options
  ...
group1:
  -
    rare_map_opts:         # Group options
      ...
  -
    db1:
      ...
legacy_db:
  adapter: sqlite3
  database: db/db.sqlite3
  rare_map_opts:           # DB options
    ...
  • Precedence: DB > Group > Global

Contributing to rare_map

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet.

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it.

  • Fork the project.

  • Start a feature/bugfix branch.

  • Commit and push until you are happy with your contribution.

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright © 2012 Wei-Ming Wu. See LICENSE.txt for further details.