markdown_ruby_documentation 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/markdown_ruby_documentation/class_level_comment.rb +54 -0
- data/lib/markdown_ruby_documentation/generate.rb +1 -0
- data/lib/markdown_ruby_documentation/markdown_presenter.rb +17 -3
- data/lib/markdown_ruby_documentation/summary.rb +25 -23
- data/lib/markdown_ruby_documentation/version.rb +1 -1
- data/lib/markdown_ruby_documentation.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a68bd5fe5f99c18c45c27e6181f8496cfeebb5d7
|
4
|
+
data.tar.gz: 09a1174ba49e82834e7aca0daffb530f7a685d12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f8121c1c700e8a563a107cecb0186c74bce3e4f9437f5eb6466a5f3da223ee2ff8efd05767420065d169ef90f403a1110ee4c0bf6ca0f981720bb5c02711458
|
7
|
+
data.tar.gz: afccbc3dc8db8ce1fd535207b70500e9998e0a6ea4c61e0e8d77b8b4a72110a1480cedb717b4d8e3b468fc4dca1c67bf2898f1ac1731412d61318fc71a622ac5
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module MarkdownRubyDocumentation
|
2
|
+
class ClassLevelComment
|
3
|
+
attr_reader :subject
|
4
|
+
include TemplateParser::Parsing
|
5
|
+
def initialize(subject)
|
6
|
+
@subject = subject
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(interface)
|
10
|
+
_method = interface.reject do |_, meth|
|
11
|
+
meth[:method_object].is_a?(NullMethod)
|
12
|
+
end.first
|
13
|
+
if _method
|
14
|
+
filename, lineno = _method[1][:method_object].to_proc.source_location
|
15
|
+
comment = extract_dsl_comment(strip_comment_hash(comment(filename, lineno)+"\n"))
|
16
|
+
interface[:class_level_comment] = { text: comment }
|
17
|
+
end
|
18
|
+
interface
|
19
|
+
end
|
20
|
+
|
21
|
+
def comment(filename, lineno)
|
22
|
+
method_to_top_of_file = File.read(filename).split("\n")[0..(lineno-1)]
|
23
|
+
subject_start_line = find_start_of_subject(method_to_top_of_file, filename)
|
24
|
+
extract_last_comment(method_to_top_of_file[0..(subject_start_line-1)].reverse).reverse.join("\n")
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_start_of_subject(method_to_top_of_file, filename)
|
28
|
+
method_to_top_of_file.each_with_index do |line, index|
|
29
|
+
if line =~ /#{subject.class.to_s.downcase} #{subject.name.split("::").last}/
|
30
|
+
return index
|
31
|
+
end
|
32
|
+
end
|
33
|
+
puts /#{subject.class} #{subject.name.split("::").last}/
|
34
|
+
puts method_to_top_of_file
|
35
|
+
raise "class #{subject.name} not found in #{filename}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def extract_last_comment(lines)
|
39
|
+
buffer = []
|
40
|
+
|
41
|
+
lines.each do |line|
|
42
|
+
# Add any line that is a valid ruby comment,
|
43
|
+
# but clear as soon as we hit a non comment line.
|
44
|
+
if line =~ /^\s*#/
|
45
|
+
buffer << line.lstrip
|
46
|
+
else
|
47
|
+
return buffer
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
buffer
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -14,7 +14,11 @@ module MarkdownRubyDocumentation
|
|
14
14
|
def call(items=nil)
|
15
15
|
@items ||= items
|
16
16
|
return "" if nothing_to_display?
|
17
|
-
md = ["# #{summary.title}", "#{summary.summary}\n".gsub(/\n\n\n/, "\n\n"), instances_methods, class_methods, "#{null_methods}\n".gsub(/\n\n\n/, "\n\n")]
|
17
|
+
md = ["# #{summary.title}", "#{summary.summary}\n".gsub(/\n\n\n/, "\n\n"), class_level_comment, instances_methods, class_methods, "#{null_methods}\n".gsub(/\n\n\n/, "\n\n")]
|
18
|
+
.reject(&:empty?)
|
19
|
+
.join("\n")
|
20
|
+
.gsub(/[\n]{3,}/, "\n\n")
|
21
|
+
.gsub(/[\n]+\Z/, "\n\n")
|
18
22
|
other_types!
|
19
23
|
md
|
20
24
|
end
|
@@ -25,6 +29,16 @@ module MarkdownRubyDocumentation
|
|
25
29
|
@item_types ||= items.group_by { |_, hash| hash[:method_object].class.name }
|
26
30
|
end
|
27
31
|
|
32
|
+
def class_level_comment
|
33
|
+
@class_level_comment ||= (items.delete(:class_level_comment) || {})
|
34
|
+
|
35
|
+
if @class_level_comment[:text]
|
36
|
+
"#{@class_level_comment[:text]}\n"
|
37
|
+
else
|
38
|
+
""
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
28
42
|
def instances_methods
|
29
43
|
@instance_methods ||= item_types.delete("MarkdownRubyDocumentation::InstanceMethod") || {}
|
30
44
|
@instance_methods.map do |name, hash|
|
@@ -47,7 +61,7 @@ module MarkdownRubyDocumentation
|
|
47
61
|
if md.blank?
|
48
62
|
""
|
49
63
|
else
|
50
|
-
"## Reference Values\n" << md
|
64
|
+
"\n## Reference Values\n" << md
|
51
65
|
end
|
52
66
|
end
|
53
67
|
|
@@ -56,7 +70,7 @@ module MarkdownRubyDocumentation
|
|
56
70
|
end
|
57
71
|
|
58
72
|
def nothing_to_display?
|
59
|
-
[instances_methods, class_methods, null_methods].all?(&:empty?)
|
73
|
+
[class_level_comment, instances_methods, class_methods, null_methods].all?(&:empty?)
|
60
74
|
end
|
61
75
|
end
|
62
76
|
end
|
@@ -1,32 +1,34 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module MarkdownRubyDocumentation
|
2
|
+
class Summary
|
3
|
+
attr_reader :erb_methods_class, :subject
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
def initialize(subject:, erb_methods_class:)
|
6
|
+
@subject = subject
|
7
|
+
@erb_methods_class = erb_methods_class
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
def title
|
11
|
+
ancestors = subject.ancestors.select do |klass|
|
12
|
+
klass.is_a?(Class) && ![BasicObject, Object, subject].include?(klass)
|
13
|
+
end.sort_by { |klass| klass.name }
|
14
|
+
[format_class(subject), *ancestors.map { |a| create_link(a) }].join(" < ")
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
def summary
|
18
|
+
descendants = ObjectSpace.each_object(Class).select { |klass| klass < subject && !klass.name.include?("InstanceToClassMethods") }.sort_by { |klass| klass.name }
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
descendants_links = descendants.map { |d| create_link(d) }.join(", ")
|
21
|
+
"Descendants: #{descendants_links}" if descendants.count >= 1
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
+
private
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
def create_link(klass)
|
27
|
+
erb_methods_class.link_to_markdown(klass.to_s, title: format_class(klass))
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
def format_class(klass)
|
31
|
+
klass.name.titleize.split("/").last
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
@@ -18,6 +18,7 @@ require "markdown_ruby_documentation/method/null_method"
|
|
18
18
|
require "markdown_ruby_documentation/write_markdown_to_disk"
|
19
19
|
require "markdown_ruby_documentation/default_erb_methods"
|
20
20
|
require "markdown_ruby_documentation/constants_presenter"
|
21
|
+
require "markdown_ruby_documentation/class_level_comment"
|
21
22
|
require "ruby-progressbar"
|
22
23
|
require "active_support/core_ext/string"
|
23
24
|
require "method_source"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown_ruby_documentation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Zeisler
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- bin/setup
|
116
116
|
- lib/github-markdown.css
|
117
117
|
- lib/markdown_ruby_documentation.rb
|
118
|
+
- lib/markdown_ruby_documentation/class_level_comment.rb
|
118
119
|
- lib/markdown_ruby_documentation/constants_presenter.rb
|
119
120
|
- lib/markdown_ruby_documentation/default_erb_methods.rb
|
120
121
|
- lib/markdown_ruby_documentation/generate.rb
|