rails-erd 1.7.2 → 2.0.1

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.
@@ -0,0 +1,440 @@
1
+ require File.expand_path("../test_helper", File.dirname(__FILE__))
2
+ require "rails_erd/diagram/mermaid"
3
+
4
+ class MermaidTest < ActiveSupport::TestCase
5
+ def setup
6
+ RailsERD.options.filetype = :png
7
+ RailsERD.options.warn = false
8
+ RailsERD.options.mermaid_style = :classdiagram
9
+ end
10
+
11
+ def diagram(options = {})
12
+ @diagram ||= Diagram::Mermaid.new(Domain.generate(options), options).tap do |diagram|
13
+ diagram.generate
14
+ end
15
+ end
16
+
17
+ def find_dot_nodes(diagram)
18
+ [].tap do |nodes|
19
+ diagram.graph.each_node do |name, node|
20
+ nodes << node
21
+ end
22
+ end
23
+ end
24
+
25
+ # Diagram properties =======================================================
26
+ test "file name should have mmd extension" do
27
+ create_simple_domain
28
+ result = Diagram::Mermaid.create
29
+ assert result.end_with?(".mmd"), "Expected filename to end with .mmd, got: #{result}"
30
+ end
31
+
32
+ test "direction should be top to bottom by default" do
33
+ create_simple_domain
34
+
35
+ assert_equal "\tdirection TB", diagram.graph[1]
36
+ end
37
+
38
+ test "direction should be left to right when orientation is vertical" do
39
+ create_simple_domain
40
+
41
+ d = Diagram::Mermaid.new(Domain.generate, orientation: :vertical).tap { |diag| diag.generate }
42
+ assert_equal "\tdirection LR", d.graph[1]
43
+ end
44
+
45
+
46
+ # # Diagram generation =======================================================
47
+ test "create should create output for domain with attributes" do
48
+ create_model "Foo", :bar => :references, :column => :string do
49
+ belongs_to :bar
50
+ end
51
+
52
+ create_model "Bar", :column => :string
53
+
54
+ expected = [
55
+ "classDiagram",
56
+ "\tdirection TB",
57
+ "\tclass `Bar`",
58
+ "\t`Bar` : +string column",
59
+ "\tclass `Foo`",
60
+ "\t`Foo` : +string column",
61
+ "\t`Bar` --> `Foo`"
62
+ ]
63
+
64
+ assert_equal expected, diagram.graph
65
+ end
66
+
67
+ test "create should create output for domain without attributes" do
68
+ create_simple_domain
69
+
70
+ expected = [
71
+ "classDiagram",
72
+ "\tdirection TB",
73
+ "\tclass `Bar`",
74
+ "\tclass `Beer`",
75
+ "\t`Bar` --> `Beer`"
76
+ ]
77
+
78
+ assert_equal expected, diagram.graph
79
+ end
80
+
81
+ test "create should abort and complain if there are no connected models" do
82
+ message = nil
83
+ begin
84
+ Diagram::Mermaid.create
85
+ rescue => e
86
+ message = e.message
87
+ end
88
+ assert_match(/No entities found/, message)
89
+ end
90
+
91
+ test "create should abort and complain if output directory does not exist" do
92
+ message = nil
93
+
94
+ begin
95
+ create_simple_domain
96
+ Diagram::Mermaid.create(:filename => "does_not_exist/foo")
97
+ rescue => e
98
+ message = e.message
99
+ end
100
+
101
+ assert_match(/Output directory 'does_not_exist' does not exist/, message)
102
+ end
103
+
104
+ test "generate should add attributes to entity" do
105
+ RailsERD.options.markup = false
106
+ create_model "Foo", :bar => :references do
107
+ belongs_to :bar
108
+ end
109
+ create_model "Bar", :column => :string, :column_two => :boolean
110
+
111
+ expected = [
112
+ "classDiagram",
113
+ "\tdirection TB",
114
+ "\tclass `Bar`",
115
+ "\t`Bar` : +string column",
116
+ "\t`Bar` : +boolean column_two",
117
+ "\tclass `Foo`",
118
+ "\t`Bar` --> `Foo`"
119
+ ]
120
+
121
+ assert_equal expected, diagram.graph
122
+ end
123
+
124
+ test "generate should not add any attributes if attributes is set to false" do
125
+ create_model "Jar", :contents => :string
126
+ create_model "Lid", :jar => :references do
127
+ belongs_to :jar
128
+ end
129
+
130
+ expected = [
131
+ "classDiagram",
132
+ "\tdirection TB",
133
+ "\tclass `Jar`",
134
+ "\tclass `Lid`",
135
+ "\t`Jar` --> `Lid`"
136
+ ]
137
+
138
+ assert_equal expected, diagram(:attributes => false).graph
139
+ end
140
+
141
+ test "generate should create edge to polymorphic entity if polymorphism is true" do
142
+ create_model "Cannon", :defensible => :references do
143
+ belongs_to :defensible, :polymorphic => true
144
+ end
145
+
146
+ create_model "Stronghold" do
147
+ has_many :cannons, :as => :defensible
148
+ end
149
+
150
+ create_model "Galleon" do
151
+ has_many :cannons, :as => :defensible
152
+ end
153
+
154
+ expected = [
155
+ "classDiagram",
156
+ "\tdirection TB",
157
+ "\tclass `Cannon`",
158
+ "\tclass `Defensible`",
159
+ "\tclass `Galleon`",
160
+ "\tclass `Stronghold`",
161
+ "\t<<polymorphic>> `Defensible`",
162
+ "\t Defensible <|-- Galleon",
163
+ "\t Defensible <|-- Stronghold",
164
+ "\t`Defensible` --> `Cannon`",
165
+ "\t`Galleon` --> `Cannon`",
166
+ "\t`Stronghold` --> `Cannon`"
167
+ ]
168
+
169
+ assert_equal expected, diagram(:polymorphism => true).graph.uniq
170
+ end
171
+
172
+ test "generate should create edge to each child of polymorphic entity if polymorphism is false" do
173
+ create_model "Cannon", :defensible => :references do
174
+ belongs_to :defensible, :polymorphic => true
175
+ end
176
+
177
+ create_model "Stronghold" do
178
+ has_many :cannons, :as => :defensible
179
+ end
180
+
181
+ create_model "Galleon" do
182
+ has_many :cannons, :as => :defensible
183
+ end
184
+
185
+ expected = [
186
+ "classDiagram",
187
+ "\tdirection TB",
188
+ "\tclass `Cannon`",
189
+ "\tclass `Galleon`",
190
+ "\tclass `Stronghold`",
191
+ "\t`Defensible` --> `Cannon`",
192
+ "\t`Galleon` --> `Cannon`",
193
+ "\t`Stronghold` --> `Cannon`"
194
+ ]
195
+ assert_equal expected, diagram.graph.uniq
196
+ end
197
+
198
+ test "generate should support one to many relationships" do
199
+ create_one_to_many_assoc_domain
200
+
201
+ expected = [
202
+ "classDiagram",
203
+ "\tdirection TB",
204
+ "\tclass `Many`",
205
+ "\tclass `One`",
206
+ "\t`One` --> `Many`"
207
+ ]
208
+
209
+ assert_equal expected, diagram.graph.uniq
210
+ end
211
+
212
+ test "generate should support one to many indirect relationships" do
213
+ create_model "Foo" do
214
+ has_many :bazs
215
+ has_many :bars
216
+ end
217
+
218
+ create_model "Bar", :foo => :references do
219
+ belongs_to :foo
220
+ has_many :bazs, :through => :foo
221
+ end
222
+
223
+ create_model "Baz", :foo => :references do
224
+ belongs_to :foo
225
+ end
226
+
227
+ expected = [
228
+ "classDiagram",
229
+ "\tdirection TB",
230
+ "\tclass `Bar`",
231
+ "\tclass `Baz`",
232
+ "\tclass `Foo`",
233
+ "\t`Foo` --> `Baz`",
234
+ "\t`Foo` --> `Bar`",
235
+ "\t`Bar` ..> `Baz`"
236
+ ]
237
+
238
+ assert_equal expected, diagram.graph.uniq
239
+ end
240
+
241
+ test "generate should support many to many relationships" do
242
+ create_many_to_many_assoc_domain
243
+
244
+ expected = [
245
+ "classDiagram",
246
+ "\tdirection TB",
247
+ "\tclass `Many`",
248
+ "\tclass `More`",
249
+ "\t`Many` <--> `More`"
250
+ ]
251
+
252
+ assert_equal expected, diagram.graph.uniq
253
+ end
254
+
255
+ test "generate should support one to one relationships" do
256
+ create_one_to_one_assoc_domain
257
+
258
+ expected = [
259
+ "classDiagram",
260
+ "\tdirection TB",
261
+ "\tclass `One`",
262
+ "\tclass `Other`",
263
+ "\t`One` -- `Other`"
264
+ ]
265
+
266
+ assert_equal expected, diagram.graph.uniq
267
+ end
268
+
269
+ test "generate should support one to one recursive relationships" do
270
+ create_model "Emperor" do
271
+ belongs_to :predecessor, :class_name => "Emperor"
272
+ has_one :successor, :class_name => "Emperor", :foreign_key => :predecessor_id
273
+ end
274
+
275
+ expected = [
276
+ "classDiagram",
277
+ "\tdirection TB",
278
+ "\tclass `Emperor`",
279
+ "\t`Emperor` -- `Emperor`"
280
+ ]
281
+
282
+ assert_equal expected, diagram.graph.uniq
283
+ end
284
+
285
+ # erDiagram tests ============================================================
286
+
287
+ test "erdiagram style should use erDiagram header" do
288
+ create_simple_domain
289
+
290
+ result = diagram(:mermaid_style => :erdiagram).graph.uniq
291
+
292
+ assert_equal "erDiagram", result[0]
293
+ assert_equal "\tdirection TB", result[1]
294
+ # Entity blocks are joined with newlines
295
+ assert result.any? { |line| line.include?("Bar {") }
296
+ assert result.any? { |line| line.include?("Beer {") }
297
+ # Relationship uses crow's foot notation
298
+ assert result.any? { |line| line.include?("Bar") && line.include?("Beer") && line.include?("--") }
299
+ end
300
+
301
+ test "erdiagram style should include attributes with PK/FK markers" do
302
+ create_model "Foo", :bar => :references, :column => :string do
303
+ belongs_to :bar
304
+ end
305
+
306
+ create_model "Bar", :column => :string
307
+
308
+ result = diagram(:mermaid_style => :erdiagram, :attributes => [:primary_keys, :foreign_keys, :content]).graph.join("\n")
309
+
310
+ assert result.include?("erDiagram")
311
+ assert result.include?("id PK"), "Should include primary key marker"
312
+ assert result.include?("bar_id FK"), "Should include foreign key marker"
313
+ end
314
+
315
+ test "erdiagram style should use crow's foot notation for one to many" do
316
+ create_one_to_many_assoc_domain
317
+
318
+ result = diagram(:mermaid_style => :erdiagram).graph.uniq
319
+
320
+ assert result.include?("erDiagram")
321
+ # One to many should have }| or }o on the "many" side
322
+ relationship_line = result.find { |line| line.include?("One") && line.include?("Many") && line.include?("--") }
323
+ assert relationship_line, "Should have a relationship line between One and Many"
324
+ assert relationship_line.match?(/\}\||\}o/), "Should use crow's foot notation for many side"
325
+ end
326
+
327
+ test "erdiagram style should use crow's foot notation for many to many" do
328
+ create_many_to_many_assoc_domain
329
+
330
+ result = diagram(:mermaid_style => :erdiagram).graph.uniq
331
+
332
+ assert result.include?("erDiagram")
333
+ # Many to many should have }| or }o on both sides
334
+ relationship_line = result.find { |line| line.include?("Many") && line.include?("More") && line.include?("--") }
335
+ assert relationship_line, "Should have a relationship line between Many and More"
336
+ end
337
+
338
+ test "erdiagram style should use crow's foot notation for one to one" do
339
+ create_one_to_one_assoc_domain
340
+
341
+ result = diagram(:mermaid_style => :erdiagram).graph.uniq
342
+
343
+ assert result.any? { |line| line.include?("erDiagram") }
344
+ # One to one should have | on both sides (not })
345
+ relationship_line = result.find { |line| line.include?("One") && line.include?("Other") && line.include?("--") }
346
+ assert relationship_line, "Should have a relationship line between One and Other"
347
+ # Should not have } which indicates "many"
348
+ refute relationship_line.include?("}"), "One-to-one should not use } (many) notation: #{relationship_line}"
349
+ end
350
+
351
+ test "erdiagram style should use dotted line for indirect relationships" do
352
+ create_model "Foo" do
353
+ has_many :bazs
354
+ has_many :bars
355
+ end
356
+
357
+ create_model "Bar", :foo => :references do
358
+ belongs_to :foo
359
+ has_many :bazs, :through => :foo
360
+ end
361
+
362
+ create_model "Baz", :foo => :references do
363
+ belongs_to :foo
364
+ end
365
+
366
+ result = diagram(:mermaid_style => :erdiagram).graph.uniq
367
+
368
+ # Indirect relationship should use .. instead of --
369
+ indirect_line = result.find { |line| line.include?("Bar") && line.include?("Baz") }
370
+ assert indirect_line, "Should have a relationship line between Bar and Baz"
371
+ assert indirect_line.include?(".."), "Indirect relationship should use dotted line"
372
+ end
373
+
374
+ test "er option alias should work same as erdiagram" do
375
+ create_simple_domain
376
+
377
+ result = diagram(:mermaid_style => :er).graph
378
+
379
+ assert result.include?("erDiagram")
380
+ end
381
+
382
+ # Namespace tests (Issue #450) ================================================
383
+
384
+ test "classDiagram should handle namespaced model names" do
385
+ create_model "Post"
386
+ create_module_model "Admin::Author", :post => :references do
387
+ belongs_to :post
388
+ end
389
+
390
+ result = diagram.graph
391
+
392
+ assert result.include?("classDiagram")
393
+ # Backticks should properly escape the namespace
394
+ assert result.any? { |line| line.include?("`Admin::Author`") }, "Should wrap namespaced entity in backticks"
395
+ assert result.any? { |line| line.include?("`Post`") && line.include?("`Admin::Author`") }, "Relationship should use backticks for both entities"
396
+ end
397
+
398
+ test "erDiagram should wrap namespaced model names in double quotes" do
399
+ create_model "Post"
400
+ create_module_model "Admin::Author", :post => :references do
401
+ belongs_to :post
402
+ end
403
+
404
+ result = diagram(:mermaid_style => :erdiagram).graph.join("\n")
405
+
406
+ assert result.include?("erDiagram")
407
+ # Double quotes are required for entity names containing ::
408
+ assert result.include?('"Admin::Author"'), "Should wrap namespaced entity in double quotes, got: #{result}"
409
+ # Relationship line should also quote the namespaced entity (order may vary)
410
+ assert result.match?(/("Admin::Author".*--.*Post|Post.*--.*"Admin::Author")/), "Relationship should quote namespaced entity"
411
+ end
412
+
413
+ test "erDiagram should handle multiple namespaced models in relationships" do
414
+ create_module_model "Admin::User" do
415
+ has_many :posts, class_name: "Blog::Post"
416
+ end
417
+ create_module_model "Blog::Post", :admin_user => :references do
418
+ belongs_to :admin_user, class_name: "Admin::User"
419
+ end
420
+
421
+ result = diagram(:mermaid_style => :erdiagram).graph.join("\n")
422
+
423
+ assert result.include?('"Admin::User"'), "Should quote Admin::User"
424
+ assert result.include?('"Blog::Post"'), "Should quote Blog::Post"
425
+ end
426
+
427
+ test "erDiagram should quote namespaced entities in specialization relationships" do
428
+ create_model "Vehicle", :type => :string
429
+ # Create a namespaced subclass (STI)
430
+ create_module_model "Transport::Car", Vehicle
431
+
432
+ # STI requires inheritance: true option
433
+ result = diagram(:mermaid_style => :erdiagram, :inheritance => true).graph.join("\n")
434
+
435
+ # The specialization relationship should quote the namespaced entity
436
+ assert result.include?('"Transport::Car"'), "Should quote namespaced specialized entity"
437
+ # Verify the specialization relationship line also quotes it
438
+ assert result.match?(/Vehicle.*--.*"Transport::Car"/), "Specialization relationship should quote namespaced entity"
439
+ end
440
+ end
@@ -1,4 +1,6 @@
1
1
  require File.expand_path("../test_helper", File.dirname(__FILE__))
