yard-tomdoc 0.3.1 → 0.4.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.
data/HISTORY.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # RELEASE HISTORY
2
2
 
3
+ ## 0.4.0 2012-03-04
4
+
5
+ This major release now uses tomparse gem for parsing TomDoc,
6
+ instead of the tomdoc gem. This library only handles parsing
7
+ and none of the other features than the tomdoc gem provides,
8
+ so it is more suited to yard-tomdoc's needs. In addition,
9
+ support for the latest TomDoc specification are included in
10
+ this release.
11
+
12
+ Changes:
13
+
14
+ * Use tomparse gem for parsing TomDoc.
15
+ * Improve support for TomDoc features.
16
+
3
17
 
4
18
  ## 0.3.1 | 2011-11-10
5
19
 
@@ -47,3 +61,4 @@ Changes:
47
61
  * Depend on `tomdoc` library.
48
62
  * Support YARD's method return object.
49
63
  * Fix args issues when missing section.
64
+
@@ -0,0 +1,22 @@
1
+ YARD::TomDoc - Use TomDoc with YARD
2
+
3
+ Copyright (c) 2010 Loren Segal, Thomas Sawyer (MIT License)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
data/README.md CHANGED
@@ -1,11 +1,10 @@
1
- # yard-tomdoc
1
+ # YARD::TomDoc
2
2
 
