tomdoc 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.md +104 -0
- data/Rakefile +80 -0
- data/bin/tomdoc +6 -0
- data/lib/tomdoc.rb +25 -0
- data/lib/tomdoc/arg.rb +14 -0
- data/lib/tomdoc/cli.rb +150 -0
- data/lib/tomdoc/generator.rb +138 -0
- data/lib/tomdoc/generators/console.rb +68 -0
- data/lib/tomdoc/generators/html.rb +42 -0
- data/lib/tomdoc/method.rb +21 -0
- data/lib/tomdoc/scope.rb +46 -0
- data/lib/tomdoc/source_parser.rb +145 -0
- data/lib/tomdoc/tomdoc.rb +133 -0
- data/lib/tomdoc/version.rb +3 -0
- data/man/tomdoc.5 +320 -0
- data/man/tomdoc.5.html +285 -0
- data/man/tomdoc.5.ronn +203 -0
- data/test/console_generator_test.rb +20 -0
- data/test/fixtures/chimney.rb +711 -0
- data/test/fixtures/multiplex.rb +47 -0
- data/test/fixtures/simple.rb +10 -0
- data/test/generator_test.rb +47 -0
- data/test/helper.rb +21 -0
- data/test/html_generator_test.rb +18 -0
- data/test/source_parser_test.rb +66 -0
- data/test/tomdoc_parser_test.rb +127 -0
- metadata +143 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
module TomDoc
|
2
|
+
module Fixtures
|
3
|
+
class Multiplex
|
4
|
+
# Duplicate some text an abitrary number of times.
|
5
|
+
#
|
6
|
+
# text - The String to be duplicated.
|
7
|
+
# count - The Integer number of times to duplicate the text.
|
8
|
+
#
|
9
|
+
# Examples
|
10
|
+
# multiplex('Tom', 4)
|
11
|
+
# # => 'TomTomTomTom'
|
12
|
+
#
|
13
|
+
# multiplex('Bo', 2)
|
14
|
+
# # => 'BoBo'
|
15
|
+
#
|
16
|
+
# multiplex('Chris', -1)
|
17
|
+
# # => nil
|
18
|
+
#
|
19
|
+
# Returns the duplicated String when the count is > 1.
|
20
|
+
# Returns nil when the count is < 1.
|
21
|
+
# Returns the atomic mass of the element as a Float. The value is in
|
22
|
+
# unified atomic mass units.
|
23
|
+
def multiplex(text, count)
|
24
|
+
text * count
|
25
|
+
end
|
26
|
+
|
27
|
+
# Duplicate some text an abitrary number of times.
|
28
|
+
#
|
29
|
+
# Returns the duplicated String.
|
30
|
+
def multiplex2(text, count)
|
31
|
+
text * count
|
32
|
+
end
|
33
|
+
|
34
|
+
# Duplicate some text an abitrary number of times.
|
35
|
+
#
|
36
|
+
# Examples
|
37
|
+
# multiplex('Tom', 4)
|
38
|
+
# # => 'TomTomTomTom'
|
39
|
+
#
|
40
|
+
# multiplex('Bo', 2)
|
41
|
+
# # => 'BoBo'
|
42
|
+
def multiplex3(text, count)
|
43
|
+
text * count
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test/helper'
|
2
|
+
|
3
|
+
class GeneratorTest < TomDoc::Test
|
4
|
+
def setup
|
5
|
+
@class = Class.new(TomDoc::Generator) do
|
6
|
+
def write_method(method, prefix = '')
|
7
|
+
@buffer = [] if @buffer.is_a?(String)
|
8
|
+
@buffer << method.name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
@generator = @class.new
|
13
|
+
end
|
14
|
+
|
15
|
+
test "can ignore validation methods" do
|
16
|
+
@generator.options[:validate] = false
|
17
|
+
methods = @generator.generate(fixture(:chimney))
|
18
|
+
assert_equal 47, methods.size
|
19
|
+
end
|
20
|
+
|
21
|
+
test "ignores invalid methods" do
|
22
|
+
@generator.options[:validate] = true
|
23
|
+
methods = @generator.generate(fixture(:chimney))
|
24
|
+
assert_equal 39, methods.size
|
25
|
+
end
|
26
|
+
|
27
|
+
test "detects built-in constants" do
|
28
|
+
assert @generator.constant?('Object')
|
29
|
+
assert @generator.constant?('Kernel')
|
30
|
+
assert @generator.constant?('String')
|
31
|
+
end
|
32
|
+
|
33
|
+
test "detects common constants" do
|
34
|
+
assert @generator.constant?('Boolean')
|
35
|
+
assert @generator.constant?('Test::Unit::TestCase')
|
36
|
+
end
|
37
|
+
|
38
|
+
test "picks up constants from the thing we're TomDocin'" do
|
39
|
+
scope = { :Chimney => TomDoc::Scope.new('Chimney') }
|
40
|
+
@generator.instance_variable_set(:@scopes, scope)
|
41
|
+
assert @generator.constant?('Chimney')
|
42
|
+
end
|
43
|
+
|
44
|
+
test "ignores non-constants" do
|
45
|
+
assert !@generator.constant?('Dog')
|
46
|
+
end
|
47
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'test/fixtures/multiplex'
|
4
|
+
|
5
|
+
require 'tomdoc'
|
6
|
+
|
7
|
+
module TomDoc
|
8
|
+
class Test < Test::Unit::TestCase
|
9
|
+
def self.test(name, &block)
|
10
|
+
define_method("test_#{name.gsub(/\W/,'_')}", &block) if block
|
11
|
+
end
|
12
|
+
|
13
|
+
def default_test
|
14
|
+
end
|
15
|
+
|
16
|
+
def fixture(name)
|
17
|
+
@fixtures ||= {}
|
18
|
+
@fixtures[name] ||= File.read("test/fixtures/#{name}.rb")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test/helper'
|
2
|
+
|
3
|
+
class HTMLGeneratorTest < TomDoc::Test
|
4
|
+
def setup
|
5
|
+
@html = TomDoc::Generators::HTML.generate(fixture(:simple))
|
6
|
+
end
|
7
|
+
|
8
|
+
test "works" do
|
9
|
+
assert_equal <<html, @html
|
10
|
+
<ul>
|
11
|
+
<li><b>Simple#string(text)</b><pre>Just a simple method.
|
12
|
+
|
13
|
+
text - The String to return.
|
14
|
+
|
15
|
+
Returns a String.</pre></li></ul>
|
16
|
+
html
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'test/helper'
|
2
|
+
|
3
|
+
class ChimneySourceParserTest < TomDoc::Test
|
4
|
+
def setup
|
5
|
+
@parser = TomDoc::SourceParser.new
|
6
|
+
@result = @parser.parse(fixture(:chimney))
|
7
|
+
|
8
|
+
@chimney = @result[:GitHub][:Chimney]
|
9
|
+
end
|
10
|
+
|
11
|
+
test "finds instance methods" do
|
12
|
+
assert_equal 35, @chimney.instance_methods.size
|
13
|
+
end
|
14
|
+
|
15
|
+
test "attaches TomDoc" do
|
16
|
+
m = @chimney.instance_methods.detect { |m| m.name == :get_user_route }
|
17
|
+
assert_equal [:user], m.tomdoc.args.map { |a| a.name }
|
18
|
+
end
|
19
|
+
|
20
|
+
test "finds class methods" do
|
21
|
+
assert_equal 9, @chimney.class_methods.size
|
22
|
+
end
|
23
|
+
|
24
|
+
test "finds namespaces" do
|
25
|
+
assert @result[:GitHub][:Math]
|
26
|
+
assert_equal 2, @result.keys.size
|
27
|
+
assert_equal 3, @result[:GitHub].keys.size
|
28
|
+
end
|
29
|
+
|
30
|
+
test "finds methods in a namespace" do
|
31
|
+
assert_equal 1, @result[:GitHub].class_methods.size
|
32
|
+
end
|
33
|
+
|
34
|
+
test "finds multiple classes in one file" do
|
35
|
+
assert_equal 1, @result[:GitHub][:Math].instance_methods.size
|
36
|
+
assert_equal 1, @result[:GitHub][:Jobs].instance_methods.size
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class SourceParserTest < TomDoc::Test
|
41
|
+
def setup
|
42
|
+
@parser = TomDoc::SourceParser.new
|
43
|
+
end
|
44
|
+
|
45
|
+
test "finds single class in one file" do
|
46
|
+
result = @parser.parse(fixture(:simple))
|
47
|
+
|
48
|
+
assert result[:Simple]
|
49
|
+
|
50
|
+
methods = result[:Simple].instance_methods
|
51
|
+
assert_equal 1, methods.size
|
52
|
+
assert_equal [:string], methods.map { |m| m.name }
|
53
|
+
end
|
54
|
+
|
55
|
+
test "finds single module in one file"
|
56
|
+
test "finds module in a module"
|
57
|
+
test "finds module in a class"
|
58
|
+
test "finds class in a class"
|
59
|
+
|
60
|
+
test "finds class in a module in a module" do
|
61
|
+
result = @parser.parse(fixture(:multiplex))
|
62
|
+
klass = result[:TomDoc][:Fixtures][:Multiplex]
|
63
|
+
assert klass
|
64
|
+
assert_equal 3, klass.instance_methods.size
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'test/helper'
|
2
|
+
|
3
|
+
class TomDocParserTest < TomDoc::Test
|
4
|
+
def setup
|
5
|
+
@comment = TomDoc::TomDoc.new(<<comment)
|
6
|
+
# Duplicate some text an abitrary number of times.
|
7
|
+
#
|
8
|
+
# text - The String to be duplicated.
|
9
|
+
# count - The Integer number of times to
|
10
|
+
# duplicate the text.
|
11
|
+
# reverse - An optional Boolean indicating
|
12
|
+
# whether to reverse the result text or not.
|
13
|
+
#
|
14
|
+
# Examples
|
15
|
+
# multiplex('Tom', 4)
|
16
|
+
# # => 'TomTomTomTom'
|
17
|
+
#
|
18
|
+
# multiplex('Bo', 2)
|
19
|
+
# # => 'BoBo'
|
20
|
+
#
|
21
|
+
# multiplex('Chris', -1)
|
22
|
+
# # => nil
|
23
|
+
#
|
24
|
+
# Returns the duplicated String when the count is > 1.
|
25
|
+
# Returns the atomic mass of the element as a Float. The value is in
|
26
|
+
# unified atomic mass units.
|
27
|
+
# Returns nil when the count is < 1.
|
28
|
+
# Raises ExpectedString if the first argument is not a String.
|
29
|
+
# Raises ExpectedInteger if the second argument is not an Integer.
|
30
|
+
comment
|
31
|
+
|
32
|
+
@comment2 = TomDoc::TomDoc.new(<<comment2)
|
33
|
+
# Duplicate some text an abitrary number of times.
|
34
|
+
#
|
35
|
+
# Returns the duplicated String.
|
36
|
+
comment2
|
37
|
+
|
38
|
+
@comment3 = TomDoc::TomDoc.new(<<comment3)
|
39
|
+
# Duplicate some text an abitrary number of times.
|
40
|
+
#
|
41
|
+
# Examples
|
42
|
+
#
|
43
|
+
# multiplex('Tom', 4)
|
44
|
+
# # => 'TomTomTomTom'
|
45
|
+
#
|
46
|
+
# multiplex('Bo', 2)
|
47
|
+
# # => 'BoBo'
|
48
|
+
comment3
|
49
|
+
end
|
50
|
+
|
51
|
+
test "knows when TomDoc is invalid" do
|
52
|
+
assert_raises TomDoc::InvalidTomDoc do
|
53
|
+
@comment3.validate
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
test "parses a description" do
|
58
|
+
assert_equal "Duplicate some text an abitrary number of times.",
|
59
|
+
@comment.description
|
60
|
+
end
|
61
|
+
|
62
|
+
test "parses args" do
|
63
|
+
assert_equal 3, @comment.args.size
|
64
|
+
end
|
65
|
+
|
66
|
+
test "knows an arg's name" do
|
67
|
+
assert_equal :text, @comment.args.first.name
|
68
|
+
assert_equal :count, @comment.args[1].name
|
69
|
+
assert_equal :reverse, @comment.args[2].name
|
70
|
+
end
|
71
|
+
|
72
|
+
test "knows an arg's description" do
|
73
|
+
assert_equal 'The Integer number of times to duplicate the text.',
|
74
|
+
@comment.args[1].description
|
75
|
+
|
76
|
+
reverse = 'An optional Boolean indicating whether to reverse the'
|
77
|
+
reverse << ' result text or not.'
|
78
|
+
assert_equal reverse, @comment.args[2].description
|
79
|
+
end
|
80
|
+
|
81
|
+
test "knows an arg's optionality" do
|
82
|
+
assert_equal false, @comment.args.first.optional?
|
83
|
+
assert_equal true, @comment.args.last.optional?
|
84
|
+
end
|
85
|
+
|
86
|
+
test "knows what to do when there are no args" do
|
87
|
+
assert_equal 0, @comment2.args.size
|
88
|
+
end
|
89
|
+
|
90
|
+
test "knows how many examples there are" do
|
91
|
+
assert_equal 3, @comment.examples.size
|
92
|
+
end
|
93
|
+
|
94
|
+
test "knows each example" do
|
95
|
+
assert_equal " multiplex('Bo', 2)\n # => 'BoBo'",
|
96
|
+
@comment.examples[1].to_s
|
97
|
+
end
|
98
|
+
|
99
|
+
test "knows what to do when there are no examples" do
|
100
|
+
assert_equal 0, @comment2.examples.size
|
101
|
+
end
|
102
|
+
|
103
|
+
test "knows how many return examples there are" do
|
104
|
+
assert_equal 3, @comment.returns.size
|
105
|
+
end
|
106
|
+
|
107
|
+
test "knows if the method raises anything" do
|
108
|
+
assert_equal 2, @comment.raises.size
|
109
|
+
end
|
110
|
+
|
111
|
+
test "knows each return example" do
|
112
|
+
assert_equal "Returns the duplicated String when the count is > 1.",
|
113
|
+
@comment.returns.first.to_s
|
114
|
+
|
115
|
+
string = ''
|
116
|
+
string << "Returns the atomic mass of the element as a Float. "
|
117
|
+
string << "The value is in unified atomic mass units."
|
118
|
+
assert_equal string, @comment.returns[1].to_s
|
119
|
+
|
120
|
+
assert_equal "Returns nil when the count is < 1.",
|
121
|
+
@comment.returns[2].to_s
|
122
|
+
end
|
123
|
+
|
124
|
+
test "knows what to do when there are no return examples" do
|
125
|
+
assert_equal 0, @comment2.examples.size
|
126
|
+
end
|
127
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tomdoc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Chris Wanstrath
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-11 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: sexp_processor
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 3
|
29
|
+
- 0
|
30
|
+
- 4
|
31
|
+
version: 3.0.4
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: ParseTree
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 3
|
43
|
+
- 0
|
44
|
+
- 5
|
45
|
+
version: 3.0.5
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: RubyInline
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 3
|
57
|
+
- 7
|
58
|
+
- 0
|
59
|
+
version: 3.7.0
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: ruby_parser
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 2
|
71
|
+
- 0
|
72
|
+
- 4
|
73
|
+
version: 2.0.4
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
76
|
+
description: " TomDoc is flexible code documentation with human readers in\n mind. The tomdoc gem is a Ruby library to discover and display\n TomDoc'd methods and classes.\n\n Given a Ruby file with TomDoc'd methods, tomdoc can generate HTML or\n print to the console. You can use it to query up a single method or\n a group of methods, and it's usable from irb.\n\n If you're using TomDoc, tomdoc is for you.\n"
|
77
|
+
email: chris@ozmm.org
|
78
|
+
executables:
|
79
|
+
- tomdoc
|
80
|
+
extensions: []
|
81
|
+
|
82
|
+
extra_rdoc_files: []
|
83
|
+
|
84
|
+
files:
|
85
|
+
- README.md
|
86
|
+
- Rakefile
|
87
|
+
- LICENSE
|
88
|
+
- lib/tomdoc/arg.rb
|
89
|
+
- lib/tomdoc/cli.rb
|
90
|
+
- lib/tomdoc/generator.rb
|
91
|
+
- lib/tomdoc/generators/console.rb
|
92
|
+
- lib/tomdoc/generators/html.rb
|
93
|
+
- lib/tomdoc/method.rb
|
94
|
+
- lib/tomdoc/scope.rb
|
95
|
+
- lib/tomdoc/source_parser.rb
|
96
|
+
- lib/tomdoc/tomdoc.rb
|
97
|
+
- lib/tomdoc/version.rb
|
98
|
+
- lib/tomdoc.rb
|
99
|
+
- bin/tomdoc
|
100
|
+
- man/tomdoc.5
|
101
|
+
- man/tomdoc.5.html
|
102
|
+
- man/tomdoc.5.ronn
|
103
|
+
- test/console_generator_test.rb
|
104
|
+
- test/fixtures/chimney.rb
|
105
|
+
- test/fixtures/multiplex.rb
|
106
|
+
- test/fixtures/simple.rb
|
107
|
+
- test/generator_test.rb
|
108
|
+
- test/helper.rb
|
109
|
+
- test/html_generator_test.rb
|
110
|
+
- test/source_parser_test.rb
|
111
|
+
- test/tomdoc_parser_test.rb
|
112
|
+
has_rdoc: true
|
113
|
+
homepage: http://github.com/defunkt/tomdoc
|
114
|
+
licenses: []
|
115
|
+
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
version: "0"
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
requirements: []
|
136
|
+
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 1.3.6
|
139
|
+
signing_key:
|
140
|
+
specification_version: 3
|
141
|
+
summary: A TomDoc library for Ruby.
|
142
|
+
test_files: []
|
143
|
+
|