yard 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- data/{LICENSE.txt → LICENSE} +1 -1
- data/README +211 -0
- data/Rakefile +31 -0
- data/benchmarks/builtins_vs_eval.rb +23 -0
- data/benchmarks/erb_vs_erubis.rb +53 -0
- data/benchmarks/generation.rb +37 -0
- data/benchmarks/parsing.rb +33 -0
- data/bin/view_generator +17 -0
- data/bin/yard-graph +4 -0
- data/bin/yardoc +1 -93
- data/bin/yri +12 -3
- data/lib/yard.rb +10 -5
- data/lib/yard/autoload.rb +116 -0
- data/lib/yard/cli/yard_graph.rb +86 -0
- data/lib/yard/cli/yardoc.rb +131 -0
- data/lib/yard/code_objects/base.rb +321 -0
- data/lib/yard/code_objects/class_object.rb +89 -0
- data/lib/yard/code_objects/class_variable_object.rb +4 -0
- data/lib/yard/code_objects/constant_object.rb +4 -0
- data/lib/yard/code_objects/method_object.rb +51 -0
- data/lib/yard/code_objects/module_object.rb +4 -0
- data/lib/yard/code_objects/namespace_object.rb +88 -0
- data/lib/yard/code_objects/proxy.rb +183 -0
- data/lib/yard/code_objects/root_object.rb +8 -0
- data/lib/yard/core_ext/file.rb +26 -0
- data/lib/yard/core_ext/logger.rb +5 -0
- data/lib/yard/core_ext/module.rb +9 -0
- data/lib/yard/core_ext/string.rb +13 -0
- data/lib/yard/core_ext/symbol_hash.rb +24 -0
- data/lib/yard/generators/attributes_generator.rb +22 -0
- data/lib/yard/generators/base.rb +285 -0
- data/lib/yard/generators/class_generator.rb +25 -0
- data/lib/yard/generators/constants_generator.rb +73 -0
- data/lib/yard/generators/constructor_generator.rb +25 -0
- data/lib/yard/generators/deprecated_generator.rb +15 -0
- data/lib/yard/generators/docstring_generator.rb +15 -0
- data/lib/yard/generators/full_doc_generator.rb +59 -0
- data/lib/yard/generators/helpers/base_helper.rb +52 -0
- data/lib/yard/generators/helpers/filter_helper.rb +21 -0
- data/lib/yard/generators/helpers/html_helper.rb +137 -0
- data/lib/yard/generators/helpers/method_helper.rb +27 -0
- data/lib/yard/generators/helpers/uml_helper.rb +16 -0
- data/lib/yard/generators/inheritance_generator.rb +16 -0
- data/lib/yard/generators/method_details_generator.rb +18 -0
- data/lib/yard/generators/method_generator.rb +31 -0
- data/lib/yard/generators/method_listing_generator.rb +105 -0
- data/lib/yard/generators/method_missing_generator.rb +25 -0
- data/lib/yard/generators/method_signature_generator.rb +19 -0
- data/lib/yard/generators/method_summary_generator.rb +21 -0
- data/lib/yard/generators/mixins_generator.rb +15 -0
- data/lib/yard/generators/module_generator.rb +22 -0
- data/lib/yard/generators/quick_doc_generator.rb +31 -0
- data/lib/yard/generators/source_generator.rb +26 -0
- data/lib/yard/generators/tags_generator.rb +50 -0
- data/lib/yard/generators/uml_generator.rb +92 -0
- data/lib/yard/generators/visibility_group_generator.rb +26 -0
- data/lib/yard/handlers/alias_handler.rb +32 -0
- data/lib/yard/handlers/attribute_handler.rb +54 -0
- data/lib/yard/handlers/base.rb +509 -0
- data/lib/yard/handlers/class_handler.rb +44 -0
- data/lib/yard/handlers/class_variable_handler.rb +13 -0
- data/lib/yard/handlers/constant_handler.rb +13 -0
- data/lib/yard/handlers/exception_handler.rb +12 -0
- data/lib/yard/handlers/method_handler.rb +27 -0
- data/lib/yard/handlers/mixin_handler.rb +16 -0
- data/lib/yard/handlers/module_handler.rb +9 -0
- data/lib/yard/handlers/visibility_handler.rb +14 -0
- data/lib/yard/handlers/yield_handler.rb +26 -0
- data/lib/yard/logging.rb +27 -0
- data/lib/yard/parser/ruby_lex.rb +1344 -0
- data/lib/yard/parser/source_parser.rb +109 -0
- data/lib/yard/parser/statement.rb +36 -0
- data/lib/yard/parser/statement_list.rb +167 -0
- data/lib/yard/parser/token_list.rb +58 -0
- data/lib/yard/rake/yardoc_task.rb +30 -0
- data/lib/yard/registry.rb +136 -0
- data/lib/yard/serializers/base.rb +16 -0
- data/lib/yard/serializers/file_system_serializer.rb +48 -0
- data/lib/yard/serializers/process_serializer.rb +14 -0
- data/lib/yard/serializers/stdout_serializer.rb +21 -0
- data/lib/yard/tags/default_factory.rb +98 -0
- data/lib/yard/tags/library.rb +109 -0
- data/lib/yard/tags/merbdoc_factory.rb +47 -0
- data/lib/yard/tags/tag.rb +35 -0
- data/spec/code_objects/base_spec.rb +219 -0
- data/spec/code_objects/class_object_spec.rb +176 -0
- data/spec/code_objects/code_object_list_spec.rb +33 -0
- data/spec/code_objects/constants_spec.rb +79 -0
- data/spec/code_objects/method_object_spec.rb +30 -0
- data/spec/code_objects/module_object_spec.rb +73 -0
- data/spec/code_objects/namespace_object_spec.rb +129 -0
- data/spec/code_objects/proxy_spec.rb +80 -0
- data/spec/code_objects/spec_helper.rb +3 -0
- data/spec/core_ext/file_spec.rb +20 -0
- data/spec/core_ext/string_spec.rb +4 -0
- data/spec/core_ext/symbol_hash_spec.rb +80 -0
- data/spec/generators/base_spec.rb +64 -0
- data/spec/generators/helpers/base_helper_spec.rb +15 -0
- data/spec/generators/helpers/html_helper_spec.rb +56 -0
- data/spec/generators/quick_doc_generator_spec.rb +13 -0
- data/spec/handlers/alias_handler_spec.rb +50 -0
- data/spec/handlers/attribute_handler_spec.rb +78 -0
- data/spec/handlers/base_spec.rb +165 -0
- data/spec/handlers/class_handler_spec.rb +68 -0
- data/spec/handlers/class_variable_handler_spec.rb +9 -0
- data/spec/handlers/constant_handler_spec.rb +13 -0
- data/spec/handlers/examples/alias_handler_001.rb.txt +24 -0
- data/spec/handlers/examples/attribute_handler_001.rb.txt +19 -0
- data/spec/handlers/examples/class_handler_001.rb.txt +39 -0
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -0
- data/spec/handlers/examples/constant_handler_001.rb.txt +10 -0
- data/spec/handlers/examples/exception_handler_001.rb.txt +42 -0
- data/spec/handlers/examples/method_handler_001.rb.txt +35 -0
- data/spec/handlers/examples/mixin_handler_001.rb.txt +12 -0
- data/spec/handlers/examples/module_handler_001.rb.txt +16 -0
- data/spec/handlers/examples/visibility_handler_001.rb.txt +20 -0
- data/spec/handlers/examples/yield_handler_001.rb.txt +55 -0
- data/spec/handlers/exception_handler_spec.rb +35 -0
- data/spec/handlers/method_handler_spec.rb +35 -0
- data/spec/handlers/mixin_handler_spec.rb +30 -0
- data/spec/handlers/module_handler_spec.rb +25 -0
- data/spec/handlers/spec_helper.rb +21 -0
- data/spec/handlers/visibility_handler_spec.rb +24 -0
- data/spec/handlers/yield_handler_spec.rb +51 -0
- data/spec/parser/examples/example1.rb.txt +8 -0
- data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
- data/spec/parser/source_parser_spec.rb +43 -0
- data/spec/parser/tag_parsing_spec.rb +18 -0
- data/spec/parser/token_list_spec.rb +35 -0
- data/spec/registry_spec.rb +70 -0
- data/spec/serializers/file_system_serializer_spec.rb +91 -0
- data/spec/serializers/spec_helper.rb +2 -0
- data/spec/spec_helper.rb +77 -0
- data/templates/default/attributes/html/header.erb +35 -0
- data/templates/default/attributes/text/header.erb +10 -0
- data/templates/default/class/html/header.erb +4 -0
- data/templates/default/constants/html/constants.erb +9 -0
- data/templates/default/constants/html/header.erb +3 -0
- data/templates/default/constants/html/included.erb +9 -0
- data/templates/default/constants/html/inherited.erb +9 -0
- data/templates/default/constructor/html/header.erb +10 -0
- data/templates/default/deprecated/html/main.erb +4 -0
- data/templates/default/deprecated/text/main.erb +3 -0
- data/templates/default/docstring/html/main.erb +3 -0
- data/templates/default/docstring/text/main.erb +3 -0
- data/templates/default/fulldoc/html/all_methods.erb +25 -0
- data/templates/default/fulldoc/html/all_namespaces.erb +19 -0
- data/templates/default/fulldoc/html/app.js +18 -0
- data/templates/default/fulldoc/html/header.erb +15 -0
- data/templates/default/fulldoc/html/html_head.erb +3 -0
- data/templates/default/fulldoc/html/index.erb +18 -0
- data/templates/default/fulldoc/html/jquery.js +11 -0
- data/templates/default/fulldoc/html/readme.erb +15 -0
- data/templates/default/fulldoc/html/style.css +65 -0
- data/templates/default/fulldoc/html/syntax_highlight.css +21 -0
- data/templates/default/inheritance/html/header.erb +8 -0
- data/templates/default/inheritance/text/header.erb +3 -0
- data/templates/default/method/html/aliases.erb +6 -0
- data/templates/default/method/html/header.erb +3 -0
- data/templates/default/method/html/title.erb +3 -0
- data/templates/default/methoddetails/html/header.erb +8 -0
- data/templates/default/methoddetails/html/method_header.erb +3 -0
- data/templates/default/methodmissing/html/header.erb +12 -0
- data/templates/default/methodsignature/html/main.erb +8 -0
- data/templates/default/methodsignature/text/main.erb +5 -0
- data/templates/default/methodsummary/html/header.erb +5 -0
- data/templates/default/methodsummary/html/included.erb +9 -0
- data/templates/default/methodsummary/html/inherited.erb +9 -0
- data/templates/default/methodsummary/html/summary.erb +25 -0
- data/templates/default/methodsummary/text/header.erb +5 -0
- data/templates/default/methodsummary/text/included.erb +0 -0
- data/templates/default/methodsummary/text/inherited.erb +0 -0
- data/templates/default/methodsummary/text/summary.erb +3 -0
- data/templates/default/mixins/html/header.erb +4 -0
- data/templates/default/module/html/header.erb +4 -0
- data/templates/default/quickdoc/html/header.erb +15 -0
- data/templates/default/quickdoc/text/header.erb +12 -0
- data/templates/default/source/html/main.erb +15 -0
- data/templates/default/source/text/main.erb +4 -0
- data/templates/default/tags/html/header.erb +4 -0
- data/templates/default/tags/html/see.erb +13 -0
- data/templates/default/tags/html/tags.erb +20 -0
- data/templates/default/tags/text/header.erb +3 -0
- data/templates/default/tags/text/see.erb +5 -0
- data/templates/default/tags/text/tags.erb +7 -0
- data/templates/default/uml/dot/child.erb +1 -0
- data/templates/default/uml/dot/dependencies.erb +10 -0
- data/templates/default/uml/dot/header.erb +6 -0
- data/templates/default/uml/dot/info.erb +14 -0
- data/templates/default/uml/dot/subgraph.erb +6 -0
- data/templates/default/uml/dot/superclasses.erb +9 -0
- data/templates/default/uml/dot/unknown.erb +3 -0
- data/templates/default/uml/dot/unknown_child.erb +1 -0
- data/templates/default/visibilitygroup/html/header.erb +6 -0
- data/templates/javadoc/attributes/html/header.erb +16 -0
- data/templates/javadoc/class/html/header.erb +4 -0
- data/templates/javadoc/constants/html/constants.erb +9 -0
- data/templates/javadoc/constants/html/header.erb +3 -0
- data/templates/javadoc/constants/html/included.erb +12 -0
- data/templates/javadoc/constants/html/inherited.erb +12 -0
- data/templates/javadoc/constructor/html/header.erb +10 -0
- data/templates/javadoc/deprecated/html/main.erb +0 -0
- data/templates/javadoc/docstring/html/main.erb +6 -0
- data/templates/javadoc/fulldoc/html/all_methods.erb +25 -0
- data/templates/javadoc/fulldoc/html/all_namespaces.erb +19 -0
- data/templates/javadoc/fulldoc/html/app.js +18 -0
- data/templates/javadoc/fulldoc/html/header.erb +15 -0
- data/templates/javadoc/fulldoc/html/html_head.erb +3 -0
- data/templates/javadoc/fulldoc/html/index.erb +18 -0
- data/templates/javadoc/fulldoc/html/jquery.js +11 -0
- data/templates/javadoc/fulldoc/html/readme.erb +15 -0
- data/templates/javadoc/fulldoc/html/style.css +22 -0
- data/templates/javadoc/fulldoc/html/syntax_highlight.css +21 -0
- data/templates/javadoc/inheritance/html/header.erb +6 -0
- data/templates/javadoc/method/html/aliases.erb +6 -0
- data/templates/javadoc/method/html/header.erb +4 -0
- data/templates/javadoc/method/html/title.erb +4 -0
- data/templates/javadoc/methoddetails/html/header.erb +8 -0
- data/templates/javadoc/methoddetails/html/method_header.erb +0 -0
- data/templates/javadoc/methodmissing/html/header.erb +12 -0
- data/templates/javadoc/methodsignature/html/main.erb +8 -0
- data/templates/javadoc/methodsummary/html/header.erb +5 -0
- data/templates/javadoc/methodsummary/html/included.erb +12 -0
- data/templates/javadoc/methodsummary/html/inherited.erb +12 -0
- data/templates/javadoc/methodsummary/html/summary.erb +25 -0
- data/templates/javadoc/mixins/html/header.erb +5 -0
- data/templates/javadoc/module/html/header.erb +4 -0
- data/templates/javadoc/source/html/main.erb +15 -0
- data/templates/javadoc/tags/html/header.erb +5 -0
- data/templates/javadoc/tags/html/see.erb +8 -0
- data/templates/javadoc/tags/html/tags.erb +19 -0
- data/templates/javadoc/visibilitygroup/html/header.erb +5 -0
- metadata +352 -50
- data/README.pdf +0 -0
- data/lib/code_object.rb +0 -337
- data/lib/extra.rb +0 -8
- data/lib/formatter.rb +0 -90
- data/lib/handlers/all_handlers.rb +0 -2
- data/lib/handlers/attribute_handler.rb +0 -51
- data/lib/handlers/class_handler.rb +0 -30
- data/lib/handlers/class_variable_handler.rb +0 -9
- data/lib/handlers/code_object_handler.rb +0 -104
- data/lib/handlers/constant_handler.rb +0 -11
- data/lib/handlers/exception_handler.rb +0 -20
- data/lib/handlers/method_handler.rb +0 -28
- data/lib/handlers/mixin_handler.rb +0 -15
- data/lib/handlers/module_handler.rb +0 -9
- data/lib/handlers/visibility_handler.rb +0 -7
- data/lib/handlers/yield_handler.rb +0 -33
- data/lib/logger.rb +0 -19
- data/lib/namespace.rb +0 -98
- data/lib/quick_doc.rb +0 -104
- data/lib/ruby_lex.rb +0 -1321
- data/lib/source_parser.rb +0 -253
- data/lib/tag_library.rb +0 -175
- data/lib/tag_type.rb +0 -155
- data/templates/default/html/_fulldoc.erb +0 -64
- data/templates/default/html/class.erb +0 -226
- data/templates/default/html/method.erb +0 -20
- data/templates/default/html/module.erb +0 -126
- data/test/fixtures/docstring.txt +0 -23
- data/test/fixtures/docstring2.txt +0 -4
- data/test/test_code_object.rb +0 -66
- data/test/test_namespace.rb +0 -10
@@ -0,0 +1,13 @@
|
|
1
|
+
class String
|
2
|
+
# @it should turn hello_world into HelloWorld
|
3
|
+
# "hello_world".camelcase.should == "HelloWorld"
|
4
|
+
def underscore
|
5
|
+
gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
6
|
+
end
|
7
|
+
|
8
|
+
# @it should turn HelloWorld into hello_world
|
9
|
+
# "HelloWorld".underscore.should == "hello_world"
|
10
|
+
def camelcase
|
11
|
+
gsub(/([a-z])_([a-z])/i) { $1 + $2.upcase }.sub(/^(.)/) { $1.upcase }
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class SymbolHash < Hash
|
2
|
+
def initialize(symbolize_value = true)
|
3
|
+
@symbolize_value = symbolize_value
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.[](*hsh)
|
7
|
+
obj = new;
|
8
|
+
if hsh.size == 1 && hsh.first.is_a?(Hash)
|
9
|
+
hsh.first.each {|k,v| obj[k] = v }
|
10
|
+
else
|
11
|
+
0.step(hsh.size, 2) {|n| obj[hsh[n]] = hsh[n+1] }
|
12
|
+
end
|
13
|
+
obj
|
14
|
+
end
|
15
|
+
|
16
|
+
def []=(key, value)
|
17
|
+
super(key.to_sym, value.instance_of?(String) && @symbolize_value ? value.to_sym : value)
|
18
|
+
end
|
19
|
+
def [](key) super(key.to_sym) end
|
20
|
+
def delete(key) super(key.to_sym) end
|
21
|
+
def has_key?(key) super(key.to_sym) end
|
22
|
+
def update(hsh) hsh.each {|k,v| self[k] = v }; self end
|
23
|
+
alias_method :merge, :update
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module YARD
|
2
|
+
module Generators
|
3
|
+
class AttributesGenerator < Base
|
4
|
+
include Helpers::MethodHelper
|
5
|
+
|
6
|
+
before_generate :has_attributes?
|
7
|
+
before_list :includes
|
8
|
+
|
9
|
+
def sections_for(object) [:header] end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def includes
|
14
|
+
extend Helpers::UMLHelper if format == :text
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_attributes?
|
18
|
+
current_object.class_attributes.size + current_object.instance_attributes.size > 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,285 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module YARD
|
4
|
+
module Generators
|
5
|
+
class Base
|
6
|
+
include Helpers::BaseHelper
|
7
|
+
include Helpers::FilterHelper
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def template_paths
|
11
|
+
@@template_paths ||= [TEMPLATE_ROOT]
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# Convenience method to registering a template path.
|
16
|
+
# Equivalent to calling:
|
17
|
+
# GeneratorName.template_paths.unshift(path)
|
18
|
+
#
|
19
|
+
# @param [String] path
|
20
|
+
# the pathname to look for the template
|
21
|
+
#
|
22
|
+
# @see template_paths
|
23
|
+
def register_template_path(path)
|
24
|
+
template_paths.unshift(path)
|
25
|
+
end
|
26
|
+
|
27
|
+
def before_section(*args)
|
28
|
+
if args.size == 1
|
29
|
+
before_section_filters.push [nil, args.first]
|
30
|
+
elsif args.size == 2
|
31
|
+
before_section_filters.push(args)
|
32
|
+
else
|
33
|
+
raise ArgumentError, "before_section takes a generator followed by a Proc/lambda or Symbol referencing the method name"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def before_section_filters
|
38
|
+
@before_section_filters ||= []
|
39
|
+
end
|
40
|
+
|
41
|
+
def before_generate(meth)
|
42
|
+
before_generate_filters.push(meth)
|
43
|
+
end
|
44
|
+
|
45
|
+
def before_generate_filters
|
46
|
+
@before_generate_filters ||= []
|
47
|
+
end
|
48
|
+
|
49
|
+
def before_list(meth)
|
50
|
+
before_list_filters.push(meth)
|
51
|
+
end
|
52
|
+
|
53
|
+
def before_list_filters
|
54
|
+
@before_list_filters ||= []
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Creates a generator by adding extra options
|
59
|
+
# to the options hash.
|
60
|
+
#
|
61
|
+
# @example [Creates a new MethodSummaryGenerator for public class methods]
|
62
|
+
# G(MethodSummaryGenerator, :scope => :class, :visibility => :public)
|
63
|
+
#
|
64
|
+
# @param [Class] generator
|
65
|
+
# the generator class to use.
|
66
|
+
#
|
67
|
+
# @options opts
|
68
|
+
# :ignore_serializer -> true => value
|
69
|
+
#
|
70
|
+
#
|
71
|
+
def G(generator, opts = {})
|
72
|
+
opts = SymbolHash[:ignore_serializer => true].update(opts)
|
73
|
+
generator.new(options, opts)
|
74
|
+
end
|
75
|
+
|
76
|
+
attr_reader :format, :template, :verifier
|
77
|
+
attr_reader :serializer, :ignore_serializer
|
78
|
+
attr_reader :options
|
79
|
+
attr_reader :current_object
|
80
|
+
|
81
|
+
def initialize(opts = {}, extra_opts = {})
|
82
|
+
opts = SymbolHash[
|
83
|
+
:format => :html,
|
84
|
+
:template => :default,
|
85
|
+
:serializer => nil,
|
86
|
+
:verifier => nil
|
87
|
+
].update(opts).update(extra_opts)
|
88
|
+
|
89
|
+
@options = opts
|
90
|
+
@format = options[:format]
|
91
|
+
@template = options[:template]
|
92
|
+
@serializer = options[:serializer]
|
93
|
+
@ignore_serializer = options[:ignore_serializer]
|
94
|
+
@verifier = options[:verifier]
|
95
|
+
|
96
|
+
extend Helpers::HtmlHelper if format == :html
|
97
|
+
end
|
98
|
+
|
99
|
+
def generator_name
|
100
|
+
self.class.to_s.split("::").last.gsub(/Generator$/, '').downcase
|
101
|
+
end
|
102
|
+
|
103
|
+
def generate(*list, &block)
|
104
|
+
output = ""
|
105
|
+
|
106
|
+
list = list.flatten
|
107
|
+
@current_object = Registry.root
|
108
|
+
return output if FalseClass === run_before_list(list)
|
109
|
+
|
110
|
+
serializer.before_serialize if serializer && !ignore_serializer
|
111
|
+
|
112
|
+
list.each do |object|
|
113
|
+
next unless object && object.is_a?(CodeObjects::Base)
|
114
|
+
|
115
|
+
objout = ""
|
116
|
+
@current_object = object
|
117
|
+
|
118
|
+
next if call_verifier(object).is_a?(FalseClass)
|
119
|
+
next if run_before_generate(object).is_a?(FalseClass)
|
120
|
+
|
121
|
+
objout << render_sections(object, &block)
|
122
|
+
|
123
|
+
if serializer && !ignore_serializer && !objout.empty?
|
124
|
+
serializer.serialize(object, objout)
|
125
|
+
end
|
126
|
+
output << objout
|
127
|
+
end
|
128
|
+
|
129
|
+
if serializer && !ignore_serializer
|
130
|
+
serializer.after_serialize(output)
|
131
|
+
end
|
132
|
+
output
|
133
|
+
end
|
134
|
+
|
135
|
+
protected
|
136
|
+
|
137
|
+
def call_verifier(object)
|
138
|
+
if verifier.is_a?(Symbol)
|
139
|
+
send(verifier, object)
|
140
|
+
elsif verifier.respond_to?(:call)
|
141
|
+
verifier.call(self, object)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def run_before_list(list)
|
146
|
+
self.class.before_list_filters.each do |meth|
|
147
|
+
meth = method(meth) if meth.is_a?(Symbol)
|
148
|
+
result = meth.call *(meth.arity == 0 ? [] : [list])
|
149
|
+
return result if result.is_a?(FalseClass)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def run_before_generate(object)
|
154
|
+
self.class.before_generate_filters.each do |meth|
|
155
|
+
meth = method(meth) if meth.is_a?(Symbol)
|
156
|
+
result = meth.call *(meth.arity == 0 ? [] : [object])
|
157
|
+
return result if result.is_a?(FalseClass)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def run_before_sections(section, object)
|
162
|
+
result = before_section(section, object)
|
163
|
+
return result if result.is_a?(FalseClass)
|
164
|
+
|
165
|
+
self.class.before_section_filters.each do |info|
|
166
|
+
result, sec, meth = nil, *info
|
167
|
+
if sec.nil? || sec == section
|
168
|
+
meth = method(meth) if meth.is_a?(Symbol)
|
169
|
+
args = [section, object]
|
170
|
+
if meth.arity == 1
|
171
|
+
args = [object]
|
172
|
+
elsif meth.arity == 0
|
173
|
+
args = []
|
174
|
+
end
|
175
|
+
|
176
|
+
result = meth.call(*args)
|
177
|
+
log.debug("Calling before section filter for %s%s with `%s`, result = %s" % [
|
178
|
+
self.class.class_name, section.inspect, object,
|
179
|
+
result.is_a?(FalseClass) ? 'fail' : 'pass'
|
180
|
+
])
|
181
|
+
end
|
182
|
+
|
183
|
+
return result if result.is_a?(FalseClass)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def sections_for(object); [] end
|
188
|
+
|
189
|
+
def before_section(section, object); end
|
190
|
+
|
191
|
+
def render_sections(object, sections = nil)
|
192
|
+
sections ||= sections_for(object) || []
|
193
|
+
|
194
|
+
data = ""
|
195
|
+
sections.each_with_index do |section, index|
|
196
|
+
next if section.is_a?(Array)
|
197
|
+
|
198
|
+
data << if sections[index+1].is_a?(Array)
|
199
|
+
render_section(section, object) do |obj|
|
200
|
+
tmp, @current_object = @current_object, obj
|
201
|
+
out = render_sections(obj, sections[index+1])
|
202
|
+
@current_object = tmp
|
203
|
+
out
|
204
|
+
end
|
205
|
+
else
|
206
|
+
render_section(section, object)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
data
|
210
|
+
end
|
211
|
+
|
212
|
+
def render_section(section, object, &block)
|
213
|
+
begin
|
214
|
+
if section.is_a?(Class) && section <= Generators::Base
|
215
|
+
opts = options.dup
|
216
|
+
opts.update(:ignore_serializer => true)
|
217
|
+
sobj = section.new(opts)
|
218
|
+
sobj.generate(object, &block)
|
219
|
+
elsif section.is_a?(Generators::Base)
|
220
|
+
section.generate(object, &block)
|
221
|
+
elsif section.is_a?(Symbol) || section.is_a?(String)
|
222
|
+
return "" if run_before_sections(section, object).is_a?(FalseClass)
|
223
|
+
|
224
|
+
if section.is_a?(Symbol)
|
225
|
+
if respond_to?(section)
|
226
|
+
if method(section).arity != 1
|
227
|
+
send(section, &block)
|
228
|
+
else
|
229
|
+
send(section, object, &block)
|
230
|
+
end || ""
|
231
|
+
else # treat it as a String
|
232
|
+
render(object, section, &block)
|
233
|
+
end
|
234
|
+
else
|
235
|
+
render(object, section, &block)
|
236
|
+
end
|
237
|
+
else
|
238
|
+
type = section.is_a?(String) || section.is_a?(Symbol) ? 'section' : 'generator'
|
239
|
+
log.warn "Ignoring invalid #{type} '#{section}' in #{self.class}"
|
240
|
+
""
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def render(object, file = nil, locals = {}, &block)
|
246
|
+
if object.is_a?(Symbol)
|
247
|
+
object, file, locals = current_object, object, (file||{})
|
248
|
+
end
|
249
|
+
|
250
|
+
__path = template_path(file.to_s + '.erb', generator_name)
|
251
|
+
__f = find_template(__path)
|
252
|
+
if __f
|
253
|
+
__l = locals.map {|k,v| "#{k} = #{v.inspect}" unless k.to_s == "__f" }.join(";")
|
254
|
+
begin
|
255
|
+
erb("<% #{__l} %>" + File.read(__f)).result(binding)
|
256
|
+
rescue => e
|
257
|
+
log.error "#{e.class.class_name}: #{e.message}"
|
258
|
+
log.error "in generator #{self.class} section #{file} on '#{object}'"
|
259
|
+
log.error e.backtrace[0..10].join("\n")
|
260
|
+
exit
|
261
|
+
end
|
262
|
+
else
|
263
|
+
log.warn "Cannot find template `#{__path}`"
|
264
|
+
""
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def erb(str)
|
269
|
+
ERB.new(str, nil, '<>')
|
270
|
+
end
|
271
|
+
|
272
|
+
def template_path(file, generator = generator_name)
|
273
|
+
File.join(template.to_s, generator, format.to_s, file.to_s)
|
274
|
+
end
|
275
|
+
|
276
|
+
def find_template(path)
|
277
|
+
self.class.template_paths.each do |basepath|
|
278
|
+
f = File.join(basepath, path)
|
279
|
+
return f if File.file?(f)
|
280
|
+
end
|
281
|
+
nil
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module YARD
|
2
|
+
module Generators
|
3
|
+
class ClassGenerator < Base
|
4
|
+
before_generate :is_class?
|
5
|
+
|
6
|
+
def sections_for(object)
|
7
|
+
[
|
8
|
+
:header,
|
9
|
+
[
|
10
|
+
G(InheritanceGenerator),
|
11
|
+
G(MixinsGenerator),
|
12
|
+
G(DocstringGenerator),
|
13
|
+
G(AttributesGenerator),
|
14
|
+
G(ConstantsGenerator),
|
15
|
+
G(ConstructorGenerator),
|
16
|
+
G(MethodMissingGenerator),
|
17
|
+
G(VisibilityGroupGenerator, :visibility => :public),
|
18
|
+
G(VisibilityGroupGenerator, :visibility => :protected),
|
19
|
+
G(VisibilityGroupGenerator, :visibility => :private)
|
20
|
+
]
|
21
|
+
]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module YARD
|
2
|
+
module Generators
|
3
|
+
class ConstantsGenerator < Base
|
4
|
+
before_section :constants, :has_constants?
|
5
|
+
before_section :inherited, :has_inherited_constants?
|
6
|
+
before_section :included, :has_included_constants?
|
7
|
+
|
8
|
+
def sections_for(object)
|
9
|
+
if object.is_a?(CodeObjects::ClassObject)
|
10
|
+
[:header, [:constants, :inherited, :included]]
|
11
|
+
elsif object.is_a?(CodeObjects::ModuleObject)
|
12
|
+
[:header, [:constants]]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def has_constants?(object)
|
19
|
+
object.constants(:included => false, :inherited => false).size > 0
|
20
|
+
end
|
21
|
+
|
22
|
+
def has_inherited_constants?(object)
|
23
|
+
return false unless object.is_a?(CodeObjects::ClassObject)
|
24
|
+
object.inherited_constants.size > 0
|
25
|
+
end
|
26
|
+
|
27
|
+
def has_included_constants?(object)
|
28
|
+
object.included_constants.size > 0
|
29
|
+
end
|
30
|
+
|
31
|
+
# @yield a the list of methods pertaining to a superclass
|
32
|
+
# in the inheritance order.
|
33
|
+
#
|
34
|
+
# @yieldparam [CodeObjects::ClassObject] superclass
|
35
|
+
# The superclass the constants belong to
|
36
|
+
#
|
37
|
+
# @yieldparam [Array<CodeObjects::ConstantObject>] consts
|
38
|
+
# The list of constants inherited from the superclass
|
39
|
+
#
|
40
|
+
def inherited_constants_by_class
|
41
|
+
all_consts = current_object.inherited_constants
|
42
|
+
current_object.inheritance_tree[1..-1].each do |superclass|
|
43
|
+
next if superclass.is_a?(CodeObjects::Proxy)
|
44
|
+
opts = { :included => false, :inherited => false }
|
45
|
+
consts = superclass.constants(opts).select {|c| all_consts.include?(c) }
|
46
|
+
next if consts.empty?
|
47
|
+
yield(superclass, consts)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @yield [module, constlist]
|
52
|
+
# Yields a the list of methods pertaining to a module
|
53
|
+
# in the module order.
|
54
|
+
#
|
55
|
+
# @yieldparam [CodeObjects::ModuleObject] module
|
56
|
+
# The module the constants belong to
|
57
|
+
#
|
58
|
+
# @yieldparam [Array<CodeObjects::ConstantObject>] consts
|
59
|
+
# The list of constants included from the module
|
60
|
+
#
|
61
|
+
def included_constants_by_module
|
62
|
+
all_consts = current_object.included_constants
|
63
|
+
current_object.mixins.each do |superclass|
|
64
|
+
next if superclass.is_a?(CodeObjects::Proxy)
|
65
|
+
opts = { :included => false, :inherited => false }
|
66
|
+
consts = superclass.constants(opts).select {|c| all_consts.include?(c) }
|
67
|
+
next if consts.empty?
|
68
|
+
yield(superclass, consts)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|