rails-mermaid_erd 0.1.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 890249c9517467adbf8e8f60828570108b66490354733153af33ffad6c1a3a2a
4
- data.tar.gz: 2e61e244f9eb1d32fec923e226185e49bc7901ea94e688312f6c7720b7656326
3
+ metadata.gz: 1a0b049ccbaa1ec74fd4f0bc0c55e9b1ca066ac4f9e7b624591e1626edbbcb47
4
+ data.tar.gz: 0c2a7bf4cb12c29f7623e2ceaef53de385f9a2dd9f6d3596786849623e9979c6
5
5
  SHA512:
6
- metadata.gz: f152265387c8fd91bb99f64790dba988e0a09ab4bf05713456c0474f8ed89c447c084cf376bee33017c15734740c67c9add9d69edd56f660d3476bdd3cafcc9e
7
- data.tar.gz: 5239d5dfbeeab9b6a7c228e4d9bfdb55ffed194d9af11451c5407ddb6c7651ad4e9065e304417b0edaaaf978a39fd1d7bb6118244b2e72cc719419c5335cc088
6
+ metadata.gz: 7894f5a5b2717404fb8593295138466678158de760e4704235dbd64ba968dfb180334df4610f615edf670df564d7aca1bfa869a6ba5f54e033883dba80add955
7
+ data.tar.gz: 44011954159232651066fb8a12b58ea27877055a12a7c677641dd37981bfb98ecf3d3caed1c0797ee0fb38f3d61bc8e9050585782d31203d262c5dede90fee46
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
+ [English](./README.md) | [日本語](./README.ja.md)
2
+
1
3
  # Rails Mermaid ERD
2
4
 
