From d66a1e0ae96633cfe45fb63e347ded688fd22175 Mon Sep 17 00:00:00 2001 From: Ed Davey Date: Wed, 4 Dec 2024 01:08:15 +0000 Subject: [PATCH 1/2] Add rails-erd gem See https://github.com/voormedia/rails-erd?tab=readme-ov-file --- Gemfile | 1 + Gemfile.lock | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/Gemfile b/Gemfile index 737dcb8bf..f669a8c01 100644 --- a/Gemfile +++ b/Gemfile @@ -76,6 +76,7 @@ group :development, :test do gem "dotenv-rails" gem "factory_bot_rails" gem "rails-controller-testing" + gem "rails-erd" end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 7f37d2f86..110e233ac 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -124,6 +124,7 @@ GEM regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) childprocess (5.0.0) + choice (0.2.0) climate_control (1.2.0) coderay (1.1.3) coercible (1.0.0) @@ -347,6 +348,11 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) + rails-erd (1.7.2) + activerecord (>= 4.2) + activesupport (>= 4.2) + choice (~> 0.2.0) + ruby-graphviz (~> 1.2) rails-html-sanitizer (1.6.1) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) @@ -400,6 +406,8 @@ GEM rubocop-performance (1.20.2) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.30.0, < 2.0) + ruby-graphviz (1.2.5) + rexml ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) @@ -538,6 +546,7 @@ DEPENDENCIES pundit (~> 2.2) rails (~> 7.1) rails-controller-testing + rails-erd rspec-rails sass-rails selenium-webdriver From 235bb93409121f1be9c04921855f4292416fec9c Mon Sep 17 00:00:00 2001 From: Ed Davey Date: Wed, 4 Dec 2024 01:09:50 +0000 Subject: [PATCH 2/2] Add task to generate diagram Added by the gem's generator: ``` bundle exec rails g erd:install ``` We can run this task to generate an entity-relationship diagram e.g. ``` bundle exec rails db:migrate \ indirect=true \ inheritance=true \ polymorphism=true \ title="Complete (Ruby)" \ filename="doc/complete-auto-generated-entity-relationship-diagram" ``` See https://voormedia.github.io/rails-erd/customise.html for available options. We include the generated diagram in PDF form in our `doc` directory. --- ...to-generated-entity-relationship-diagram.pdf | Bin 0 -> 52167 bytes lib/tasks/auto_generate_diagram.rake | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100644 doc/complete-auto-generated-entity-relationship-diagram.pdf create mode 100644 lib/tasks/auto_generate_diagram.rake diff --git a/doc/complete-auto-generated-entity-relationship-diagram.pdf b/doc/complete-auto-generated-entity-relationship-diagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..051d4e9b512dab10de76e00e9689f439f4cdee1a GIT binary patch literal 52167 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 S#Yo3OPYX#*EGR7m`Tqgak4RYn literal 0 HcmV?d00001 diff --git a/lib/tasks/auto_generate_diagram.rake b/lib/tasks/auto_generate_diagram.rake new file mode 100644 index 000000000..637ab2c55 --- /dev/null +++ b/lib/tasks/auto_generate_diagram.rake @@ -0,0 +1,8 @@ +# NOTE: only doing this in development as some production environments (Heroku) +# NOTE: are sensitive to local FS writes, and besides -- it's just not proper +# NOTE: to have a dev-mode tool do its thing in production. +# :nocov: +if Rails.env.development? + RailsERD.load_tasks +end +# :nocov: