rails-realtime-erd 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: efe3b4e2ea8f20ac758e39b19f90494e08dc462d6582e8581555eebf69f2baa6
4
- data.tar.gz: 053f0a83cd28180b2a95895d27e69e13d73299495effbaadc3dc5a97f6806521
3
+ metadata.gz: 2ae54e73c4ce9a8ab0a5c5c5b74f195f3f3442aee53a7696c60dd1186b76a129
4
+ data.tar.gz: 4b0951392d68a93e7a9993854e930dbf465d6e60ecb8a0456fb77fc1a738c4ef
5
5
  SHA512:
6
- metadata.gz: 17ef9d429795bc8100e029edadbb3e78f548cdd8d687f910b019eb1e0e894a0a550fcc5e60d8e848129895dcd03bde37b5e3950bbf08e414a045128bfdbb71f1
7
- data.tar.gz: 71e1b2f091c753a558d1daf47f837fb95328b516f52d36491c368d8468a70657036883f8aeab84defccc855996f487fdbd80fa4781948ac72f7e8009ce7dfd22
6
+ metadata.gz: e68e63082526393acf1ab417a137625cddacf2bb6adb4f51668eaa2b1aa196dbe506bb5c788dc5b1d84f7b8077bdb4c1be35b8491f343b7f8bf5b3df6e40c3df
7
+ data.tar.gz: e01dc9df62a4fc40781961de6cec26a177e340ddc1bf1ceea6393300936fc8b4ded496690e2c6b845b9fe3e745bf1adef46a0bc68e34fc559efc9e20fff4d535
data/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [0.2.0] - 2026-11-12
8
+
9
+ ### Added
10
+
11
+ - "Show Column Type & Size" option: displays each column's raw database type
12
+ (`varchar(255)`, `numeric(10,2)`, `timestamp(6)`, …) instead of the abstract
13
+ Rails type. Verbose Postgres types are shortened to their standard aliases
14
+ (`character varying` → `varchar`, `timestamp with time zone` → `timestamptz`,
15
+ `double precision` → `float8`). ([#1], [#3])
16
+ - Declared `required_ruby_version >= 2.5.0`. ([#2])
17
+
18
+ ### Changed
19
+
20
+ - The viewer now fills the browser window: the page never scrolls, the model
21
+ sidebar scrolls on its own and the ERD/Code panes take the remaining height,
22
+ with the zoom/pan controls always at the bottom of the window. Previously a
23
+ long model list or a small window made the whole page scroll. ([#4])
24
+ - Diagrams are fitted inside the pane on render (never upscaled), so tall
25
+ diagrams are no longer clipped at the top and bottom. SVG/PNG downloads still
26
+ export the full-size diagram. ([#4])
27
+
28
+ ### Fixed
29
+
30
+ - The footer link now points to the gem's repository instead of github.com.
31
+
32
+ ### Compatibility
33
+
34
+ - Tested against Rails 6.1, 7.2 and 8.1 on Ruby 3.0 through 4.0 in CI. ([#2])
35
+
36
+ ## [0.1.0] - 2026-05-17
37
+
38
+ - Initial release.
39
+
40
+ [0.2.0]: https://github.com/jacksonpires/rails-realtime-erd/compare/v0.1.0...v0.2.0
41
+ [0.1.0]: https://github.com/jacksonpires/rails-realtime-erd/releases/tag/v0.1.0
42
+ [#1]: https://github.com/jacksonpires/rails-realtime-erd/pull/1
43
+ [#2]: https://github.com/jacksonpires/rails-realtime-erd/pull/2
44
+ [#3]: https://github.com/jacksonpires/rails-realtime-erd/pull/3
45
+ [#4]: https://github.com/jacksonpires/rails-realtime-erd/pull/4
data/README.md CHANGED
@@ -6,6 +6,10 @@ Inspired by [`rails-mermaid_erd`](https://github.com/koedame/rails-mermaid_erd)
6
6
 
7
7
  The frontend is plain Hotwire (Stimulus) — **no Vue**, no build step, no asset pipeline required in the host app.
8
8
 
9
+ ![Rails Realtime ERD](docs/rails-realtime-erd.gif)
10
+
11
+ ---
12
+
9
13
  ## Features
10
14
 
11
15
  - Mounts `/rails/erd` automatically in `development` and `test` environments
@@ -14,6 +18,8 @@ The frontend is plain Hotwire (Stimulus) — **no Vue**, no build step, no asset
14
18
  - Copy Mermaid code, Copy Markdown, Copy shareable URL (state in `location.hash`)
15
19
  - Download SVG / PNG of the rendered diagram
16
20
  - Sidebar filter to scope the diagram to a subset of models
21
+ - Optional raw column types & sizes as reported by the database (`varchar(255)`, `numeric(10,2)`, …)
22
+ - Full-window viewer: the sidebar scrolls on its own and the diagram is fitted to the pane on render
17
23
  - Works with any host asset pipeline (Sprockets, Propshaft, importmap, or none) — all CSS/JS is inlined by the engine layout
18
24
 
19
25
  ## Installation
@@ -69,8 +75,24 @@ Specs run against a SQLite-backed dummy Rails app in `spec/dummy`. SQLite does n
69
75
  ```bash
70
76
  $ bundle install
71
77
  $ bundle exec rspec
78
+ $ bundle exec standardrb
79
+ ```
80
+
81
+ The root `Gemfile` targets the latest Rails. Older supported Rails versions have their own Gemfile under `gemfiles/`:
82
+
83
+ ```bash
84
+ $ BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle install
85
+ $ BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle exec rspec
72
86
  ```
73
87
 
88
+ CI (`.github/workflows/ci.yml`) runs the suite against this matrix:
89
+
90
+ | Rails | Ruby |
91
+ |---|---|
92
+ | 6.1 (`gemfiles/rails_6_1.gemfile`) | 3.0, 3.3 — Rails 6.1 itself does not load on Ruby ≥ 3.4 |
93
+ | 7.2 (`gemfiles/rails_7_2.gemfile`) | 3.3, 4.0 |
94
+ | 8.1 (`Gemfile`) | 3.4, 4.0 |
95
+
74
96
  ## License
75
97
 
76
98
  MIT. See `MIT-LICENSE`.
@@ -109,8 +109,8 @@ a { color: inherit; text-decoration: inherit; }
109
109
  .h-4 { height: 1rem; }
110
110
  .h-6 { height: 1.5rem; }
111
111
  .h-full { height: 100%; }
112
- .min-h-\[calc\(100vh-56px-32px\)\] { min-height: calc(100vh - 56px - 32px); }
113
- .min-h-\[calc\(100vh-56px-32px-56px\)\] { min-height: calc(100vh - 56px - 32px - 56px); }
112
+ .h-screen { height: 100vh; height: 100dvh; }
113
+ .min-h-0 { min-height: 0; }
114
114
 
115
115
  /* ------- Borders ------- */
116
116
  .border { border-width: 1px; }
@@ -176,6 +176,8 @@ a { color: inherit; text-decoration: inherit; }
176
176
 
177
177
  /* ------- Misc ------- */
178
178
  .overflow-hidden { overflow: hidden; }
179
+ .overflow-y-auto { overflow-y: auto; }
180
+ .resize-none { resize: none; }
179
181
 
180
182
  /* ------- Mermaid override ------- */
181
183
  #mermaid-erd { fill: #9c9c9c !important; }
@@ -206,9 +208,15 @@ a { color: inherit; text-decoration: inherit; }
206
208
  display: flex;
207
209
  align-items: center;
208
210
  justify-content: center;
209
- padding: 1rem;
211
+ /* Bottom padding keeps the fitted diagram clear of the overlaid
212
+ * Movement/Zoom hint bar at the bottom of the pane. */
213
+ padding: 1rem 1rem 5rem;
210
214
  }
215
+ /* Fit the diagram inside the pane on first render (never upscaled: Mermaid
216
+ * caps the SVG at its natural size via an inline max-width). Zoom/pan then
217
+ * works from there. */
211
218
  #rre-preview svg {
212
219
  max-width: 100%;
220
+ max-height: 100%;
213
221
  height: auto;
214
222
  }
@@ -17,8 +17,8 @@ window.RailsRealtimeErdStimulus = application;
17
17
  class FilterController extends Controller {
18
18
  static targets = [
19
19
  "search", "modelList", "modelRow", "modelCheckbox",
20
- "previewRelations", "showRelationComment", "showKey", "showComment", "hideColumns", "showOnlyKeys",
21
- "showKeyLabel", "showCommentLabel", "showOnlyKeysLabel"
20
+ "previewRelations", "showRelationComment", "showKey", "showComment", "showType", "hideColumns", "showOnlyKeys",
21
+ "showKeyLabel", "showCommentLabel", "showTypeLabel", "showOnlyKeysLabel"
22
22
  ];
23
23
 
24
24
  connect() {
@@ -28,6 +28,7 @@ class FilterController extends Controller {
28
28
  isShowRelationComment: false,
29
29
  isShowKey: false,
30
30
  isShowComment: false,
31
+ isShowType: false,
31
32
  isHideColumns: false,
32
33
  isShowOnlyKeys: false,
33
34
  filterText: ""
@@ -56,6 +57,7 @@ class FilterController extends Controller {
56
57
  if (this.hasShowRelationCommentTarget) this.showRelationCommentTarget.checked = !!this.state.isShowRelationComment;
57
58
  if (this.hasShowKeyTarget) this.showKeyTarget.checked = !!this.state.isShowKey;
58
59
  if (this.hasShowCommentTarget) this.showCommentTarget.checked = !!this.state.isShowComment;
60
+ if (this.hasShowTypeTarget) this.showTypeTarget.checked = !!this.state.isShowType;
59
61
  if (this.hasHideColumnsTarget) this.hideColumnsTarget.checked = !!this.state.isHideColumns;
60
62
  if (this.hasShowOnlyKeysTarget) this.showOnlyKeysTarget.checked = !!this.state.isShowOnlyKeys;
61
63
  if (this.hasSearchTarget) this.searchTarget.value = this.state.filterText;
@@ -81,12 +83,14 @@ class FilterController extends Controller {
81
83
  const inputs = [
82
84
  this.hasShowKeyTarget && this.showKeyTarget,
83
85
  this.hasShowCommentTarget && this.showCommentTarget,
86
+ this.hasShowTypeTarget && this.showTypeTarget,
84
87
  this.hasShowOnlyKeysTarget && this.showOnlyKeysTarget
85
88
  ].filter(Boolean);
86
89
  inputs.forEach(input => { input.disabled = disabled; });
87
90
  const labels = [
88
91
  this.hasShowKeyLabelTarget && this.showKeyLabelTarget,
89
92
  this.hasShowCommentLabelTarget && this.showCommentLabelTarget,
93
+ this.hasShowTypeLabelTarget && this.showTypeLabelTarget,
90
94
  this.hasShowOnlyKeysLabelTarget && this.showOnlyKeysLabelTarget
91
95
  ].filter(Boolean);
92
96
  labels.forEach(label => {
@@ -119,6 +123,7 @@ class FilterController extends Controller {
119
123
  isShowRelationComment: this.hasShowRelationCommentTarget && this.showRelationCommentTarget.checked,
120
124
  isShowKey: this.hasShowKeyTarget && this.showKeyTarget.checked,
121
125
  isShowComment: this.hasShowCommentTarget && this.showCommentTarget.checked,
126
+ isShowType: this.hasShowTypeTarget && this.showTypeTarget.checked,
122
127
  isHideColumns: this.hasHideColumnsTarget && this.hideColumnsTarget.checked,
123
128
  isShowOnlyKeys: this.hasShowOnlyKeysTarget && this.showOnlyKeysTarget.checked
124
129
  };
@@ -158,6 +163,7 @@ class FilterController extends Controller {
158
163
  isShowRelationComment: false,
159
164
  isShowKey: false,
160
165
  isShowComment: false,
166
+ isShowType: false,
161
167
  isHideColumns: false,
162
168
  isShowOnlyKeys: false,
163
169
  filterText: ""
@@ -232,7 +238,8 @@ class DiagramController extends Controller {
232
238
  if (state.isShowOnlyKeys && !column.key) return;
233
239
  const key = state.isShowKey ? (column.key || "") : "";
234
240
  const comment = state.isShowComment ? `"${column.comment || ""}"` : "";
235
- lines.push(` ${column.type} ${column.name} ${key} ${comment}`);
241
+ const type = state.isShowType ? this.sanitizeType(column.sql_type) || column.type : column.type;
242
+ lines.push(` ${type} ${column.name} ${key} ${comment}`);
236
243
  });
237
244
  }
238
245
  lines.push(" }");
@@ -247,6 +254,35 @@ class DiagramController extends Controller {
247
254
  return lines.join("\n");
248
255
  }
249
256
 
257
+ // Mermaid erDiagram attribute types must match [*A-Za-z_][A-Za-z0-9\-_\[\]()]*
258
+ // — no spaces, commas or quotes. Postgres reports verbose multi-word types,
259
+ // so map those to their standard short aliases first, then make whatever is
260
+ // left parser-safe:
261
+ // character varying(255) -> varchar(255)
262
+ // timestamp(6) without time zone -> timestamp(6)
263
+ // timestamp with time zone -> timestamptz
264
+ // decimal(10,2) -> decimal(10_2)
265
+ // enum('a','b') -> enum(a_b)
266
+ // integer[] -> integer[]
267
+ sanitizeType(raw) {
268
+ let s = String(raw || "").trim();
269
+ s = s
270
+ .replace(/^character varying/i, "varchar")
271
+ .replace(/^character\b/i, "char")
272
+ .replace(/^bit varying/i, "varbit")
273
+ .replace(/^double precision/i, "float8")
274
+ .replace(/^(timestamp|time)(\(\d+\))? without time zone/i, "$1$2")
275
+ .replace(/^(timestamp|time)(\(\d+\))? with time zone/i, "$1tz$2");
276
+ s = s
277
+ .replace(/['"`]/g, "")
278
+ .replace(/\s*,\s*/g, "_")
279
+ .replace(/[^A-Za-z0-9\-_\[\]()]+/g, "_")
280
+ .replace(/_+/g, "_")
281
+ .replace(/^_+|_+$/g, "");
282
+ if (/^[0-9\-\[\]()]/.test(s)) s = `_${s}`;
283
+ return s;
284
+ }
285
+
250
286
  filteredData(state) {
251
287
  const selected = new Set(state.selectModels || []);
252
288
  let relations;
@@ -330,6 +366,7 @@ class HashStateController extends Controller {
330
366
  isShowRelationComment: !!parsed.isShowRelationComment,
331
367
  isShowKey: !!parsed.isShowKey,
332
368
  isShowComment: !!parsed.isShowComment,
369
+ isShowType: !!parsed.isShowType,
333
370
  isHideColumns: !!parsed.isHideColumns,
334
371
  isShowOnlyKeys: !!parsed.isShowOnlyKeys
335
372
  });
@@ -344,6 +381,7 @@ class HashStateController extends Controller {
344
381
  isShowRelationComment: state.isShowRelationComment,
345
382
  isShowKey: state.isShowKey,
346
383
  isShowComment: state.isShowComment,
384
+ isShowType: state.isShowType,
347
385
  isHideColumns: state.isHideColumns,
348
386
  isShowOnlyKeys: state.isShowOnlyKeys
349
387
  };
@@ -1,9 +1,9 @@
1
- <div class="space-x-2 inline-flex p-4">
1
+ <div class="space-x-2 flex flex-none p-4">
2
2
  <button type="button" data-tab-target="erdButton" data-action="click->tab#showErd" class="text-xs py-1 px-2 rounded hover:bg-white focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-900 bg-white text-gray-900">ERD</button>
3
3
  <button type="button" data-tab-target="codeButton" data-action="click->tab#showCode" class="text-xs py-1 px-2 rounded hover:bg-white focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-900 bg-gray-400 text-gray-900">Code</button>
4
4
  </div>
5
5
 
6
- <div data-tab-target="erdPane" class="px-4 w-full min-h-[calc(100vh-56px-32px-56px)] relative overflow-hidden" data-zoom-pan-target="canvas">
6
+ <div data-tab-target="erdPane" class="px-4 w-full flex-1 min-h-0 relative overflow-hidden" data-zoom-pan-target="canvas">
7
7
  <div data-zoom-pan-target="area">
8
8
  <div id="rre-preview" data-diagram-target="preview"></div>
9
9
  </div>
@@ -37,4 +37,4 @@
37
37
  </div>
38
38
  </div>
39
39
 
40
- <textarea data-tab-target="codePane" data-rre-hidden data-diagram-target="codeOutput" readonly class="px-4 bg-gray-900 text-gray-300 font-mono w-full text-xs min-h-[calc(100vh-56px-32px-56px)] border-0 focus:ring-0 block"></textarea>
40
+ <textarea data-tab-target="codePane" data-rre-hidden data-diagram-target="codeOutput" readonly class="px-4 bg-gray-900 text-gray-300 font-mono w-full text-xs flex-1 min-h-0 resize-none border-0 focus:ring-0 block"></textarea>
@@ -63,6 +63,11 @@
63
63
  <span class="text-xs text-gray-900">Show Column Comment</span>
64
64
  </label>
65
65
 
66
+ <label class="relative flex items-start hover:bg-gray-100 rounded text-sm" data-filter-target="showTypeLabel">
67
+ <input type="checkbox" class="h-4 w-4 rounded border-gray-300 text-red-600 mr-2 focus:ring-red-600" data-filter-target="showType" data-action="change->filter#onOptionChange">
68
+ <span class="text-xs text-gray-900">Show Column Type &amp; Size</span>
69
+ </label>
70
+
66
71
  <label class="relative flex items-start hover:bg-gray-100 rounded text-sm" data-filter-target="showOnlyKeysLabel">
67
72
  <input type="checkbox" class="h-4 w-4 rounded border-gray-300 text-red-600 mr-2 focus:ring-red-600" data-filter-target="showOnlyKeys" data-action="change->filter#onOptionChange">
68
73
  <span class="text-xs text-gray-900">Only Show Keys</span>
@@ -2,13 +2,14 @@
2
2
 
3
3
  <div
4
4
  id="rre-app"
5
+ class="flex flex-col h-screen overflow-hidden"
5
6
  data-controller="hash-state filter diagram clipboard download tab zoom-pan"
6
7
  data-hash-state-filter-outlet="[data-controller~='filter']"
7
8
  data-filter-diagram-outlet="[data-controller~='diagram']"
8
9
  data-clipboard-diagram-outlet="[data-controller~='diagram']"
9
10
  data-download-diagram-outlet="[data-controller~='diagram']"
10
11
  >
11
- <header class="bg-red-600">
12
+ <header class="bg-red-600 flex-none">
12
13
  <nav class="mx-auto px-4">
13
14
  <div class="flex w-full items-center justify-between py-4">
14
15
  <h1 class="text-white inline-flex space-x-2 items-center">
@@ -24,19 +25,19 @@
24
25
  </nav>
25
26
  </header>
26
27
 
27
- <div class="flex">
28
- <aside class="w-[250px] border-r border-gray-300 flex-none p-2">
28
+ <div class="flex flex-1 min-h-0">
29
+ <aside class="w-[250px] border-r border-gray-300 flex-none p-2 overflow-y-auto">
29
30
  <%= render "sidebar" %>
30
31
  </aside>
31
32
 
32
- <main class="flex-1 bg-gray-900 min-h-[calc(100vh-56px-32px)]">
33
+ <main class="flex-1 min-w-0 bg-gray-900 flex flex-col">
33
34
  <%= render "main" %>
34
35
  </main>
35
36
  </div>
36
37
 
37
- <footer class="bg-gray-100">
38
+ <footer class="bg-gray-100 flex-none">
38
39
  <p class="text-center text-xs text-gray-600 py-2">
39
- <a href="https://github.com/" class="hover:text-gray-400" target="_blank" rel="noopener noreferrer">
40
+ <a href="<%= RailsRealtimeErd::HOMEPAGE %>" class="hover:text-gray-400" target="_blank" rel="noopener noreferrer">
40
41
  Rails Realtime ERD v<%= @version %>
41
42
  </a>
42
43
  </p>
data/config/routes.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  RailsRealtimeErd::Engine.routes.draw do
2
2
  root to: "erd#show", as: :erd
3
- get "assets/:name", to: "assets#show", as: :engine_asset, constraints: {name: /[\w.\-]+/}
3
+ get "assets/:name", to: "assets#show", as: :engine_asset, constraints: {name: /[\w.-]+/}
4
4
  end
@@ -37,6 +37,7 @@ module RailsRealtimeErd
37
37
  model[:Columns] << {
38
38
  name: column.name,
39
39
  type: column.type,
40
+ sql_type: column.sql_type,
40
41
  key: key,
41
42
  comment: column.comment
42
43
  }
@@ -11,7 +11,7 @@ module RailsRealtimeErd
11
11
 
12
12
  mount_path = config.mount_path
13
13
  app.routes.append do
14
- mount RailsRealtimeErd::Engine => mount_path, as: :rails_realtime_erd
14
+ mount RailsRealtimeErd::Engine, at: mount_path, as: :rails_realtime_erd
15
15
  end
16
16
  end
17
17
  end
@@ -1,3 +1,4 @@
1
1
  module RailsRealtimeErd
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
+ HOMEPAGE = "https://github.com/jacksonpires/rails-realtime-erd"
3
4
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-realtime-erd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jackson Pires
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-05-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rails
@@ -24,62 +23,6 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: 6.1.7.10
27
- - !ruby/object:Gem::Dependency
28
- name: sqlite3
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 1.5.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 1.5.0
41
- - !ruby/object:Gem::Dependency
42
- name: rspec-rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 6.1.5
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 6.1.5
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 13.4.2
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 13.4.2
69
- - !ruby/object:Gem::Dependency
70
- name: standard
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 1.28.5
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 1.28.5
83
26
  description: Mounts /rails/erd in your Rails app. On every request the gem introspects
84
27
  ActiveRecord models and renders a Mermaid ERD viewer with Stimulus-driven filters,
85
28
  zoom/pan, copy & download. No pre-generated HTML file.
@@ -89,6 +32,7 @@ executables: []
89
32
  extensions: []
90
33
  extra_rdoc_files: []
91
34
  files:
35
+ - CHANGELOG.md
92
36
  - MIT-LICENSE
93
37
  - README.md
94
38
  - Rakefile
@@ -114,9 +58,8 @@ homepage: https://github.com/jacksonpires/rails-realtime-erd
114
58
  licenses:
115
59
  - MIT
116
60
  metadata:
117
- homepage_uri: https://github.com/jacksonpires/rails-realtime-erd
118
61
  source_code_uri: https://github.com/jacksonpires/rails-realtime-erd
119
- post_install_message:
62
+ changelog_uri: https://github.com/jacksonpires/rails-realtime-erd/blob/main/CHANGELOG.md
120
63
  rdoc_options: []
121
64
  require_paths:
122
65
  - lib
@@ -124,15 +67,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
67
  requirements:
125
68
  - - ">="
126
69
  - !ruby/object:Gem::Version
127
- version: '0'
70
+ version: 2.5.0
128
71
  required_rubygems_version: !ruby/object:Gem::Requirement
129
72
  requirements:
130
73
  - - ">="
131
74
  - !ruby/object:Gem::Version
132
75
  version: '0'
133
76
  requirements: []
134
- rubygems_version: 3.0.3.1
135
- signing_key:
77
+ rubygems_version: 4.0.20
136
78
  specification_version: 4
137
79
  summary: Live Mermaid ERD viewer mounted as a Rails route, powered by Hotwire.
138
80
  test_files: []