5
+ [![test](https://github.com/koedame/rails-mermaid_erd/actions/workflows/run-test.yml/badge.svg)](https://github.com/koedame/rails-mermaid_erd/actions/workflows/run-test.yml)
6
+ [![Gem Version](https://badge.fury.io/rb/rails-mermaid_erd.svg)](https://rubygems.org/gems/rails-mermaid_erd)
7
+
3
8
  Generate [Mermaid ERD](https://mermaid-js.github.io/mermaid/#/entityRelationshipDiagram) from your Ruby on Rails application.
4
9
 
5
10
  [<img src="./docs/screen_shot.png" width="50%">](./docs/screen_shot.png)
@@ -48,6 +53,17 @@ If you share this file, it can be used by those who do not have Ruby on Rails en
48
53
 
49
54
  It would be very smart to generate it automatically using CI.
50
55
 
56
+ ## Configuration
57
+
58
+ `./config/mermaid_erd.yml` to customize the configuration.
59
+ See [./docs/example.yml](./docs/example.yml) for an example configuration.
60
+
61
+ The setting items are as follows.
62
+
63
+ | key | description | default |
64
+ | --- | --- | --- |
65
+ | `result_path` | Destination of generated files. | `mermaid_erd/index.html` |
66
+
51
67
  <!--
52
68
  TODO:
53
69
  ## Contributing
@@ -0,0 +1,21 @@
1
+ require "yaml"
2
+
3
+ module RailsMermaidErd
4
+ class Configuration
5
+ attr_accessor :result_path
6
+
7
+ def initialize
8
+ config = {
9
+ result_path: "mermaid_erd/index.html"
10
+ }
11
+
12
+ config_file = Rails.root.join("config/mermaid_erd.yml")
13
+ if File.exist?(config_file)
14
+ custom_config = YAML.load(config_file.read).symbolize_keys
15
+ config = config.merge(custom_config)
16
+ end
17
+
18
+ @result_path = config[:result_path]
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsMermaidErd
2
- VERSION = "0.1.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -3,10 +3,17 @@ require "fileutils"
3
3
  require "rake"
4
4
  require "rake/dsl_definition"
5
5
  require_relative "rails-mermaid_erd/version"
6
+ require_relative "rails-mermaid_erd/configuration"
6
7
 
7
8
  module RailsMermaidErd
8
9
  extend Rake::DSL
9
10
 
11
+ class << self
12
+ def configuration
13
+ @configuration ||= RailsMermaidErd::Configuration.new
14
+ end
15
+ end
16
+
10
17
  desc "Generate Mermaid ERD."
11
18
  task mermaid_erd: :environment do
12
19
  result = {
@@ -17,6 +24,9 @@ module RailsMermaidErd
17
24
  ::Rails.application.eager_load!
18
25
  ::ActiveRecord::Base.descendants.each do |defined_model|
19
26
  next unless defined_model.table_exists?
27
+
28
+ next if defined_model.name.include?("HABTM_")
29
+
20
30
  model = {
21
31
  TableName: defined_model.table_name,
22
32
  ModelName: defined_model.name,
@@ -84,6 +94,25 @@ module RailsMermaidErd
84
94
  end
85
95
  end
86
96
 
97
+ defined_model.reflect_on_all_associations(:has_and_belongs_to_many).each do |h|
98
+ reverse_relation = if h.options[:class_name]
99
+ result[:Relations].find { |r| r[:RightModelName] == model[:ModelName] && r[:LeftModelName] == h.options[:class_name] }
100
+ else
101
+ result[:Relations].find { |r| r[:RightModelName] == model[:ModelName] && r[:LeftModelName] == h.name.to_s.classify }
102
+ end
103
+ if reverse_relation
104
+ reverse_relation[:Comment] = "HABTM"
105
+ else
106
+ result[:Relations] << {
107
+ LeftModelName: model[:ModelName],
108
+ LeftValue: "}o",
109
+ RightModelName: h.name.to_s.classify,
110
+ RightValue: "o{",
111
+ Comment: "HABTM"
112
+ }
113
+ end
114
+ end
115
+
87
116
  defined_model.reflect_on_all_associations(:belongs_to).each do |h|
88
117
  if h.options[:class_name]
89
118
  reverse_relation = result[:Relations].find { |r| r[:RightModelName] == model[:ModelName] && r[:LeftModelName] == h.options[:class_name] }
@@ -194,9 +223,10 @@ module RailsMermaidErd
194
223
  erb = ERB.new(File.read(File.expand_path("./templates/index.html.erb", __dir__)))
195
224
  result_html = erb.result(binding)
196
225
 
197
- result_dir = Rails.root.join("./mermaid_erd")
198
- result_file = result_dir.join("./index.html")
226
+ result_dir = Rails.root.join(File.dirname(RailsMermaidErd.configuration.result_path))
199
227
  FileUtils.mkdir_p(result_dir)
228
+
229
+ result_file = Rails.root.join(RailsMermaidErd.configuration.result_path)
200
230
  File.write(result_file, result_html)
201
231
  end
202
232
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-mermaid_erd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 肥溜め
@@ -9,22 +9,78 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-10-08 00:00:00.000000000 Z
12
+ date: 2022-10-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: activerecord
15
+ name: rails
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '4.2'
20
+ version: '5.2'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '4.2'
27
+ version: '5.2'
28
+ - !ruby/object:Gem::Dependency
29
+ name: pg
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec-rails
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: standard
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: tzinfo-data
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
28
84
  description:
29
85
  email: []
30
86
  executables: []
@@ -36,6 +92,7 @@ files:
36
92
  - Rakefile
37
93
  - lib/assets/logo.svg
38
94
  - lib/rails-mermaid_erd.rb
95
+ - lib/rails-mermaid_erd/configuration.rb
39
96
  - lib/rails-mermaid_erd/version.rb
40
97
  - lib/templates/index.html.erb
41
98
  homepage: https://github.com/koedame/rails-mermaid_erd
@@ -43,6 +100,7 @@ licenses:
43
100
  - MIT
44
101
  metadata:
45
102
  homepage_uri: https://github.com/koedame/rails-mermaid_erd
103
+ source_code_uri: https://github.com/koedame/rails-mermaid_erd
46
104
  post_install_message:
47
105
  rdoc_options: []
48
106
  require_paths: