marmerdo 0.1.0 → 0.2.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: 8ce6cbcddd18a42bee1e2598c90df0afbf96e778d02339dfdd78673d38dc8089
4
- data.tar.gz: 4d28c78b6f3795cf1d04f66d5d6f0087fb09a8597eab09fffbbffc6988d95c90
3
+ metadata.gz: 8428d0053c598bd51bf6c6adad87c8039e8609f10abb36b2a1b1851cbf73550b
4
+ data.tar.gz: cd7a5dd6f1450b262921c65400047112c830a6f77260505558bdb40598a7a5d5
5
5
  SHA512:
6
- metadata.gz: 10f9f7c3c329f97182f170708280b48751114cb2c041b6b9ad0051618e15aa0c6c83b505b7365254536b97ee4d6c097978dfa8a759fa756d377ab62f7b44cca8
7
- data.tar.gz: 956553af5976166cec1c91f5dd862d6b5e9b6c379f9b38d9e5b14e50acbd1e02af214a6c74c5ca3e109b4522683d24136be56a2bf184cace2a518479789fb53d
6
+ metadata.gz: bfc719b5f4b91525bb768e0bf055cb81af55a8c79db3ca21c550ff177eeafb26f833bb4ca3c652fb65fa0f98ee5d38da2bb12d2c2f5fc8f7a9c410a239bba4b3
7
+ data.tar.gz: 5f287f8fbc54dc4e820af010fe8fd6c3026c0cb558587401425353e3b4f9d0eab56d22b37b93fdb0d371221196b4ae1db2dc975ab590313ea3bd2c679e9b3abf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.2.0] - 2023-12-18
2
+
3
+ - 警告コメントを追加。
4
+ - Markdowサポートを追加。
5
+ - classにMarkdownファイルへのリンクを追加。
6
+
1
7
  ## [0.1.0] - 2023-12-18
2
8
 
3
- 最低限の機能を備えた初期リリース。
9
+ - 最低限の機能を備えた初期リリース。
data/lib/marmerdo/cli.rb CHANGED
@@ -2,25 +2,32 @@ require "thor"
2
2
  require_relative "error"
3
3
  require_relative "markdown_parser"
4
4
  require_relative "domain_diagram_generator"
5
+ require_relative "output_generator"
5
6
 
6
7
  module Marmerdo
7
8
  class Cli < Thor
8
9
  class ArgumentError < Error; end
9
10
 
10
- desc "generate SOURCE_GLOB OUTPUT", "Generate a mermaid diagram from markdown files"
11
- def generate(source_glob, output)
12
- raise ArgumentError, "You must provide a source glob and an output file" if source_glob.nil? || output.nil?
11
+ desc "generate SOURCE_GLOB OUTPUT_PATH", "Generate a mermaid diagram from markdown files"
12
+ def generate(source_glob, output_path)
13
+ raise ArgumentError, "You must provide a source glob and an output file" if source_glob.nil? || output_path.nil?
13
14
 
14
15
  nodes = Dir[source_glob].map do |source_path|
15
- puts "Parsing #{source_path}"
16
- name = File.basename(source_path, ".*")
17
16
  content = File.read(source_path)
18
- Marmerdo::MarkdownParser.new(name, content).parse
17
+ node = Marmerdo::MarkdownParser.new(source_path, content).parse
18
+
19
+ puts "Loaded #{node.name}." if node
20
+
21
+ node
19
22
  end.compact
20
23
 
21
- puts "Writing diagram to #{output}"
22
- mermaid = Marmerdo::DomainDiagramGenerator.new(nodes).generate
23
- File.write(output, mermaid)
24
+ puts "Writing domain diagram to #{output_path}."
25
+
26
+ domain_diagram = Marmerdo::DomainDiagramGenerator.new(output_path: output_path, nodes: nodes).generate
27
+ output_content = OutputGenerator.new(output_path, domain_diagram).generate
28
+ File.write(output_path, output_content)
29
+
30
+ puts "Done!"
24
31
  end
25
32
  end
26
33
  end
@@ -1,12 +1,14 @@
1
1
  module Marmerdo
2
2
  class DomainDiagramGenerator
3
- def initialize(nodes)
3
+ def initialize(output_path:, nodes:)
4
+ @output_path = output_path
4
5
  @nodes = nodes
5
6
  end
6
7
 
7
8
  # @return [String] mermaid class diagram
8
9
  def generate
9
10
  classes = @nodes.map(&:to_mermaid_line)
