yard-medoosa 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0a9aafb3def317dbf7e7f5259184d680c5f32b582f84d4c6ee93780b124b330f
4
+ data.tar.gz: 5ad2dc042c73e4f978fd5fce7d96cf8617ffb8580da6f2a0c19ae09d82796621
5
+ SHA512:
6
+ metadata.gz: 2f9cb843b309cb15f360ce9ae088b4bfd71207ce53516579d1e7f5b2e2b8c829ec65a147fbea7c7d85458e8b6db00bb244d30c9f669d463ddc4d5f9a62f6ea15
7
+ data.tar.gz: ddbca4431c1d454d161c1746a4e96c7b9a4a3acbb854afe7d85ccc66909f2ed1e4d53295d032cd2098977baaf9598f3ed9607c6b93f76471d3adea0d84085925
data/bin/yard-medoosa ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require "yard-medoosa"
3
+ puts "Sorry, standalone script not working yet; use:"
4
+ puts " yard doc --plugin medoosa"
@@ -0,0 +1,71 @@
1
+ require "yard"
2
+ require "fileutils"
3
+ require "graphviz"
4
+
5
+ module YARD
6
+ # Enhance YARD documentation by generating class diagrams
7
+ module Medoosa
8
+ def module_children(namespace)
9
+ namespace.children.find_all do |code_object|
10
+ case code_object
11
+ when YARD::CodeObjects::ModuleObject, YARD::CodeObjects::ClassObject
12
+ true
13
+ end
14
+ end
15
+ end
16
+
17
+ # @param graph [Graphviz::Graph]
18
+ # @param all_nodes [Hash{String => Graphviz::Node}] (filled by the method)
19
+ # @param namespace [YARD::CodeObjects::NamespaceObject]
20
+ def add_clusters(graph, all_nodes, namespace)
21
+ children = module_children(namespace)
22
+ if children.empty?
23
+ href = namespace.path.gsub("::", "/") + ".html"
24
+ n = graph.add_node(namespace.path,
25
+ label: namespace.name, shape: "box", href: href)
26
+ all_nodes[namespace.path] = n
27
+ else
28
+ if namespace.is_a? YARD::CodeObjects::RootObject
29
+ sg = graph
30
+ else
31
+ sg = graph.add_subgraph(cluster: true)
32
+ sg.attributes[:name] = namespace.path
33
+ sg.attributes[:label] = namespace.name
34
+ end
35
+ children.each do |c|
36
+ add_clusters(sg, all_nodes, c)
37
+ end
38
+ end
39
+ end
40
+
41
+ # @param basepath Where the YARD output goes
42
+ def generate_medoosa(basepath)
43
+ YARD::Registry.load!
44
+
45
+ g = Graphviz::Graph.new
46
+ all_nodes = {}
47
+ add_clusters(g, all_nodes, YARD::Registry.root)
48
+
49
+ YARD::Registry.all(:class).each do |code_object|
50
+ sup = YARD::Registry.resolve(nil, code_object.superclass)
51
+ next if sup.nil?
52
+
53
+ n = all_nodes.fetch(code_object.path)
54
+ n_sup = all_nodes.fetch(sup.path)
55
+ n_sup.connect(n, arrowtail: "onormal", dir: "back")
56
+ end
57
+
58
+ base_fn = "#{basepath}/medoosa-nesting"
59
+
60
+ File.open("#{base_fn}.f.dot", "w") do |f|
61
+ g.dump_graph(f)
62
+ end
63
+
64
+ system "unflatten -l5 -c5 -o#{base_fn}.dot #{base_fn}.f.dot"
65
+ system "dot -Tpng -o#{base_fn}.png #{base_fn}.dot"
66
+ system "dot -Tsvg -o#{base_fn}.svg #{base_fn}.dot"
67
+
68
+ "#{base_fn}.svg"
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,22 @@
1
+ require "yard/medoosa"
2
+
3
+ module YARD
4
+ module CLI
5
+ # Monkey patch YARD to hook into `yard doc`
6
+ class Yardoc
7
+ include Medoosa
8
+
9
+ def run_generate_with_medoosa(*args)
10
+ run_generate_without_medoosa(*args)
11
+ fname = generate_medoosa(options.serializer.basepath)
12
+ options.files << CodeObjects::ExtraFileObject.new(fname)
13
+ # FIXME: what, do we really run it twice?!
14
+ # yes, until I figure out a better place to hook generate_medoosa in
15
+ run_generate_without_medoosa(*args)
16
+ end
17
+
18
+ alias run_generate_without_medoosa run_generate
19
+ alias run_generate run_generate_with_medoosa
20
+ end
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yard-medoosa
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Martin Vidner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: graphviz
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1'
27
+ description: Enhance YARD documentation by generating class diagrams.
28
+ email: martin@vidner.net
29
+ executables:
30
+ - yard-medoosa
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/yard-medoosa
35
+ - lib/yard-medoosa.rb
36
+ - lib/yard/medoosa.rb
37
+ homepage: https://rubygems.org/gems/yard-medoosa
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.7.6.2
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: YARD class diagrams
61
+ test_files: []