2
+ require "rails_erd/diagram/graphviz"
3
+ require "rails_erd/diagram/mermaid"
2
4
 
3
5
  class RakeTaskTest < ActiveSupport::TestCase
4
6
  include ActiveSupport::Testing::Isolation
@@ -12,10 +14,6 @@ class RakeTaskTest < ActiveSupport::TestCase
12
14
  Rake.application.options.silent = true
13
15
  end
14
16
 
15
- def teardown
16
- FileUtils.rm "erd.dot" rescue nil
17
- end
18
-
19
17
  define_method :create_app do
20
18
  Object::Quux = Module.new
21
19
  Object::Quux::Application = Class.new
@@ -32,10 +30,20 @@ class RakeTaskTest < ActiveSupport::TestCase
32
30
  end
33
31
 
34
32
  # Diagram generation =======================================================
35
- test "generate task should create output based on domain model" do
33
+ test "generate task should create output based on domain model with graphviz by default" do
36
34
  create_simple_domain
37
35
 
38
36
  Diagram.any_instance.expects(:save)
37
+ Rake::Task["erd:options"].execute
38
+ Rake::Task["erd:generate"].execute
39
+ end
40
+
41
+ test "generate task should create output based on domain model with mermaid" do
42
+ create_simple_domain
43
+
44
+ ENV["generator"] = "mermaid"
45
+ RailsERD::Diagram::Mermaid.any_instance.expects(:save)
46
+ Rake::Task["erd:options"].execute
39
47
  Rake::Task["erd:generate"].execute