3
- | Author: | Thomas Sawyer <transfire@gmail.com> |
4
- |------------|------------------------------------------------|
5
- | Copyright: | (c) 2010 Loren Segal, Thomas Sawyer |
6
- | Home: | http://rubyworks.github.com/yard-tomdoc |
7
- | Issues: | http://github.com/rubyworks/yard-tomdoc/issues |
8
- | Status: | [![Build Status](https://secure.travis-ci.org/rubyworks/yard-tomdoc.png)](http://travis-ci.org/rubyworks/yard-tomdoc) |
3
+ [Website](http://rubyworks.github.com/yard-tomdoc) /
4
+ [Development](http://github.com/rubyworks/yard-tomdoc) /
5
+ [Issues](http://github.com/rubyworks/yard-tomdoc/issues)
6
+
7
+ [![Build Status](https://secure.travis-ci.org/rubyworks/yard-tomdoc.png)](http://travis-ci.org/rubyworks/yard-tomdoc)
9
8
 
10
9
 
11
10
  ## Description
@@ -13,7 +12,7 @@
13
12
  Implements [TomDoc](http://tomdoc.org) syntax for YARD. 'Nuff said.
14
13
 
15
14
 
16
- ## Usage
15
+ ## Instruction
17
16
 
18
17
  Since `yard-tomdoc` is a standard YARD plugin, utilize it with yard's
19
18
  `--plugin` option.
@@ -31,5 +30,7 @@ and TomDoc syntax [here](http://gnuu.org/2010/05/12/whats-missing-from-tomdoc/).
31
30
 
32
31
  Copyright (c) 2010 Loren Segal, Thomas Sawyer
33
32
 
34
- See the `NOTICE` file for license information on TomDoc.
33
+ YARD::TomDoc is distributable in accordance with the ters of the **MIT** licsnse.
34
+
35
+ See the `LICENSE.txt` file for details.
35
36
 
@@ -1,6 +1,71 @@
1
- begin
2
- require 'tomdoc/tomdoc'
3
- rescue LoadError
4
- require 'yard-tomdoc/tomdoc'
1
+ require 'tomparse'
2
+
3
+ module YARD
4
+
5
+ module TomDoc
6
+ # Metadata from the project's `yard-tomdoc.yml` fle.
7
+ #
8
+ # Returns [Hash] of metadata.
9
+ def self.metadata
10
+ @metadata ||= (
11
+ require 'yaml'
12
+ YAML.load_file(File.dirname(__FILE__) + '/yard-tomdoc.yml')
13
+ )
14
+ end
15
+
16
+ # When a constant is missing, see if it is a metadata entry.
17
+ #
18
+ # name - [Symbol] constant name
19
+ #
20
+ # Returns metadata value.
21
+ def self.const_missing(name)
22
+ metadata[name.to_s.downcase] || super(name)
23
+ end
24
+ end
25
+
26
+ class Docstring
27
+ # Parse comments with TomDoc and then provide YARD with results.
28
+ #
29
+ # comments - [Array] comment strings
30
+ #
31
+ # Returns [String] parsed comments description
32
+ def parse_comments(comments)
33
+ comment = [comments].flatten.join("\n")
34
+
35
+ tomdoc = TomParse.parse(comment)
36
+
37
+ tomdoc.examples.each {|ex| create_tag(:example, "\n" + ex) }
38
+
39
+ tomdoc.arguments.each {|arg| create_tag(:param, "#{arg.name} #{arg.description}") }
40
+
41
+ if last_argument = tomdoc.arguments.last
42
+ last_argument.options.each do |opt|
43
+ create_tag(:option, "#{last_argument.name} #{opt.description}")
44
+ end
45
+ end
46
+
47
+ tomdoc.raises.each {|r| create_tag(:raise, r.sub(/\ARaises\s+/, '')) }
48
+
49
+ tomdoc.returns.each do |r|
50
+ if md = /\AReturns\s+([A-Z].*?)\s+/.match(r)
51
+ klass = md[1]
52
+ desc = md.post_match
53
+ create_tag(:return, "[#{klass}] #{desc}")
54
+ else
55
+ desc = r.sub(/\AReturns\s+/, '')
56
+ create_tag(:return, desc)
57
+ end
58
+ end
59
+
60
+ create_tag(:yield, tomdoc.yields) if tomdoc.yields
61
+
62
+ create_tag(:deprecated) if tomdoc.deprecated?
63
+
64
+ create_tag(:private) if tomdoc.internal?
65
+
66
+ # notice we return the modified comment
67
+ tomdoc.description.to_s
68
+ end
69
+ end
70
+
5
71
  end
6
- require 'yard-tomdoc/yard'
@@ -0,0 +1,48 @@
1
+ ---
2
+ source:
3
+ - Profile
4
+ authors:
5
+ - name: Trans
6
+ email: transfire@gmail.com
7
+ - name: Loren Segal
8
+ copyrights:
9
+ - holder: Rubyworks
10
+ year: '2012'
11
+ license: MIT
12
+ - holder: Loren Segal
13
+ year: '2010'
14
+ license: MIT
15
+ requirements:
16
+ - name: yard
17
+ - name: tomparse
18
+ - name: detroit
19
+ groups:
20
+ - build
21
+ development: true
22
+ - name: spectroscope
23
+ groups:
24
+ - test
25
+ development: true
26
+ - name: ae
27
+ groups:
28
+ - test
29
+ development: true
30
+ dependencies: []
31
+ alternatives: []
32
+ conflicts: []
33
+ repositories: []
34
+ resources:
35
+ home: http://rubyworks.github.com/yard-tomdoc
36
+ code: http://github.com/rubyworks/yard-tomdoc
37
+ bugs: http://github.com/rubyworks/yard-tomdoc/issues
38
+ docs: http://rubydoc.info/gems/yard-tomdoc/frames
39
+ extra: {}
40
+ load_path:
41
+ - lib
42
+ revision: 0
43
+ name: yard-tomdoc
44
+ title: YARD TomDoc
45
+ version: 0.4.0
46
+ summary: TomDoc for YARD
47
+ description: Use TomDoc documentation format with YARD.
48
+ date: '2012-03-04'
@@ -1,6 +1,2 @@
1
- $:.unshift File.expand_path(File.dirname(__FILE__)) + "/../lib"
2
-
3
1
  require 'fileutils'
4
- require 'minitest/spec'
5
- require 'minitest/autorun'
6
2
 
@@ -1,7 +1,7 @@
1
1
  dir = File.expand_path(File.dirname(__FILE__))
2
- tmp = dir + '/../../tmp'
2
+ tmp = File.expand_path(dir + '/../../tmp')
3
3
 
4
- require dir + "/../helper.rb"
4
+ require "helper"
5
5
 
6
6
  # This test is design to run `yard doc` on the sample project and
7
7
  # check to make sure it was produced successufully.
@@ -28,3 +28,4 @@ describe "yard doc" do
28
28
  end
29
29
 
30
30
  end
31
+
@@ -1,10 +1,7 @@
1
- require File.expand_path(File.dirname(__FILE__)) + "/../helper.rb"
1
+ require 'helper.rb'
2
2
 
3
3
  require "yard"
4
- #require "yard-tomdoc"
5
-
6
- # TODO: make separate test for this
7
- require "yard-tomdoc-intern"
4
+ require "yard-tomdoc"
8
5
 
9
6
  describe YARD::Docstring do
10
7
 
@@ -26,26 +23,26 @@ eof
26
23
  end
27
24
 
28
25
  it "should fill docstring with description" do
29
- @docstring.must_equal "Duplicate some text an arbitrary number of times."
26
+ @docstring.assert == "Duplicate some text an arbitrary number of times."
30
27
  end
31
28
 
32
29
  it "should fill param tags" do
33
30
  tags = @docstring.tags(:param)
34
- tags.size.must_equal 2
35
- tags[0].name.must_equal 'text'
36
- tags[1].name.must_equal 'count'
31
+ tags.size.assert == 2
32
+ tags[0].name.assert == 'text'
33
+ tags[1].name.assert == 'count'
37
34
  end
38
35
 
39
36
  it "should fill examples tags" do
40
- @docstring.tags(:example).size.must_equal 1
41
- @docstring.tag(:example).text.must_equal "multiplex('Tom', 4)\n # => 'TomTomTomTom'"
37
+ @docstring.tags(:example).size.assert == 1
38
+ @docstring.tag(:example).text.assert == "multiplex('Tom', 4)\n # => 'TomTomTomTom'"
42
39
  end
43
40
 
44
41
  it "should fill return tag" do
45
- @docstring.tag(:return).text.must_equal "the duplicated String."
42
+ @docstring.tag(:return).text.assert == "the duplicated String."
46
43
  end
47
44
 
48
45
  it "should fill raise tag" do
49
- @docstring.tag(:raise).text.must_equal "ArgumentError if something bad happened"
46
+ @docstring.tag(:raise).text.assert == "ArgumentError if something bad happened"
50
47
  end
51
48
  end
metadata CHANGED
@@ -1,20 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-tomdoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Thomas Sawyer
8
+ - Trans
9
9
  - Loren Segal
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-04 00:00:00.000000000 Z
13
+ date: 2012-03-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: yard
17
- requirement: &30272280 !ruby/object:Gem::Requirement
17
+ requirement: &18163280 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,21 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *30272280
25
+ version_requirements: *18163280
26
+ - !ruby/object:Gem::Dependency
27
+ name: tomparse
28
+ requirement: &18162760 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *18162760
26
37
  - !ruby/object:Gem::Dependency
27
38
  name: detroit
28
- requirement: &30271760 !ruby/object:Gem::Requirement
39
+ requirement: &18162260 !ruby/object:Gem::Requirement
29
40
  none: false
30
41
  requirements:
31
42
  - - ! '>='
@@ -33,10 +44,10 @@ dependencies:
33
44
  version: '0'
34
45
  type: :development
35
46
  prerelease: false
36
- version_requirements: *30271760
47
+ version_requirements: *18162260
37
48
  - !ruby/object:Gem::Dependency
38
- name: rake
39
- requirement: &30271260 !ruby/object:Gem::Requirement
49
+ name: spectroscope
50
+ requirement: &18161760 !ruby/object:Gem::Requirement
40
51
  none: false
41
52
  requirements:
42
53
  - - ! '>='
@@ -44,10 +55,10 @@ dependencies:
44
55
  version: '0'
45
56
  type: :development
46
57
  prerelease: false
47
- version_requirements: *30271260
58
+ version_requirements: *18161760
48
59
  - !ruby/object:Gem::Dependency
49
- name: minitest
50
- requirement: &30270760 !ruby/object:Gem::Requirement
60
+ name: ae
61
+ requirement: &18161260 !ruby/object:Gem::Requirement
51
62
  none: false
52
63
  requirements:
53
64
  - - ! '>='
@@ -55,34 +66,31 @@ dependencies:
55
66
  version: '0'
56
67
  type: :development
57
68
  prerelease: false
58
- version_requirements: *30270760
69
+ version_requirements: *18161260
59
70
  description: Use TomDoc documentation format with YARD.
60
71
  email:
61
72
  - transfire@gmail.com
62
73
  executables: []
63
74
  extensions: []
64
75
  extra_rdoc_files:
76
+ - LICENSE.txt
65
77
  - HISTORY.md
66
78
  - README.md
67
- - NOTICE.md
68
79
  files:
69
- - lib/yard-tomdoc/arg.rb
70
- - lib/yard-tomdoc/tomdoc.rb
71
- - lib/yard-tomdoc/version.rb
72
- - lib/yard-tomdoc/yard.rb
73
- - lib/yard-tomdoc-intern.rb
74
80
  - lib/yard-tomdoc.rb
81
+ - lib/yard-tomdoc.yml
75
82
  - test/helper.rb
76
83
  - test/system/sample/lib/example.rb
77
84
  - test/system/sample/lib/hello_world.rb
78
85
  - test/system/test_yardoc.rb
79
86
  - test/unit/test_docstring.rb
87
+ - LICENSE.txt
80
88
  - HISTORY.md
81
89
  - README.md
82
- - NOTICE.md
83
90
  homepage: http://rubyworks.github.com/yard-tomdoc
84
91
  licenses:
85
92
  - MIT
93
+ - MIT
86
94
  post_install_message:
87
95
  rdoc_options: []
88
96
  require_paths:
data/NOTICE.md DELETED
@@ -1,37 +0,0 @@
1
- # COPYRIGHT NOTICES
2
-
3
-
4
- ## YARD Tomdoc
5
-
6
- **Copyright (c) 2010 Loren Segal, Thomas Sawyer**
7
-
8
- Distributed under the terms of the MIT License (see below).
9
-
10
-
11
- ## Tomdoc
12
-
13
- **Copyright (c) 2010 Tom Preston-Werner, Chris Wanstrath**
14
-
15
- Distributed under the terms of the MIT License (see below).
16
-
17
-
18
- ## The MIT License
19
-
20
- Permission is hereby granted, free of charge, to any person obtaining a copy
21
- of this software and associated documentation files (the "Software"), to deal
22
- in the Software without restriction, including without limitation the rights
23
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
- copies of the Software, and to permit persons to whom the Software is
25
- furnished to do so, subject to the following conditions:
26
-
27
- The above copyright notice and this permission notice shall be included in
28
- all copies or substantial portions of the Software.
29
-
30
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
36
- THE SOFTWARE.
37
-
@@ -1,3 +0,0 @@
1
- require 'yard-tomdoc/tomdoc'
2
- require 'yard-tomdoc/yard'
3
-
@@ -1,22 +0,0 @@
1
- module TomDoc
2
- class Arg
3
- attr_accessor :name, :description
4
-
5
- # Create new Arg object.
6
- #
7
- # name - name of argument
8
- # description - arguments description
9
- #
10
- def initialize(name, description = '')
11
- @name = name.to_s.intern
12
- @description = description
13
- end
14
-
15
- # Is this an optional argument?
16
- #
17
- # Returns Boolean.
18
- def optional?
19
- @description.downcase.include? 'optional'
20
- end
21
- end
22
- end
@@ -1,166 +0,0 @@
1
- module TomDoc
2
-
3
- # TomDoc class needs Arg class.
4
- if RUBY_VERSION > '1.9'
5
- require_relative 'arg'
6
- else
7
- require 'yard-tomdoc/arg'
8
- end
9
-
10
- # This error is raised if comment is not valid TomDoc format.
11
- class InvalidTomDoc < RuntimeError
12
- # Create new InvalidTomDoc object.
13
- #
14
- # doc - document string
15
- #
16
- def initialize(doc)
17
- @doc = doc
18
- end
19
-
20
- # Provide access to document string.
21
- #
22
- # Returns [String] documentation string.
23
- def message
24
- @doc
25
- end
26
-
27
- # Provide access to document string.
28
- #
29
- # Returns [String] documentation string.
30
- def to_s
31
- @doc
32
- end
33
- end
34
-
35
- # Model a TomDoc comment.
36
- class TomDoc
37
- attr_accessor :raw
38
-
39
- def initialize(text)
40
- @raw = text.to_s.strip
41
- end
42
-
43
- # Returns [String] raw comment text.
44
- def to_s
45
- @raw
46
- end
47
-
48
- # Returns [Boolean] true if valid TomDoc comment.
49
- def self.valid?(text)
50
- new(text).valid?
51
- end
52
-
53
- # Returns [Boolean] true if valid TomDoc comment, otherwise false.
54
- def valid?
55
- validate
56
- rescue InvalidTomDoc
57
- false
58
- end
59
-
60
- # Returns [Boolean] true if validation doesn't raise an error.
61
- def validate
62
- if !raw.include?('Returns')
63
- raise InvalidTomDoc.new("No `Returns' statement.")
64
- end
65
-
66
- if tomdoc.split("\n\n").size < 2
67
- raise InvalidTomDoc.new("No description section found.")
68
- end
69
-
70
- true
71
- end
72
-
73
- # Returns [String] cleansed comment text.
74
- def tomdoc
75
- #raw
76
- clean = raw.split("\n").map do |line|
77
- line =~ /^(\s*# ?)/ ? line.sub($1, '') : nil
78
- end.compact.join("\n")
79
- clean
80
- end
81
-
82
- # Returns [Array] document split into sections.
83
- def sections
84
- tomdoc.split("\n\n")
85
- end
86
-
87
- # Returns [String] first section.
88
- def description
89
- sections.first
90
- end
91
-
92
- # Returns [Array] list of arguments.
93
- def args
94
- args = []
95
- last_indent = nil
96
-
97
- return args unless sections[1]
98
-
99
- sections[1].split("\n").each do |line|
100
- next if line.strip.empty?
101
- indent = line.scan(/^\s*/)[0].to_s.size
102
-
103
- if last_indent && indent > last_indent
104
- args.last.description += line.squeeze(" ")
105
- else
106
- param, desc = line.split(" - ")
107
- args << Arg.new(param.strip, desc.strip) if param && desc
108
- end
109
-
110
- last_indent = indent
111
- end
112
-
113
- args
114
- end
115
-
116
- # Returns [Array] list of examples.
117
- def examples
118
- if tomdoc =~ /(\s*Examples\s*(.+?)\s*(?:Returns|Raises))/m
119
- $2.split("\n\n")
120
- else
121
- []
122
- end
123
- end
124
-
125
- # Returns [Array] list of possible returns.
126
- def returns
127
- if tomdoc =~ /^\s*(Returns.+)/m
128
- lines = $1.split("\n")
129
- statements = []
130
-
131
- lines.each do |line|
132
- next if line =~ /^\s*Raises/
133
- if line =~ /^\s+/
134
- statements.last << line.squeeze(' ')
135
- else
136
- statements << line
137
- end
138
- end
139
-
140
- statements
141
- else
142
- []
143
- end
144
- end
145
-
146
- # Returns [Array] list of possible errors that could be raised.
147
- def raises
148
- if tomdoc =~ /^\s*(Raises.+)/m
149
- lines = $1.split("\n")
150
- statements = []
151
-
152
- lines.each do |line|
153
- if line =~ /^\s+/
154
- statements.last << line.squeeze(' ')
155
- else
156
- statements << line
157
- end
158
- end
159
-
160
- statements
161
- else
162
- []
163
- end
164
- end
165
- end
166
- end
@@ -1,6 +0,0 @@
1
- module YARD
2
- module TomDoc
3
- VERSION = "0.3.1"
4
- end
5
- end
6
-
@@ -1,39 +0,0 @@
1
- module YARD
2
-
3
- class Docstring
4
-
5
- # Parse comments with TomDoc and then provide YARD with results.
6
- #
7
- # comments - comment String
8
- #
9
- # Returns [String] of parsed comments description.
10
- def parse_comments(comments)
11
- comment = [comments].flatten.join("\n")
12
-
13
- tomdoc = TomDoc::TomDoc.new(comment)
14
-
15
- tomdoc.examples.each {|ex| create_tag(:example, "\n" + ex) }
16
-
17
- tomdoc.args.each {|arg| create_tag(:param, "#{arg.name} #{arg.description}") }
18
-
19
- tomdoc.raises.each {|r| create_tag(:raise, r.sub(/\ARaises\s+/, '')) }
20
-
21
- tomdoc.returns.each do |r|
22
- if md = /\AReturns\s+([A-Z].*?)\s+/.match(r)
23
- klass = md[1]
24
- desc = md.post_match
25
- create_tag(:return, "[#{klass}] #{desc}")
26
- else
27
- desc = r.sub(/\AReturns\s+/, '')
28
- create_tag(:return, desc)
29
- end
30
- end
31
-
32
- # notice we return the modified comment
33
- tomdoc.description.to_s
34
- end
35
-
36
- end
37
-
38
- end
39
-