marmerdo 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: 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