40
48
  end
41
49
 
@@ -101,7 +109,7 @@ class RakeTaskTest < ActiveSupport::TestCase
101
109
  rescue => e
102
110
  message = e.message
103
111
  end
104
- assert_match(/#{Regexp.escape(<<-MSG.strip).gsub("xxx", ".*?")}/, message
112
+ assert_match(/#{Regexp.escape(<<-MSG.strip).gsub("`xxx'", "(`|').*?")}/, message
105
113
  Loading models failed!
106
114
  Error occurred while loading application: FooBar (RuntimeError)
107
115
  test/unit/rake_task_test.rb:#{l1}:in `xxx'
@@ -186,6 +194,15 @@ Error occurred while loading application: FooBar (RuntimeError)
186
194
  assert_equal :test, RailsERD.options.only_recursion_depth
187
195
  end
188
196
 
197
+ test "options task sets generator type" do
198
+ Rake::Task["erd:options"].execute
199
+ assert_equal :mermaid, RailsERD.options.generator
200
+
201
+ ENV["generator"] = "graphviz"
202
+ Rake::Task["erd:options"].execute
203
+ assert_equal :graphviz, RailsERD.options.generator
204
+ end
205
+
189
206
  test "options task should set single parameter to only as array xxx" do
190
207
  ENV["only"] = "model"
191
208
  Rake::Task["erd:options"].execute
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-erd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.2
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rolf Timmermans
8
8
  - Kerri Miller
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2022-08-13 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
@@ -17,56 +16,70 @@ dependencies:
17
16
  requirements:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '4.2'
19
+ version: '7.0'
21
20
  type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
24
  - - ">="
26
25
  - !ruby/object:Gem::Version
27
- version: '4.2'
26
+ version: '7.0'
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: activesupport
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - ">="
33
32
  - !ruby/object:Gem::Version
34
- version: '4.2'
33
+ version: '7.0'
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - ">="
40
39
  - !ruby/object:Gem::Version
41
- version: '4.2'
40
+ version: '7.0'
42
41
  - !ruby/object:Gem::Dependency
43
- name: ruby-graphviz
42
+ name: choice
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
45
  - - "~>"
47
46
  - !ruby/object:Gem::Version
48
- version: '1.2'
47
+ version: 0.2.0
49
48
  type: :runtime
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
52
  - - "~>"
54
53
  - !ruby/object:Gem::Version
55
- version: '1.2'
54
+ version: 0.2.0
56
55
  - !ruby/object:Gem::Dependency
57
- name: choice
56
+ name: ostruct
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - "~>"
59
+ - - ">="
61
60
  - !ruby/object:Gem::Version
62
- version: 0.2.0
61
+ version: '0'
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-graphviz
71
+ requirement: !ruby/object:Gem::Requirement
66
72
  requirements:
67
73
  - - "~>"
68
74
  - !ruby/object:Gem::Version
69
- version: 0.2.0
75
+ version: '1.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.2'
70
83
  - !ruby/object:Gem::Dependency
71
84
  name: pry
72
85
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +130,7 @@ files:
117
130
  - lib/rails_erd/config.rb
118
131
  - lib/rails_erd/diagram.rb
119
132
  - lib/rails_erd/diagram/graphviz.rb
133
+ - lib/rails_erd/diagram/mermaid.rb
120
134
  - lib/rails_erd/diagram/templates/node.html.erb
121
135
  - lib/rails_erd/diagram/templates/node.record.erb
122
136
  - lib/rails_erd/domain.rb
@@ -130,16 +144,19 @@ files:
130
144
  - lib/rails_erd/version.rb
131
145
  - lib/tasks/auto_generate_diagram.rake
132
146
  - test/support_files/erdconfig.another_example
147
+ - test/support_files/erdconfig.empty
133
148
  - test/support_files/erdconfig.example
134
149
  - test/support_files/erdconfig.exclude.example
135
150
  - test/test_helper.rb
136
151
  - test/unit/attribute_test.rb
137
152
  - test/unit/cardinality_test.rb
153
+ - test/unit/cli_test.rb
138
154
  - test/unit/config_test.rb
139
155
  - test/unit/diagram_test.rb
140
156
  - test/unit/domain_test.rb
141
157
  - test/unit/entity_test.rb
142
158
  - test/unit/graphviz_test.rb
159
+ - test/unit/mermaid_test.rb
143
160
  - test/unit/rake_task_test.rb
144
161
  - test/unit/relationship_test.rb
145
162
  - test/unit/specialization_test.rb
@@ -147,7 +164,6 @@ homepage: https://github.com/voormedia/rails-erd
147
164
  licenses:
148
165
  - MIT
149
166
  metadata: {}
150
- post_install_message:
151
167
  rdoc_options: []
152
168
  require_paths:
153
169
  - lib
@@ -155,29 +171,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
171
  requirements:
156
172
  - - ">="
157
173
  - !ruby/object:Gem::Version
158
- version: '2.2'
174
+ version: '3.1'
159
175
  required_rubygems_version: !ruby/object:Gem::Requirement
160
176
  requirements:
161
177
  - - ">="
162
178
  - !ruby/object:Gem::Version
163
179
  version: '0'
164
180
  requirements: []
165
- rubygems_version: 3.3.15
166
- signing_key:
181
+ rubygems_version: 4.0.10
167
182
  specification_version: 4
168
183
  summary: Entity-relationship diagram for your Rails models.
169
184
  test_files:
170
185
  - test/support_files/erdconfig.another_example
186
+ - test/support_files/erdconfig.empty
171
187
  - test/support_files/erdconfig.example
172
188
  - test/support_files/erdconfig.exclude.example
173
189
  - test/test_helper.rb
174
190
  - test/unit/attribute_test.rb
175
191
  - test/unit/cardinality_test.rb
192
+ - test/unit/cli_test.rb
176
193
  - test/unit/config_test.rb
177
194
  - test/unit/diagram_test.rb
178
195
  - test/unit/domain_test.rb
179
196
  - test/unit/entity_test.rb
180
197
  - test/unit/graphviz_test.rb
198
+ - test/unit/mermaid_test.rb
181
199
  - test/unit/rake_task_test.rb
182
200
  - test/unit/relationship_test.rb
183
201
  - test/unit/specialization_test.rb