markdown_ruby_documentation 0.12.0 → 0.13.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 +4 -4
- data/lib/markdown_ruby_documentation/constants_presenter.rb +1 -1
- data/lib/markdown_ruby_documentation/generate.rb +20 -16
- data/lib/markdown_ruby_documentation/git_hub_link.rb +4 -4
- data/lib/markdown_ruby_documentation/method.rb +18 -7
- data/lib/markdown_ruby_documentation/template_parser/parsing.rb +35 -2
- data/lib/markdown_ruby_documentation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 473a53d5f03184b6f4fd03121ff0c9234ff2e0ef
|
4
|
+
data.tar.gz: 68055dc5da34403f9284502c8805114ff1863833
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eaf7ffa30459a699a9217e0be2277dec446265dc6a20ba177f7715f8ece4f5b6491cda7ed5959b633da079fc1180411f60e7994b100fd0174ff1aeecc9464833
|
7
|
+
data.tar.gz: c98fefe346906e267609a5c2188fc5fd1be500d0835734911bcca6f4232efd24022d31aec2447414295fd45b4943255e572915fb6eade4ff037d74cf2631d5ed
|
@@ -35,7 +35,7 @@ module MarkdownRubyDocumentation
|
|
35
35
|
def constants
|
36
36
|
subject.constants.each_with_object({}) do |v, const|
|
37
37
|
c = subject.const_get(v)
|
38
|
-
const[v] = self.class.format(c) unless
|
38
|
+
const[v] = self.class.format(c) unless [Regexp, Module, Class].include?(c.class)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module MarkdownRubyDocumentation
|
2
2
|
class Generate
|
3
|
-
# @param [Class] subjects ruby classes to generate documentation from.
|
3
|
+
# @param [Array[Class, String]] subjects ruby classes to generate documentation from and file location.
|
4
4
|
# @param [Module] erb_methods must contain #link_to_markdown and contain any additional methods for comment ERB
|
5
5
|
# @param [Proc] output_object given name: and text: for use in saving the the files.
|
6
6
|
# @param [String] load_path
|
@@ -18,16 +18,18 @@ module MarkdownRubyDocumentation
|
|
18
18
|
erb_methods_class.extend TemplateParser::CommentMacros
|
19
19
|
erb_methods_class.extend erb_methods
|
20
20
|
TemplateParser::CommentMacros.include erb_methods
|
21
|
-
|
22
|
-
|
21
|
+
subject_classes = subjects.map { |h| h.fetch(:class) }
|
22
|
+
left_padding(subject_classes)
|
23
|
+
progressbar(subject_classes)
|
23
24
|
progressbar.title = "Compiling Markdown".ljust(left_padding)
|
24
25
|
batches = subjects.each_slice(parallel_config.fetch(:in_threads, 2))
|
25
26
|
threads = []
|
26
27
|
batches.each do |batch|
|
27
28
|
threads << Thread.new(batch) do |(_batch)|
|
28
29
|
Array[_batch].flatten.map do |subject|
|
29
|
-
|
30
|
-
|
30
|
+
progressbar.title = subject.fetch(:class).name.ljust(left_padding)
|
31
|
+
Page.new(subject_class: subject.fetch(:class),
|
32
|
+
subject_location: subject.fetch(:file_path).to_s,
|
31
33
|
output_object: output_object,
|
32
34
|
erb_methods_class: erb_methods_class,
|
33
35
|
load_path: load_path).call.tap { progressbar.increment }
|
@@ -59,16 +61,18 @@ module MarkdownRubyDocumentation
|
|
59
61
|
end
|
60
62
|
|
61
63
|
class Page
|
62
|
-
attr_reader :subject, :output_object, :erb_methods_class, :load_path
|
64
|
+
attr_reader :subject, :subject_location, :output_object, :erb_methods_class, :load_path
|
63
65
|
|
64
|
-
def initialize(
|
66
|
+
def initialize(subject_class:,
|
67
|
+
subject_location:,
|
65
68
|
methods: [],
|
66
69
|
load_path:,
|
67
70
|
output_object:,
|
68
71
|
erb_methods_class:)
|
69
|
-
initialize_methods(methods,
|
72
|
+
initialize_methods(methods, subject_class, subject_location)
|
70
73
|
@erb_methods_class = erb_methods_class
|
71
|
-
@subject =
|
74
|
+
@subject = subject_class
|
75
|
+
@subject_location = subject_location
|
72
76
|
methods = methods
|
73
77
|
@methods = methods
|
74
78
|
@load_path = load_path
|
@@ -84,21 +88,21 @@ module MarkdownRubyDocumentation
|
|
84
88
|
end
|
85
89
|
|
86
90
|
private
|
87
|
-
def initialize_methods(methods, subject)
|
91
|
+
def initialize_methods(methods, subject, subject_location)
|
88
92
|
if methods.empty?
|
89
|
-
all_instance_and_class_methods(methods, subject)
|
93
|
+
all_instance_and_class_methods(methods, subject, subject_location)
|
90
94
|
else
|
91
|
-
methods.map! { |method| method.is_a?(Symbol) ? InstanceMethod.new("#{subject.name}##{method}", context: subject) : method }
|
95
|
+
methods.map! { |method| method.is_a?(Symbol) ? InstanceMethod.new("#{subject.name}##{method}", context: subject, file_path: subject_location) : method }
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
95
|
-
def all_instance_and_class_methods(methods, subject)
|
99
|
+
def all_instance_and_class_methods(methods, subject, subject_location)
|
96
100
|
native_instance_methods = (subject.instance_methods(false) - Object.instance_methods(false)).concat(subject.private_instance_methods(false) - Object.private_instance_methods(false))
|
97
101
|
super_instance_methods = (subject.instance_methods(true) - Object.instance_methods(true)).concat(subject.private_instance_methods(true) - Object.private_instance_methods(true)) - native_instance_methods
|
98
102
|
klass_m = subject.methods(false).concat(subject.private_methods(false)) - Object.methods
|
99
|
-
methods.concat super_instance_methods.reverse.map { |method| InstanceMethod.new("#{subject.name}##{method}", context: subject, visibility: :super) }
|
100
|
-
methods.concat native_instance_methods.map { |method| InstanceMethod.new("#{subject.name}##{method}", context: subject, visibility: :native) }
|
101
|
-
methods.concat klass_m.map { |method| ClassMethod.new("#{subject.name}.#{method}", context: subject) }
|
103
|
+
methods.concat super_instance_methods.reverse.map { |method| InstanceMethod.new("#{subject.name}##{method}", context: subject, visibility: :super, file_path: subject_location) }
|
104
|
+
methods.concat native_instance_methods.map { |method| InstanceMethod.new("#{subject.name}##{method}", context: subject, visibility: :native, file_path: subject_location) }
|
105
|
+
methods.concat klass_m.map { |method| ClassMethod.new("#{subject.name}.#{method}", context: subject, file_path: subject_location) }
|
102
106
|
end
|
103
107
|
|
104
108
|
def methods_pipeline
|
@@ -10,13 +10,13 @@ module MarkdownRubyDocumentation
|
|
10
10
|
|
11
11
|
def call(hash)
|
12
12
|
hash.each do |name, values|
|
13
|
-
hash[name][:text] = "#{values[:text]}\n\n[show on github](#{create_link(name: name, method_object: values[:method_object])})"
|
13
|
+
hash[name][:text] = "#{values[:text]}\n\n[show on github](#{create_link(name: name, method_object: values[:method_object], context: subject)})"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def create_link(name: nil, method_object: nil)
|
17
|
+
def create_link(name: nil, method_object: nil, context: Kernel)
|
18
18
|
if name && method_object.nil?
|
19
|
-
method_object = Method.create("##{name}")
|
19
|
+
method_object = Method.create("##{name}", context: context)
|
20
20
|
end
|
21
21
|
MethodUrl.new(subject: subject, base_url: base_url, root: root, method_object: method_object).to_s
|
22
22
|
end
|
@@ -66,7 +66,7 @@ module MarkdownRubyDocumentation
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def to_s
|
69
|
-
file, lineno =
|
69
|
+
file, lineno = method_object.source_location
|
70
70
|
FileUrl.new(file_path: file, base_url: base_url, root: root).link(file, lineno)
|
71
71
|
end
|
72
72
|
end
|
@@ -2,12 +2,15 @@ module MarkdownRubyDocumentation
|
|
2
2
|
class Method
|
3
3
|
InvalidMethodReference = Class.new(StandardError)
|
4
4
|
attr_reader :method_reference, :visibility
|
5
|
+
attr_accessor :file_path, :line_no
|
5
6
|
protected :method_reference
|
6
7
|
|
7
|
-
def initialize(method_reference, context: Kernel, visibility: :public)
|
8
|
+
def initialize(method_reference, context: Kernel, visibility: :public, file_path: nil, line_no: nil)
|
8
9
|
@method_reference = method_reference.to_s
|
9
10
|
@context = context
|
10
|
-
@visibility
|
11
|
+
@visibility = visibility
|
12
|
+
@file_path = file_path
|
13
|
+
@line_no = line_no
|
11
14
|
end
|
12
15
|
|
13
16
|
# @param [String] method_reference
|
@@ -16,16 +19,16 @@ module MarkdownRubyDocumentation
|
|
16
19
|
# "Constant.class_method_name" class method on a specific constant.
|
17
20
|
# "SomeClass#instance_method_name" an instance method on a specific constant.
|
18
21
|
# "#instance_method_name" an instance method in the current scope.
|
19
|
-
def self.create(method_reference, null_method: false, context: Kernel, visibility: :public)
|
22
|
+
def self.create(method_reference, null_method: false, context: Kernel, visibility: :public, file_path: nil)
|
20
23
|
return method_reference if method_reference.is_a?(Method)
|
21
24
|
case method_reference
|
22
25
|
when InstanceMethod
|
23
|
-
InstanceMethod.new(method_reference, context: context, visibility: visibility)
|
26
|
+
InstanceMethod.new(method_reference, context: context, visibility: visibility, file_path: file_path)
|
24
27
|
when ClassMethod
|
25
|
-
ClassMethod.new(method_reference, context: context, visibility: visibility)
|
28
|
+
ClassMethod.new(method_reference, context: context, visibility: visibility, file_path: file_path)
|
26
29
|
else
|
27
30
|
if null_method
|
28
|
-
NullMethod.new(method_reference, context: context, visibility: visibility)
|
31
|
+
NullMethod.new(method_reference, context: context, visibility: visibility, file_path: file_path)
|
29
32
|
else
|
30
33
|
raise InvalidMethodReference, "method_reference is formatted incorrectly: '#{method_reference}'"
|
31
34
|
end
|
@@ -63,7 +66,7 @@ module MarkdownRubyDocumentation
|
|
63
66
|
constant = method_reference.split(type_symbol).first
|
64
67
|
begin
|
65
68
|
constant.constantize
|
66
|
-
rescue NameError
|
69
|
+
rescue NameError
|
67
70
|
@context.const_get(constant)
|
68
71
|
end
|
69
72
|
end
|
@@ -97,6 +100,14 @@ module MarkdownRubyDocumentation
|
|
97
100
|
context.public_send(type, name)
|
98
101
|
end
|
99
102
|
|
103
|
+
def source_location
|
104
|
+
if file_path && line_no
|
105
|
+
[file_path, line_no]
|
106
|
+
else
|
107
|
+
context.public_send(type, name).source_location
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
100
111
|
def type
|
101
112
|
raise NotImplementedError
|
102
113
|
end
|
@@ -41,12 +41,45 @@ module MarkdownRubyDocumentation
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def ruby_class_meth_comment(method)
|
44
|
-
method.context.public_send(method.type, method.name).comment
|
45
|
-
|
44
|
+
comment = method.context.public_send(method.type, method.name).comment
|
45
|
+
if comment.blank?
|
46
|
+
look_for_class_macro_comment(method)
|
47
|
+
else
|
48
|
+
comment
|
49
|
+
end
|
46
50
|
rescue MethodSource::SourceNotFoundError => e
|
47
51
|
raise e.class, "#{ method.context}#{method.type_symbol}#{method.name}, \n#{e.message}"
|
48
52
|
end
|
49
53
|
|
54
|
+
CLASS_MACROS = [:attribute]
|
55
|
+
def source_location(file_path, name)
|
56
|
+
return unless file_path && name
|
57
|
+
found_match = nil
|
58
|
+
CLASS_MACROS.each do |macro|
|
59
|
+
if (ln = get_line_number(file_path.split(":").first, "#{macro} #{Regexp.escape(name.inspect)}"))
|
60
|
+
found_match = ln
|
61
|
+
end
|
62
|
+
end
|
63
|
+
[file_path, found_match] if found_match
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_line_number(file, word)
|
67
|
+
return unless file && word
|
68
|
+
count = 0
|
69
|
+
file_or_result = File.open(file, "r") { |file| file.each_line { |line|
|
70
|
+
count += 1
|
71
|
+
return count if line =~ /^[\s]*#{word}/
|
72
|
+
}}
|
73
|
+
file_or_result.is_a?(File) ? nil : file_or_result
|
74
|
+
end
|
75
|
+
|
76
|
+
def look_for_class_macro_comment(method)
|
77
|
+
return "" unless (sl = source_location(method.file_path, method.name))
|
78
|
+
MethodSource.comment_helper(sl, method.name).tap do |comment|
|
79
|
+
method.line_no = sl[1] unless comment.blank?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
50
83
|
def ruby_class_meth_source_location(method)
|
51
84
|
method.context.public_send(method.type, method.name).source_location
|
52
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Zeisler
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|