activerecord_uml 0.5.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 +7 -0
- data/.gitignore +10 -0
- data/Gemfile +9 -0
- data/README.md +63 -0
- data/Rakefile +4 -0
- data/activerecord_uml.gemspec +35 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/activerecord_uml +7 -0
- data/lib/activerecord_uml.rb +33 -0
- data/lib/activerecord_uml/diagram_drawer.rb +55 -0
- data/lib/activerecord_uml/version.rb +5 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 75bc29669bc6893589083ea59d6dcb6699a53165b3258a008ed69fce1f907c7d
|
4
|
+
data.tar.gz: 8fa743ad797eef029abd1d347654f51589c9b575bced44735ea62752e7b906cc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c026ab1b8b5de2630e49ec544c73693d157cee869c0b8995109e877611a6522d5f48f703dd5d0eb08fb74cf094454a887ba2511353d67837894fa3edf8bed62c
|
7
|
+
data.tar.gz: 6c08b058547c1f8010fefb5048653ff462d47618689b722b23db679e3b1cc375525a1323d77f0ee06936f84e214c55d8f887bae19d15a31a3bd4fd9c6823dfaf
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# ActiverecordUml
|
2
|
+
|
3
|
+
ActiverecordUml draws class diagrams of ActiveRecord models.
|
4
|
+
|
5
|
+
We sometimes wander in the existing Ruby on Rails application.
|
6
|
+
All models are too much to see.
|
7
|
+
We want to select from three to seven models to see their attributes and relations.
|
8
|
+
|
9
|
+
ActiverecordUml draws class diagrams of selected models to help to recognize their attributes and relations.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'activerecord_uml'
|
17
|
+
```
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle install
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install activerecord_uml
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
In your Ruby on Rails directory:
|
30
|
+
|
31
|
+
```
|
32
|
+
activerecord_uml User
|
33
|
+
```
|
34
|
+
|
35
|
+
Execute the activerecord_uml command with name of model classes.
|
36
|
+
Then the activerecord_uml outputs HTML text includes class diagrams of specified model classes.
|
37
|
+
|
38
|
+
For MacOs, I recommend to use the activerecord_uml with [browser](https://gist.github.com/defunkt/318247) command.
|
39
|
+
For example:
|
40
|
+
|
41
|
+
Install browser with Homebrew.
|
42
|
+
|
43
|
+
```
|
44
|
+
$ brew install browser
|
45
|
+
```
|
46
|
+
|
47
|
+
And then execute:
|
48
|
+
|
49
|
+
```
|
50
|
+
activerecord_uml User | browser
|
51
|
+
```
|
52
|
+
|
53
|
+
Open the class diagrams with the browser immediately.
|
54
|
+
|
55
|
+
## Development
|
56
|
+
|
57
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake ` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
58
|
+
|
59
|
+
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](https://rubygems.org).
|
60
|
+
|
61
|
+
## Contributing
|
62
|
+
|
63
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ledsun/activerecord_uml.
|
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/activerecord_uml/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "activerecord_uml"
|
7
|
+
spec.version = ActiverecordUml::VERSION
|
8
|
+
spec.authors = ["shigeru.nakajima"]
|
9
|
+
spec.email = ["shigeru.nakajima@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "Generate UML class diagram from ActiveRecord instances."
|
12
|
+
spec.description = "Generate UML class diagram for Mermaid.js from ActiveRecord instances by Rails runner."
|
13
|
+
spec.homepage = "https://github.com/ledsun/activerecord_uml"
|
14
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
15
|
+
|
16
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
17
|
+
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/ledsun/activerecord_uml"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
# Uncomment to register a new dependency of your gem
|
31
|
+
# spec.add_dependency "example-gem", "~> 1.0"
|
32
|
+
|
33
|
+
# For more information and examples about making a new gem, checkout our
|
34
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
35
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "bundler/setup"
|
5
|
+
require "activerecord_uml"
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require "irb"
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative "activerecord_uml/version"
|
3
|
+
require_relative "activerecord_uml/diagram_drawer"
|
4
|
+
|
5
|
+
module ActiverecordUml
|
6
|
+
def self.draw
|
7
|
+
html = <<EOF
|
8
|
+
<html>
|
9
|
+
<body>
|
10
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
11
|
+
<script>mermaid.initialize({startOnLoad:true});</script>
|
12
|
+
|
13
|
+
<div class="mermaid">
|
14
|
+
|
15
|
+
classDiagram
|
16
|
+
<% class_diagrams.each do |d| %>
|
17
|
+
<%= d %>
|
18
|
+
<% end %>
|
19
|
+
<% relations.each do |r| %>
|
20
|
+
<%= r %>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
</div>
|
24
|
+
</body>
|
25
|
+
</html>
|
26
|
+
EOF
|
27
|
+
|
28
|
+
html_template = ERB.new html, nil, "<>"
|
29
|
+
classes = ARGV.map { |model_name| DiagramDrawer.new(model_name) }
|
30
|
+
puts html_template.result_with_hash class_diagrams: classes.map { |c| c.class_diagram },
|
31
|
+
relations: classes.map { |c| c.relations }.flatten.uniq
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "erb"
|
2
|
+
|
3
|
+
module ActiverecordUml
|
4
|
+
class DiagramDrawer
|
5
|
+
CLASS_TEMPLATE = <<EOF
|
6
|
+
class <%= class_name %> {
|
7
|
+
<% class_name.columns.each do |c| %>
|
8
|
+
<%= sprintf("%8s %s", c.type, c.name) %>
|
9
|
+
<% end %>
|
10
|
+
<% methods.each do |m, parameters| %>
|
11
|
+
<%= sprintf("%s(%s)", m, parameters) %>
|
12
|
+
<% end %>
|
13
|
+
}
|
14
|
+
EOF
|
15
|
+
|
16
|
+
def initialize(model_name)
|
17
|
+
begin
|
18
|
+
@class_name = Object.const_get model_name
|
19
|
+
rescue NameError
|
20
|
+
STDERR.puts "#{model_name}というクラスがみつかりません"
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def class_diagram
|
26
|
+
class_template.result_with_hash class_name: @class_name, methods: methods
|
27
|
+
end
|
28
|
+
|
29
|
+
def relations
|
30
|
+
@class_name.reflect_on_all_associations(:belongs_to).map do |a|
|
31
|
+
"#{a.name.to_s.classify} --* #{@class_name}"
|
32
|
+
end.concat(@class_name.reflect_on_all_associations(:has_many).map do |a|
|
33
|
+
"#{@class_name} --* #{a.name.to_s.classify}"
|
34
|
+
end).concat(@class_name.reflect_on_all_associations(:has_one).map do |a|
|
35
|
+
"#{@class_name} --* #{a.name.to_s.classify}"
|
36
|
+
end)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def class_template
|
42
|
+
ERB.new CLASS_TEMPLATE, nil, "<>"
|
43
|
+
end
|
44
|
+
|
45
|
+
def methods
|
46
|
+
@class_name.public_instance_methods(false).sort.map do |m|
|
47
|
+
method_parameters = @class_name.new.method(m)
|
48
|
+
.parameters
|
49
|
+
.filter { |a| a[0] == :req }
|
50
|
+
.map { |a| a[1] }.join(", ")
|
51
|
+
[m.to_s, method_parameters]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activerecord_uml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- shigeru.nakajima
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Generate UML class diagram for Mermaid.js from ActiveRecord instances
|
14
|
+
by Rails runner.
|
15
|
+
email:
|
16
|
+
- shigeru.nakajima@gmail.com
|
17
|
+
executables:
|
18
|
+
- activerecord_uml
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- ".gitignore"
|
23
|
+
- Gemfile
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- activerecord_uml.gemspec
|
27
|
+
- bin/console
|
28
|
+
- bin/setup
|
29
|
+
- exe/activerecord_uml
|
30
|
+
- lib/activerecord_uml.rb
|
31
|
+
- lib/activerecord_uml/diagram_drawer.rb
|
32
|
+
- lib/activerecord_uml/version.rb
|
33
|
+
homepage: https://github.com/ledsun/activerecord_uml
|
34
|
+
licenses: []
|
35
|
+
metadata:
|
36
|
+
allowed_push_host: https://rubygems.org
|
37
|
+
homepage_uri: https://github.com/ledsun/activerecord_uml
|
38
|
+
source_code_uri: https://github.com/ledsun/activerecord_uml
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.4.0
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubygems_version: 3.2.15
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Generate UML class diagram from ActiveRecord instances.
|
58
|
+
test_files: []
|