yard 0.6.8 → 0.7.0
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/.yardopts +1 -0
- data/ChangeLog +723 -0
- data/README.md +16 -6
- data/docs/CodeObjects.md +10 -16
- data/docs/GettingStarted.md +232 -32
- data/docs/Glossary.md +1 -2
- data/docs/Handlers.md +10 -16
- data/docs/Overview.md +14 -13
- data/docs/Parser.md +13 -22
- data/docs/Tags.md +209 -16
- data/docs/Templates.md +237 -26
- data/docs/WhatsNew.md +178 -2
- data/lib/yard.rb +13 -10
- data/lib/yard/autoload.rb +22 -18
- data/lib/yard/cli/command.rb +13 -12
- data/lib/yard/cli/command_parser.rb +20 -19
- data/lib/yard/cli/config.rb +19 -19
- data/lib/yard/cli/diff.rb +46 -21
- data/lib/yard/cli/gems.rb +11 -11
- data/lib/yard/cli/graph.rb +13 -13
- data/lib/yard/cli/help.rb +1 -1
- data/lib/yard/cli/list.rb +22 -0
- data/lib/yard/cli/server.rb +17 -17
- data/lib/yard/cli/stats.rb +32 -32
- data/lib/yard/cli/yardoc.rb +181 -135
- data/lib/yard/cli/yri.rb +29 -29
- data/lib/yard/code_objects/base.rb +101 -101
- data/lib/yard/code_objects/class_object.rb +20 -20
- data/lib/yard/code_objects/constant_object.rb +1 -1
- data/lib/yard/code_objects/extended_method_object.rb +5 -5
- data/lib/yard/code_objects/extra_file_object.rb +89 -0
- data/lib/yard/code_objects/macro_object.rb +215 -0
- data/lib/yard/code_objects/method_object.rb +30 -30
- data/lib/yard/code_objects/module_object.rb +1 -1
- data/lib/yard/code_objects/namespace_object.rb +39 -39
- data/lib/yard/code_objects/proxy.rb +38 -38
- data/lib/yard/code_objects/root_object.rb +1 -1
- data/lib/yard/config.rb +40 -40
- data/lib/yard/core_ext/array.rb +2 -2
- data/lib/yard/core_ext/file.rb +11 -11
- data/lib/yard/core_ext/insertion.rb +10 -10
- data/lib/yard/core_ext/module.rb +2 -2
- data/lib/yard/core_ext/string.rb +2 -2
- data/lib/yard/core_ext/symbol_hash.rb +14 -14
- data/lib/yard/docstring.rb +122 -54
- data/lib/yard/globals.rb +2 -2
- data/lib/yard/handlers/base.rb +216 -127
- data/lib/yard/handlers/processor.rb +65 -27
- data/lib/yard/handlers/ruby/alias_handler.rb +6 -3
- data/lib/yard/handlers/ruby/attribute_handler.rb +7 -6
- data/lib/yard/handlers/ruby/base.rb +50 -31
- data/lib/yard/handlers/ruby/class_condition_handler.rb +11 -11
- data/lib/yard/handlers/ruby/class_handler.rb +10 -10
- data/lib/yard/handlers/ruby/class_variable_handler.rb +3 -3
- data/lib/yard/handlers/ruby/constant_handler.rb +7 -7
- data/lib/yard/handlers/ruby/exception_handler.rb +2 -2
- data/lib/yard/handlers/ruby/extend_handler.rb +1 -1
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +8 -5
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +6 -5
- data/lib/yard/handlers/ruby/legacy/base.rb +42 -27
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +9 -9
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +13 -12
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +3 -6
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +5 -8
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +1 -1
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +1 -0
- data/lib/yard/handlers/ruby/legacy/macro_handler.rb +40 -0
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +10 -10
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +4 -3
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +2 -1
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +4 -4
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +2 -1
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +3 -3
- data/lib/yard/handlers/ruby/macro_handler.rb +41 -0
- data/lib/yard/handlers/ruby/macro_handler_methods.rb +130 -0
- data/lib/yard/handlers/ruby/method_condition_handler.rb +1 -1
- data/lib/yard/handlers/ruby/method_handler.rb +13 -13
- data/lib/yard/handlers/ruby/mixin_handler.rb +4 -4
- data/lib/yard/handlers/ruby/module_handler.rb +2 -1
- data/lib/yard/handlers/ruby/private_constant_handler.rb +4 -4
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +11 -11
- data/lib/yard/handlers/ruby/visibility_handler.rb +1 -1
- data/lib/yard/handlers/ruby/yield_handler.rb +5 -5
- data/lib/yard/logging.rb +11 -11
- data/lib/yard/parser/base.rb +8 -8
- data/lib/yard/parser/c_parser.rb +42 -33
- data/lib/yard/parser/ruby/ast_node.rb +62 -61
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +66 -66
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +4 -4
- data/lib/yard/parser/ruby/legacy/statement.rb +11 -11
- data/lib/yard/parser/ruby/legacy/statement_list.rb +15 -15
- data/lib/yard/parser/ruby/legacy/token_list.rb +9 -9
- data/lib/yard/parser/ruby/ruby_parser.rb +51 -37
- data/lib/yard/parser/source_parser.rb +271 -46
- data/lib/yard/rake/yardoc_task.rb +18 -17
- data/lib/yard/registry.rb +64 -64
- data/lib/yard/registry_store.rb +34 -34
- data/lib/yard/rubygems/backports.rb +8 -0
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
- data/lib/yard/rubygems/backports/MIT.txt +20 -0
- data/lib/yard/rubygems/backports/gem.rb +8 -0
- data/lib/yard/rubygems/backports/source_index.rb +353 -0
- data/lib/yard/rubygems/specification.rb +2 -2
- data/lib/yard/serializers/base.rb +20 -20
- data/lib/yard/serializers/file_system_serializer.rb +28 -24
- data/lib/yard/serializers/process_serializer.rb +3 -3
- data/lib/yard/serializers/stdout_serializer.rb +6 -6
- data/lib/yard/serializers/yardoc_serializer.rb +17 -17
- data/lib/yard/server/adapter.rb +12 -12
- data/lib/yard/server/commands/base.rb +26 -26
- data/lib/yard/server/commands/display_file_command.rb +3 -2
- data/lib/yard/server/commands/display_object_command.rb +5 -5
- data/lib/yard/server/commands/frames_command.rb +1 -1
- data/lib/yard/server/commands/library_command.rb +7 -7
- data/lib/yard/server/commands/library_index_command.rb +2 -2
- data/lib/yard/server/commands/list_command.rb +8 -8
- data/lib/yard/server/commands/search_command.rb +8 -8
- data/lib/yard/server/commands/static_file_command.rb +3 -3
- data/lib/yard/server/doc_server_helper.rb +6 -3
- data/lib/yard/server/doc_server_serializer.rb +1 -1
- data/lib/yard/server/library_version.rb +45 -45
- data/lib/yard/server/rack_adapter.rb +10 -10
- data/lib/yard/server/router.rb +28 -28
- data/lib/yard/server/static_caching.rb +5 -5
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +3 -3
- data/lib/yard/server/templates/default/fulldoc/html/js/live.js +1 -1
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +2 -2
- data/lib/yard/server/templates/default/layout/html/headers.erb +13 -8
- data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
- data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +2 -2
- data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +14 -4
- data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +2 -2
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +2 -2
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
- data/lib/yard/server/templates/doc_server/search/html/search.erb +1 -1
- data/lib/yard/server/webrick_adapter.rb +2 -2
- data/lib/yard/tags/default_factory.rb +19 -19
- data/lib/yard/tags/default_tag.rb +1 -1
- data/lib/yard/tags/library.rb +68 -63
- data/lib/yard/tags/option_tag.rb +1 -1
- data/lib/yard/tags/overload_tag.rb +9 -9
- data/lib/yard/tags/ref_tag_list.rb +2 -2
- data/lib/yard/tags/tag.rb +7 -7
- data/lib/yard/templates/engine.rb +31 -31
- data/lib/yard/templates/erb_cache.rb +1 -1
- data/lib/yard/templates/helpers/base_helper.rb +46 -32
- data/lib/yard/templates/helpers/filter_helper.rb +2 -2
- data/lib/yard/templates/helpers/html_helper.rb +120 -81
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +4 -4
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +9 -9
- data/lib/yard/templates/helpers/markup_helper.rb +37 -30
- data/lib/yard/templates/helpers/method_helper.rb +7 -7
- data/lib/yard/templates/helpers/text_helper.rb +7 -7
- data/lib/yard/templates/helpers/uml_helper.rb +3 -3
- data/lib/yard/templates/section.rb +14 -14
- data/lib/yard/templates/template.rb +54 -54
- data/lib/yard/verifier.rb +27 -27
- data/spec/cli/list_spec.rb +8 -0
- data/spec/cli/yardoc_spec.rb +58 -10
- data/spec/code_objects/extra_file_object_spec.rb +132 -0
- data/spec/code_objects/macro_object_spec.rb +154 -0
- data/spec/docstring_spec.rb +90 -0
- data/spec/handlers/base_spec.rb +22 -0
- data/spec/handlers/examples/macro_handler_001.rb.txt +73 -0
- data/spec/handlers/examples/method_handler_001.rb.txt +17 -0
- data/spec/handlers/macro_handler_spec.rb +140 -0
- data/spec/handlers/method_handler_spec.rb +28 -0
- data/spec/handlers/processor_spec.rb +4 -0
- data/spec/handlers/spec_helper.rb +1 -1
- data/spec/parser/c_parser_spec.rb +47 -16
- data/spec/parser/examples/extrafile.c.txt +8 -0
- data/spec/parser/examples/multifile.c.txt +6 -0
- data/spec/parser/ruby/ruby_parser_spec.rb +5 -0
- data/spec/parser/source_parser_spec.rb +235 -0
- data/spec/rake/yardoc_task_spec.rb +22 -17
- data/spec/serializers/file_system_serializer_spec.rb +6 -0
- data/spec/server/commands/library_command_spec.rb +39 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/templates/examples/method001.html +6 -6
- data/spec/templates/examples/method002.html +4 -4
- data/spec/templates/examples/method003.html +10 -10
- data/spec/templates/examples/method005.html +2 -2
- data/spec/templates/examples/module001.dot +2 -0
- data/spec/templates/examples/module001.html +76 -37
- data/spec/templates/examples/module001.txt +1 -1
- data/spec/templates/helpers/base_helper_spec.rb +7 -2
- data/spec/templates/helpers/html_helper_spec.rb +49 -5
- data/spec/templates/helpers/markup_helper_spec.rb +9 -8
- data/spec/templates/module_spec.rb +7 -0
- data/spec/templates/onefile_spec.rb +47 -0
- data/templates/default/fulldoc/html/css/style.css +7 -5
- data/templates/default/fulldoc/html/full_list.erb +13 -10
- data/templates/default/fulldoc/html/full_list_files.erb +1 -1
- data/templates/default/fulldoc/html/js/app.js +16 -14
- data/templates/default/fulldoc/html/js/full_list.js +7 -6
- data/templates/default/fulldoc/html/setup.rb +78 -17
- data/templates/default/layout/html/files.erb +1 -1
- data/templates/default/layout/html/headers.erb +11 -7
- data/templates/default/layout/html/search.erb +4 -4
- data/templates/default/layout/html/setup.rb +28 -8
- data/templates/default/module/html/inherited_attributes.erb +17 -0
- data/templates/default/module/setup.rb +1 -1
- data/templates/default/onefile/html/files.erb +2 -2
- data/templates/default/onefile/html/layout.erb +1 -1
- data/templates/default/onefile/html/setup.rb +7 -5
- data/templates/default/tags/html/option.erb +1 -1
- data/templates/default/tags/html/tag.erb +3 -3
- data/templates/guide/class/html/setup.rb +1 -0
- data/templates/guide/docstring/html/setup.rb +1 -0
- data/templates/guide/fulldoc/html/css/style.css +91 -0
- data/templates/guide/fulldoc/html/js/app.js +33 -0
- data/templates/guide/fulldoc/html/setup.rb +54 -0
- data/templates/guide/layout/html/layout.erb +81 -0
- data/templates/guide/layout/html/setup.rb +24 -0
- data/templates/guide/method/html/header.erb +18 -0
- data/templates/guide/method/html/setup.rb +21 -0
- data/templates/guide/module/html/header.erb +7 -0
- data/templates/guide/module/html/method_list.erb +5 -0
- data/templates/guide/module/html/setup.rb +26 -0
- data/templates/guide/tags/html/setup.rb +8 -0
- metadata +40 -7
- data/lib/yard/handlers/ruby/legacy/process_handler.rb +0 -13
- data/lib/yard/handlers/ruby/process_handler.rb +0 -18
- data/spec/handlers/process_handler_spec.rb +0 -17
@@ -24,7 +24,7 @@ class Gem::Specification
|
|
24
24
|
else
|
25
25
|
attr_accessor :has_rdoc
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
if defined?(Gem::VERSION) && Gem::VERSION =~ /^1\.7\./
|
29
29
|
def _dump_with_rdoc(limit)
|
30
30
|
dmp = _dump_without_rdoc(limit)
|
@@ -33,7 +33,7 @@ class Gem::Specification
|
|
33
33
|
end
|
34
34
|
alias _dump_without_rdoc _dump
|
35
35
|
alias _dump _dump_with_rdoc
|
36
|
-
|
36
|
+
|
37
37
|
@@default_value[:has_rdoc] = true if defined?(@@default_value)
|
38
38
|
@@attributes << 'has_rdoc' if defined?(@@attributes)
|
39
39
|
@@nil_attributes << 'has_rdoc' if defined?(@@nil_attributes)
|
@@ -3,57 +3,57 @@ module YARD
|
|
3
3
|
# The abstract base serializer. Serializers allow templates to be
|
4
4
|
# rendered to various endpoints. For instance, a {FileSystemSerializer}
|
5
5
|
# would allow template contents to be written to the filesystem
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# To implement a custom serializer, override the following methods:
|
8
8
|
# * {#serialize}
|
9
9
|
# * {#serialized_path}
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Optionally, a serializer can implement before and after filters:
|
12
12
|
# * {#before_serialize}
|
13
13
|
# * {#after_serialize}
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# @abstract Override this class to implement a custom serializer.
|
16
16
|
class Base
|
17
17
|
# All serializer options are saved so they can be passed to other serializers.
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# @return [SymbolHash] the serializer options
|
20
20
|
attr_reader :options
|
21
|
-
|
21
|
+
|
22
22
|
# @group Creating a New Serializer
|
23
|
-
|
23
|
+
|
24
24
|
# Creates a new serializer with options
|
25
|
-
#
|
25
|
+
#
|
26
26
|
# @param [Hash] opts the options to assign to {#options}
|
27
27
|
def initialize(opts = {})
|
28
28
|
@options = SymbolHash.new(false).update(opts)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
# @group Serializing an Object
|
32
|
-
|
32
|
+
|
33
33
|
# Serializes an object.
|
34
|
-
#
|
35
|
-
# @abstract This method should implement the logic that serializes
|
34
|
+
#
|
35
|
+
# @abstract This method should implement the logic that serializes
|
36
36
|
# +data+ to the respective endpoint. This method should also call
|
37
37
|
# the before and after callbacks {#before_serialize} and {#after_serialize}
|
38
38
|
# @param [CodeObjects::Base, String] object the object to serialize the
|
39
39
|
# data for. The object can also be a string (for non-object serialization)
|
40
40
|
# @param [String] data the contents that should be serialized
|
41
41
|
def serialize(object, data) end
|
42
|
-
|
42
|
+
|
43
43
|
# The serialized path of an object
|
44
|
-
#
|
44
|
+
#
|
45
45
|
# @abstract This method should return the path of the object on the
|
46
46
|
# endpoint. For instance, for a file serializer, this should return
|
47
47
|
# the filename that represents the object on disk.
|
48
48
|
# @param [CodeObjects::Base] object the object to return a path for
|
49
49
|
# @return [String] the serialized path of an object
|
50
50
|
def serialized_path(object) end
|
51
|
-
|
51
|
+
|
52
52
|
# Returns whether an object has been serialized
|
53
|
-
#
|
53
|
+
#
|
54
54
|
# @abstract This method should return whether the endpoint already exists.
|
55
55
|
# For instance, a file system serializer would check if the file exists
|
56
|
-
# on disk. You will most likely use +#basepath+ and {#serialized_path} to
|
56
|
+
# on disk. You will most likely use +#basepath+ and {#serialized_path} to
|
57
57
|
# get the endpoint's location.
|
58
58
|
# @param [CodeObjects::Base] object the object to check existence of
|
59
59
|
# @return [Boolean] whether the endpoint exists.
|
@@ -62,15 +62,15 @@ module YARD
|
|
62
62
|
|
63
63
|
# @group Callbacks
|
64
64
|
|
65
|
-
# Called before serialization.
|
66
|
-
#
|
65
|
+
# Called before serialization.
|
66
|
+
#
|
67
67
|
# @abstract Should run code before serialization. Should return false
|
68
68
|
# if serialization should not occur.
|
69
69
|
# @return [Boolean] whether or not serialization should occur
|
70
70
|
def before_serialize; end
|
71
71
|
|
72
|
-
# Called after serialization.
|
73
|
-
#
|
72
|
+
# Called after serialization.
|
73
|
+
#
|
74
74
|
# @abstract Should run code after serialization.
|
75
75
|
# @param [String] data the data that was serialized.
|
76
76
|
# @return [void]
|
@@ -5,22 +5,22 @@ module YARD
|
|
5
5
|
# The base path to write data to.
|
6
6
|
# @return [String] a base path
|
7
7
|
attr_reader :basepath
|
8
|
-
|
8
|
+
|
9
9
|
def basepath=(value)
|
10
10
|
@basepath = options[:basepath] = value
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
# The extension of the filename (defaults to +html+)
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# @return [String] the extension of the file. Empty string for no extension.
|
16
16
|
attr_reader :extension
|
17
|
-
|
17
|
+
|
18
18
|
def extension=(value)
|
19
19
|
@extension = options[:extension] = value
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# Creates a new FileSystemSerializer with options
|
23
|
-
#
|
23
|
+
#
|
24
24
|
# @option opts [String] :basepath ('doc') the base path to write data to
|
25
25
|
# @option opts [String] :extension ('html') the extension of the serialized
|
26
26
|
# path filename. If this is set to the empty string, no extension is used.
|
@@ -29,38 +29,42 @@ module YARD
|
|
29
29
|
@basepath = (options[:basepath] || 'doc').to_s
|
30
30
|
@extension = (options.has_key?(:extension) ? options[:extension] : 'html').to_s
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
# Serializes object with data to its serialized path (prefixed by the +#basepath+).
|
34
|
-
#
|
34
|
+
#
|
35
35
|
# @return [String] the written data (for chaining)
|
36
36
|
def serialize(object, data)
|
37
37
|
path = File.join(basepath, *serialized_path(object))
|
38
38
|
log.debug "Serializing to #{path}"
|
39
39
|
File.open!(path, "wb") {|f| f.write data }
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
# Implements the serialized path of a code object.
|
43
|
-
#
|
44
|
-
# @param [CodeObjects::Base, String] object
|
45
|
-
# The path of a string is the string itself.
|
43
|
+
#
|
44
|
+
# @param [CodeObjects::Base, CodeObjects::ExtraFileObject, String] object
|
45
|
+
# the object to get a path for. The path of a string is the string itself.
|
46
46
|
# @return [String] if object is a String, returns
|
47
47
|
# object, otherwise the path on disk (without the basepath).
|
48
48
|
def serialized_path(object)
|
49
49
|
return object if object.is_a?(String)
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
51
|
+
if object.is_a?(CodeObjects::ExtraFileObject)
|
52
|
+
fspath = ['file.' + object.name + (extension.empty? ? '' : ".#{extension}")]
|
53
|
+
else
|
54
|
+
objname = object != YARD::Registry.root ? object.name.to_s : "top-level-namespace"
|
55
|
+
objname += '_' + object.scope.to_s[0,1] if object.is_a?(CodeObjects::MethodObject)
|
56
|
+
fspath = [objname + (extension.empty? ? '' : ".#{extension}")]
|
57
|
+
if object.namespace && object.namespace.path != ""
|
58
|
+
fspath.unshift(*object.namespace.path.split(CodeObjects::NSEP))
|
59
|
+
end
|
56
60
|
end
|
57
|
-
|
61
|
+
|
58
62
|
# Don't change the filenames, it just makes it more complicated
|
59
63
|
# to figure out the original name.
|
60
|
-
#fspath.map! do |p|
|
61
|
-
# p.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
64
|
+
#fspath.map! do |p|
|
65
|
+
# p.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
62
66
|
#end
|
63
|
-
|
67
|
+
|
64
68
|
# Remove special chars from filenames.
|
65
69
|
# Windows disallows \ / : * ? " < > | but we will just remove any
|
66
70
|
# non alphanumeric (plus period, underscore and dash).
|
@@ -72,12 +76,12 @@ module YARD
|
|
72
76
|
encoded
|
73
77
|
end
|
74
78
|
end
|
75
|
-
|
79
|
+
|
76
80
|
File.join(fspath)
|
77
81
|
end
|
78
|
-
|
82
|
+
|
79
83
|
# Checks the disk for an object and returns whether it was serialized.
|
80
|
-
#
|
84
|
+
#
|
81
85
|
# @param [CodeObjects::Base] object the object to check
|
82
86
|
# @return [Boolean] whether an object has been serialized to disk
|
83
87
|
def exists?(object)
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module YARD
|
2
2
|
module Serializers
|
3
3
|
# Serializes an object to a process (like less)
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# @example Serializing to a pager (less)
|
6
6
|
# serializer = ProcessSerializer.new('less')
|
7
7
|
# serializer.serialize(object, "data!")
|
8
8
|
class ProcessSerializer < Base
|
9
9
|
# Creates a new ProcessSerializer for the shell command +cmd+
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# @param [String] cmd the command that will accept data on stdin
|
12
12
|
def initialize(cmd)
|
13
13
|
@cmd = cmd
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
# Overrides serialize behaviour and writes data to standard input
|
17
17
|
# of the associated command
|
18
18
|
def serialize(object, data)
|
@@ -3,28 +3,28 @@ module YARD
|
|
3
3
|
# A serializer that writes data to standard output.
|
4
4
|
class StdoutSerializer < Base
|
5
5
|
# Creates a serializer to print text to stdout
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# @param [Fixnum, nil] wrap if wrap is a number, wraps text to +wrap+
|
8
8
|
# columns, otherwise no wrapping is done.
|
9
9
|
def initialize(wrap = nil)
|
10
10
|
@wrap = wrap
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
# Overrides serialize behaviour to write data to standard output
|
14
14
|
def serialize(object, data)
|
15
15
|
print(@wrap ? word_wrap(data, @wrap) : data)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
private
|
19
|
-
|
19
|
+
|
20
20
|
# Wraps text to a specific column length
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# @param [String] text the text to wrap
|
23
23
|
# @param [Fixnum] length the column length to wrap to
|
24
24
|
# @return [String] the wrapped text
|
25
25
|
def word_wrap(text, length = 80)
|
26
26
|
# See ruby-talk/10655 / Ernest Ellingson
|
27
|
-
text.gsub(/\t/," ").gsub(/.{1,50}(?:\s|\Z)/){($& +
|
27
|
+
text.gsub(/\t/," ").gsub(/.{1,50}(?:\s|\Z)/){($& +
|
28
28
|
5.chr).gsub(/\n\005/,"\n").gsub(/\005/,"\n")}
|
29
29
|
end
|
30
30
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module YARD
|
2
2
|
# Stubs marshal dumps and acts a delegate class for an object by path
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# @private
|
5
5
|
class StubProxy
|
6
6
|
instance_methods.each {|m| undef_method(m) unless m.to_s =~ /^__|^object_id$/ }
|
@@ -8,12 +8,12 @@ module YARD
|
|
8
8
|
def _dump(depth) @path end
|
9
9
|
def self._load(str) new(str) end
|
10
10
|
def hash; @path.hash end
|
11
|
-
|
12
|
-
def initialize(path, transient = false)
|
11
|
+
|
12
|
+
def initialize(path, transient = false)
|
13
13
|
@path = path
|
14
14
|
@transient = transient
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def method_missing(meth, *args, &block)
|
18
18
|
return true if meth == :respond_to? && args.first == :_dump
|
19
19
|
@object = nil if @transient
|
@@ -30,11 +30,11 @@ module YARD
|
|
30
30
|
def initialize(yfile)
|
31
31
|
super(:basepath => yfile, :extension => 'dat')
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def objects_path; File.join(basepath, 'objects') end
|
35
35
|
def proxy_types_path; File.join(basepath, 'proxy_types') end
|
36
36
|
def checksums_path; File.join(basepath, 'checksums') end
|
37
|
-
|
37
|
+
|
38
38
|
def serialized_path(object)
|
39
39
|
path = case object
|
40
40
|
when String, Symbol
|
@@ -59,7 +59,7 @@ module YARD
|
|
59
59
|
end
|
60
60
|
File.join('objects', path)
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
def serialize(object)
|
64
64
|
if Hash === object
|
65
65
|
super(object[:root], dump(object)) if object[:root]
|
@@ -67,7 +67,7 @@ module YARD
|
|
67
67
|
super(object, dump(object))
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def deserialize(path, is_path = false)
|
72
72
|
path = File.join(basepath, serialized_path(path)) unless is_path
|
73
73
|
if File.file?(path)
|
@@ -78,32 +78,32 @@ module YARD
|
|
78
78
|
nil
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
private
|
83
|
-
|
83
|
+
|
84
84
|
def dump(object)
|
85
85
|
object = internal_dump(object, true) unless object.is_a?(Hash)
|
86
86
|
Marshal.dump(object)
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
def internal_dump(object, first_object = false)
|
90
|
-
if !first_object && object.is_a?(CodeObjects::Base) &&
|
90
|
+
if !first_object && object.is_a?(CodeObjects::Base) &&
|
91
91
|
!(Tags::OverloadTag === object)
|
92
92
|
return StubProxy.new(object.path)
|
93
93
|
end
|
94
|
-
|
95
|
-
if object.is_a?(Hash) || object.is_a?(Array) ||
|
94
|
+
|
95
|
+
if object.is_a?(Hash) || object.is_a?(Array) ||
|
96
96
|
object.is_a?(CodeObjects::Base) ||
|
97
97
|
object.instance_variables.size > 0
|
98
98
|
object = object.dup
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
object.instance_variables.each do |ivar|
|
102
102
|
ivar_obj = object.instance_variable_get(ivar)
|
103
103
|
ivar_obj_dump = internal_dump(ivar_obj)
|
104
104
|
object.instance_variable_set(ivar, ivar_obj_dump)
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
case object
|
108
108
|
when Hash
|
109
109
|
list = object.map do |k, v|
|
@@ -114,7 +114,7 @@ module YARD
|
|
114
114
|
list = object.map {|item| internal_dump(item) }
|
115
115
|
object.replace(list)
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
object
|
119
119
|
end
|
120
120
|
end
|
data/lib/yard/server/adapter.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module YARD
|
2
2
|
module Server
|
3
|
-
|
3
|
+
|
4
4
|
# Short circuits a request by raising an error. This exception is caught
|
5
5
|
# by {Commands::Base#call} to immedaitely end a request and return a response.
|
6
6
|
class FinishRequest < RuntimeError; end
|
7
|
-
|
7
|
+
|
8
8
|
# Raises an error if a resource is not found. This exception is caught by
|
9
9
|
# {Commands::Base#call} to immediately end a request and return a 404 response
|
10
10
|
# code. If a message is provided, the body is set to the exception message.
|
@@ -14,31 +14,31 @@ module YARD
|
|
14
14
|
# backend for a specific server type. YARD implements concrete adapters
|
15
15
|
# for WEBrick and Rack respectively, though other adapters can be made
|
16
16
|
# for other server architectures.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# == Subclassing Notes
|
19
19
|
# To create a concrete adapter class, implement the {#start} method to
|
20
20
|
# initiate the server backend.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# @abstract
|
23
23
|
class Adapter
|
24
24
|
# @return [String] the location where static files are located, if any.
|
25
25
|
# To set this field on initialization, pass +:DocumentRoot+ to the
|
26
26
|
# +server_opts+ argument in {#initialize}
|
27
27
|
attr_accessor :document_root
|
28
|
-
|
28
|
+
|
29
29
|
# @return [Hash{String=>Array<LibraryVersion>}] a map of libraries.
|
30
30
|
# @see LibraryVersion LibraryVersion for information on building a list of libraries
|
31
31
|
# @see #add_library
|
32
32
|
attr_accessor :libraries
|
33
|
-
|
33
|
+
|
34
34
|
# @return [Hash] options passed and processed by adapters. The actual
|
35
35
|
# options mostly depend on the adapters themselves.
|
36
36
|
attr_accessor :options
|
37
|
-
|
37
|
+
|
38
38
|
# @return [Hash] a set of options to pass to the server backend. Note
|
39
39
|
# that +:DocumentRoot+ also sets the {#document_root}.
|
40
40
|
attr_accessor :server_options
|
41
|
-
|
41
|
+
|
42
42
|
# @return [Router] the router object used to route URLs to commands
|
43
43
|
attr_accessor :router
|
44
44
|
|
@@ -57,9 +57,9 @@ module YARD
|
|
57
57
|
Templates::Template.extra_includes -= [YARD::Server::DocServerHelper]
|
58
58
|
Templates::Engine.template_paths -= [File.dirname(__FILE__) + '/templates']
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# Creates a new adapter object
|
62
|
-
#
|
62
|
+
#
|
63
63
|
# @param [Hash{String=>Array<LibraryVersion>}] libs a list of libraries,
|
64
64
|
# see {#libraries} for formulating this list.
|
65
65
|
# @param [Hash] opts extra options to pass to the adapter
|
@@ -80,7 +80,7 @@ module YARD
|
|
80
80
|
log.debug "Caching on" if options[:caching]
|
81
81
|
log.debug "Document root: #{document_root}" if document_root
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
# Adds a library to the {#libraries} mapping for a given library object.
|
85
85
|
# @example Adding a new library to an adapter
|
86
86
|
# adapter.add_library LibraryVersion.new('mylib', '1.0', '/path/to/.yardoc')
|
@@ -89,7 +89,7 @@ module YARD
|
|
89
89
|
libraries[library.name] ||= []
|
90
90
|
libraries[library.name] |= [library]
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
# Implement this method to connect your adapter to your server.
|
94
94
|
# @abstract
|
95
95
|
def start
|