11
+ links = @nodes.map { |node| node.generate_mermaid_link(@output_path) }
10
12
 
11
13
  relationships = @nodes.flat_map do |node|
12
14
  node.relationships.map do |relationship|
@@ -17,6 +19,7 @@ module Marmerdo
17
19
  [
18
20
  "classDiagram",
19
21
  classes,
22
+ links,
20
23
  relationships
21
24
  ].flatten.join("\n")
22
25
  end
@@ -4,8 +4,8 @@ require_relative "relationship"
4
4
 
5
5
  module Marmerdo
6
6
  class MarkdownParser
7
- def initialize(name, content)
8
- @name = name
7
+ def initialize(path, content)
8
+ @path = path
9
9
  @content = content
10
10
  end
11
11
 
@@ -14,8 +14,8 @@ module Marmerdo
14
14
  return nil unless marmerdo_file?
15
15
 
16
16
  Node.new(
17
- name: marmerdo_matter["name"] || @name,
18
- namespace: marmerdo_matter["namespace"],
17
+ path: @path,
18
+ name: marmerdo_matter["name"] || File.basename(@path, ".*"),
19
19
  relationships: relationships
20
20
  )
21
21
  end
data/lib/marmerdo/node.rb CHANGED
@@ -1,19 +1,27 @@
1
+ require "pathname"
2
+
1
3
  module Marmerdo
2
4
  class Node
3
- # @return [Symbol, nil]
5
+ # @return [Symbol]
6
+ attr_reader :path
7
+ # @return [Symbol]
4
8
  attr_reader :name
5
- # @return [Symbol, nil]
6
- attr_reader :namespace
7
9
  attr_accessor :relationships
8
10
 
9
- def initialize(name:, namespace:, relationships:)
10
- @name = name&.to_sym
11
- @namespace = namespace&.to_sym
11
+ def initialize(path:, name:, relationships:)
12
+ @path = path
13
+ @name = name.to_sym
12
14
  @relationships = relationships
13
15
  end
14
16
 
15
17
  def to_mermaid_line
16
18
  "class #{name}"
17
19
  end
20
+
21
+ def generate_mermaid_link(output_path)
22
+ output_dir = Pathname.new(output_path).dirname
23
+ relative_path = Pathname.new(path).relative_path_from(output_dir).to_s
24
+ "link #{name} \"#{relative_path}\""
25
+ end
18
26
  end
19
27
  end
@@ -0,0 +1,56 @@
1
+ require_relative "error"
2
+
3
+ module Marmerdo
4
+ # This class generates a markdown or mermaid file from a mermaid diagram.
5
+ class OutputGenerator
6
+ WARNING_COMMENT = "This file was generated by Marmerdo. Do not edit it manually.".freeze
7
+
8
+ class UnknownOutputExtensionError < Error
9
+ def initialize(output_extension)
10
+ super("Unknown output extension #{output_extension}.\nSupported filetypes are markdown and mermaid.")
11
+ end
12
+ end
13
+
14
+ def initialize(output_path, domain_diagram)
15
+ @output_path = output_path
16
+ @domain_diagram = domain_diagram
17
+ end
18
+
19
+ # @return [String]
20
+ def generate
21
+ case output_filetype
22
+ when :markdown
23
+ [
24
+ "<!-- #{WARNING_COMMENT} -->",
25
+ "",
26
+ "```mermaid",
27
+ @domain_diagram,
28
+ "```"
29
+ ].join("\n")
30
+ when :mermaid
31
+ [
32
+ "%% #{WARNING_COMMENT}",
33
+ "",
34
+ @domain_diagram
35
+ ].join("\n")
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def output_extension
42
+ File.extname(@output_path)
43
+ end
44
+
45
+ def output_filetype
46
+ case output_extension
47
+ when ".markdown", ".md"
48
+ :markdown
49
+ when ".mermaid", ".mmd"
50
+ :mermaid
51
+ else
52
+ raise UnknownOutputExtensionError, output_extension
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Marmerdo
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marmerdo
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
  - sijiaoh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-17 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: front_matter_parser
@@ -61,6 +61,7 @@ files:
61
61
  - lib/marmerdo/error.rb
62
62
  - lib/marmerdo/markdown_parser.rb
63
63
  - lib/marmerdo/node.rb
64
+ - lib/marmerdo/output_generator.rb
64
65
  - lib/marmerdo/relationship.rb
65
66
  - lib/marmerdo/version.rb
66
67
  - marmerdo.gemspec