rails-mermaid_erd_markdown

A Ruby on Rails gem that extends rails-mermaid_erd to generate mermaid Entity-Relationship Diagrams (ERD) for ActiveRecord Models in markdown. When combined with Continuous Integration (CI) pipelines, it enables one to generate living, self-updating documentation of their data.

Example Entity-Relationship Diagram

erDiagram
    %% --------------------------------------------------------
    %% Entity-Relationship Diagram
    %% --------------------------------------------------------

    %% table name: articles
    Article{
        integer id PK 
        string title  
        text content  
        datetime created_at  
        datetime updated_at  
    }

    %% table name: comments
    Comment{
        integer id PK 
        string commenter  
        text body  
        integer article_id FK 
        datetime created_at  
        datetime updated_at  
    }

    Comment }o--|| Article : "BT:article"

Installation

Add this line to your application's Gemfile:

gem 'rails-mermaid_erd_markdown'

Or install it yourself as:

$ gem install rails-mermaid_erd_markdown

Usage

Generating ERDs

To generate the comprehensive mermaid ERD in markdown, run one of the following:

   rails generate_erd

OR

   rake generate_erd

If all of your models do not appear, be sure to eager load them first.

Configuration

You can configure the ERD generation by creating a erd.yml file in your root, and modifying the following fields.

# erd.yml
erd:
    output_path: 'app/ERD.md' # Set output path of ERDs, default: 'app/ERD.md'
    split_output: false, # Generates individual ERDs for each model with a specified depth, default: false
    relationship_depth: 1 # Configured depth of individual ERD model generation, default: 1
    ignored_models: # Models to be filtered out of all ERDs (case-sensitive), default: []
        - Article 
        - Comment

If your entity diagram is too large to be displayed you can set a split_output configuration to true to generate multiple ERD files based on each model in your project.

Or you can specify the models to be filtered out of the ERDs using ignored_models

You can also set a relationship_depth configuration to include more than 1 level (the default) of associations in each document.

Viewing Diagrams

You can view the ERD by navigating to the file in Github, which supports rendering mermaid diagrams from code. If you are a Visual Studio Code user, you can use any markdown preview extension such as Markdown Preview Enhanced view the ERD directly in your IDE.

Integration with CI Pipeline

The most value of this gem comes with the integration of it's diagram generation into your CI. The amount of effort required to update documentation has always been the greatest deterrant to creating new documentation. By integrating this rake task into your CI, you can have the CI update the model for you anytime that it changes.

The following is a Github Actions job example for how one might do this for a Rails app that uses PostgreSQL:

permissions:
  contents: write
  packages: read

jobs:
  update-erd:
      runs-on: ubuntu-latest
      services:
          postgres:
              image: postgres
              env:
                  POSTGRES_USER: postgres
                  POSTGRES_PASSWORD: postgres
              ports:
              - 5432:5432
              options:
              - --health-cmd="pg_is_ready" --health-interval=10s --health-timeout=5s --health-retries=3
      steps:
      - name: Install packages
        run:
          sudo apt-get update && sudo apt-get install --no-install-recommends -y google-chrome-stable curl libvips postgresql-client libpq-dev
      - name: Checkout code
        uses: actions/checkout@v4
        with: 
          ref: ${{ github.event.pull_request.head.ref }}
      - name: Setup database
        env:
          RAILS_ENV: test
          DATABASE_URL: postgres://postgres:postgres@localhost:5432
        run: bin/rails db:setup
      - name: Setup database
        env:
          RAILS_ENV: test
          DATABASE_URL: postgres://postgres:postgres@localhost:5432
        run: bin/rails generate_erd
      - name: Commit and Push Updated ERD
        run: |
          git config --global user.name 'Github Actions Bot'
          git config --global user.email 'actions/@users.noreply.github.com'
          git add app/models/ERD.md 
          git commit -m "Update ERD" || echo "No changes to commit"

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rails-mermaid_erd_markdown. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the rails-mermaid_erd_markdown project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.