docapi 0.1.5 → 0.2.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/.gitignore CHANGED
@@ -1,5 +1,4 @@
1
1
  *.sw?
2
2
  .DS_Store
3
3
  coverage
4
- rdoc
5
4
  pkg
data/Rakefile CHANGED
@@ -10,6 +10,7 @@ begin
10
10
  gem.email = "cyril.rohr@gmail.com"
11
11
  gem.homepage = "http://github.com/crohr/docapi"
12
12
  gem.authors = ["Cyril Rohr"]
13
+ gem.add_dependency "rdoc", ">= 2.0.0"
13
14
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
15
  end
15
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.2.0
data/bin/docapi CHANGED
@@ -34,13 +34,11 @@ option_parser.parse!
34
34
 
35
35
  @command = ARGV.shift
36
36
 
37
-
38
-
39
37
  case @command
40
38
  when 'generate'
41
- Docapi.new.generate(input = ARGV, output = @options.delete(:output), @options)
39
+ Docapi::CLI.new.generate(input = ARGV, output = @options.delete(:output), @options)
42
40
  when 'merge'
43
- Docapi.new.merge(input = ARGV.shift, output = @options.delete(:output), @options)
41
+ Docapi::CLI.new.merge(input = ARGV.shift, output = @options.delete(:output), @options)
44
42
  else
45
43
  $stderr.puts option_parser.help
46
44
  exit(-1)
data/docapi.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{docapi}
8
- s.version = "0.1.5"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cyril Rohr"]
12
- s.date = %q{2009-12-04}
12
+ s.date = %q{2010-03-15}
13
13
  s.default_executable = %q{docapi}
14
14
  s.description = %q{RDoc template for generating API documentation.}
15
15
  s.email = %q{cyril.rohr@gmail.com}
@@ -48,6 +48,8 @@ Gem::Specification.new do |s|
48
48
  "files/stylesheets/documentation/highlighter/zenburn.css",
49
49
  "files/stylesheets/documentation/layout.css",
50
50
  "lib/docapi.rb",
51
+ "lib/rdoc/generator/docapi.rb",
52
+ "test/Rakefile",
51
53
  "test/code/reference_api.rb",
52
54
  "test/doc/1-README.md",
53
55
  "test/doc/2-documentation/documentation.html",
@@ -68,9 +70,12 @@ Gem::Specification.new do |s|
68
70
  s.specification_version = 3
69
71
 
70
72
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
73
+ s.add_runtime_dependency(%q<rdoc>, [">= 2.0.0"])
71
74
  else
75
+ s.add_dependency(%q<rdoc>, [">= 2.0.0"])
72
76
  end
73
77
  else
78
+ s.add_dependency(%q<rdoc>, [">= 2.0.0"])
74
79
  end
75
80
  end
76
81
 
@@ -112,7 +112,7 @@ p.page-title {
112
112
  padding-left: 5px;
113
113
  }
114
114
  table {
115
- font-size: 0.8em;
115
+ font-size: 0.9em;
116
116
  }
117
117
 
118
118
  /*#toc {
data/lib/docapi.rb CHANGED
@@ -1,150 +1,141 @@
1
- require 'pathname'
2
- require 'tempfile'
1
+ require 'yaml'
2
+ require 'haml'
3
3
  require 'maruku'
4
- require 'fileutils'
5
4
 
6
- class Docapi
7
-
8
- FILES_TO_INCLUDE = {
9
- :javascripts => ["./javascripts/documentation/highlight.pack.js", "./javascripts/documentation/jquery-1.3.2.min.js", "./javascripts/documentation/jquery.tableofcontents.min.js", "./javascripts/documentation/documentation.js"],
10
- :stylesheets => ["./stylesheets/documentation/layout.css", "./stylesheets/documentation/syntax.css", "./stylesheets/documentation/highlighter/default.css"]
11
- }
12
-
13
- def initialize
5
+ module Docapi
6
+ class CLI
7
+
8
+ TEMPLATE = <<TEMPLATE
9
+ - methods.each do |method|
10
+ .docapi-subsection
11
+ .docapi-title
12
+ %a{:name => method["name"].gsub(/\W/,' ').squeeze(' ').gsub(/\s/,'-')}= method["name"]
13
+ .docapi-content
14
+ = method["html_comment"].gsub(/<h2>(.*?)<\\/h2>/m, '<div class="docapi-subtitle">\\1</div>')
15
+ TEMPLATE
16
+
17
+ FILES_TO_INCLUDE = {
18
+ :javascripts => ["./javascripts/documentation/highlight.pack.js", "./javascripts/documentation/jquery-1.3.2.min.js", "./javascripts/documentation/jquery.tableofcontents.min.js", "./javascripts/documentation/documentation.js"],
19
+ :stylesheets => ["./stylesheets/documentation/layout.css", "./stylesheets/documentation/syntax.css", "./stylesheets/documentation/highlighter/default.css"]
20
+ }
14
21
 
15
- end
16
-
17
- def merge(input_path, output_path, options = {})
18
- input_dir = Pathname.new(input_path)
19
- raise ArgumentError, "Input directory does not exist" unless input_dir.directory?
20
- output_dir = Pathname.new(output_path || Pathname.getwd+"generated-doc")
21
- output_dir.mkpath
22
- output = File.open(output_dir+"index.html", "w+")
23
- output << header(:title => options[:title])
24
- output << convert_directory(input_dir)
25
- output << footer
26
- output.close
27
- # copy stylesheets and javascripts files
28
- FileUtils.cp_r(File.join(File.dirname(__FILE__), "..", "files", "."), output_dir)
29
- end
30
-
31
- def convert_directory(dir, level = 1)
32
- output = []
33
- dir.entries.each do |entry|
34
- next if entry.to_s =~ /^\./
35
- path = dir+entry
36
- title = File.basename(entry).gsub(/\d+-/, "").gsub(/\..+?$/, "")
37
- output << "<div class='docapi-section #{title.downcase}'>"
38
- if path.directory?
39
- output << "<h#{level}>#{title.capitalize}</h#{level}>"
40
- output << convert_directory(path, level+1)
41
- else
42
- output << convert_file(path)
43
- end
44
- output << '</div>'
22
+ def merge(input_path, output_path, options = {})
23
+ input_dir = Pathname.new(input_path)
24
+ raise ArgumentError, "Input directory does not exist" unless input_dir.directory?
25
+ output_dir = Pathname.new(output_path || Pathname.getwd+"generated-doc")
26
+ output_dir.mkpath
27
+ output = File.open(output_dir+"index.html", "w+")
28
+ output << header(:title => options[:title])
29
+ output << convert_directory(input_dir)
30
+ output << footer
31
+ output.close
32
+ # copy stylesheets and javascripts files
33
+ FileUtils.cp_r(File.join(File.dirname(__FILE__), "..", "files", "."), output_dir)
45
34
  end
46
- output.flatten
47
- end
48
-
49
- def convert_file(file)
50
- case file.extname
51
- when ".md"
52
- Maruku.new( File.read(file) ).to_html
53
- when ".rb"
54
- process_file_sections(file, 'ruby', [/^=begin (.*)$/, /^=end$/])
55
- when ".py"
56
- process_file_sections(file, 'python', [/^''' (.*)$/, /^'''$/])
57
- when ".sh"
58
- process_file_sections(file, 'bash', [/^<<ENDCOMMENT >\/dev\/null$/, /^ENDCOMMENT$/])
59
- when ".html"
60
- File.read(file)
35
+
36
+ def convert_directory(dir, level = 1)
37
+ output = []
38
+ dir.entries.each do |entry|
39
+ next if entry.to_s =~ /^\./ || entry.to_s == "created.rid"
40
+ path = dir+entry
41
+ title = File.basename(entry).gsub(/\d+-/, "").gsub(/\..+?$/, "")
42
+ output << "<div class='docapi-section #{title.downcase}'>"
43
+ if path.directory?
44
+ output << "<h#{level}>#{title.capitalize}</h#{level}>"
45
+ output << convert_directory(path, level+1)
46
+ else
47
+ output << convert_file(path)
48
+ end
49
+ output << '</div>'
50
+ end
51
+ output.flatten
61
52
  end
62
- end
63
-
64
-
65
- def process_file_sections(file, language, regexps)
66
- blocks = []
67
- output = ["<div class='docapi-subsection'><div class='docapi-title'>#{File.basename(file).gsub(/^\d+-/, "")}</div>"]
68
- File.open(file, "r").each do |line|
69
- if line =~ regexps.first
70
- output << write_block(blocks.pop)
71
- blocks << {:content => "", :language => ($1 || "markdown")}
72
- elsif line =~ regexps.last
73
- output << write_block(blocks.pop)
74
- else
75
- blocks << {:content => "", :language => language} if blocks.last.nil?
76
- blocks.last[:content] << line
53
+
54
+ def convert_file(file)
55
+ case file.extname
56
+ when ".md"
57
+ Maruku.new( File.read(file) ).to_html
58
+ when ".rb"
59
+ process_file_sections(file, 'ruby', [/^=begin (.*)$/, /^=end$/])
60
+ when ".py"
61
+ process_file_sections(file, 'python', [/^''' (.*)$/, /^'''$/])
62
+ when ".sh"
63
+ process_file_sections(file, 'bash', [/^<<ENDCOMMENT >\/dev\/null$/, /^ENDCOMMENT$/])
64
+ when ".html"
65
+ File.read(file)
77
66
  end
78
- end
79
- output << write_block(blocks.pop)
80
- output << '</div>'
81
- end
82
-
83
- def write_block(block)
84
- if block
85
- case block[:language]
86
- when "markdown", "text"
87
- Maruku.new( block[:content] ).to_html.gsub(/<pre class='(.+?)'><code>(.*?)<\/code><\/pre>/m, '<pre><code class="\1">\2</code></pre>')
88
- else
89
- '<pre><code class="'+block[:language]+'">'+block[:content]+'</code></pre>'
67
+ end
68
+
69
+
70
+ def process_file_sections(file, language, regexps)
71
+ blocks = []
72
+ output = ["<div class='docapi-subsection'><div class='docapi-title'>#{File.basename(file).gsub(/^\d+-/, "")}</div>"]
73
+ File.open(file, "r").each do |line|
74
+ if line =~ regexps.first
75
+ output << write_block(blocks.pop)
76
+ blocks << {:content => "", :language => ($1 || "markdown")}
77
+ elsif line =~ regexps.last
78
+ output << write_block(blocks.pop)
79
+ else
80
+ blocks << {:content => "", :language => language} if blocks.last.nil?
81
+ blocks.last[:content] << line
82
+ end
83
+ end
84
+ output << write_block(blocks.pop)
85
+ output << '</div>'
86
+ end
87
+
88
+ def write_block(block)
89
+ if block
90
+ case block[:language]
91
+ when "markdown", "text"
92
+ Maruku.new( block[:content] ).to_html.gsub(/<pre class='(.+?)'><code>(.*?)<\/code><\/pre>/m, '<pre><code class="\1">\2</code></pre>')
93
+ else
94
+ '<pre><code class="'+block[:language]+'">'+block[:content]+'</code></pre>'
95
+ end
90
96
  end
91
97
  end
92
- end
93
-
94
- def generate(input_paths, output_path, options = {})
95
- require 'rdoc'
96
- require 'rdoc/rdoc'
97
- rdoc_options = %w{-f html --one-file --charset=UTF-8 -U}
98
- rdoc_options.concat input_paths
99
- output_dir = Pathname.new(output_path || Pathname.getwd+"documentation")
100
- raise ArgumentError, "Output directory '#{output_dir}' does not exist" unless output_dir.directory?
101
- rdoc_output = Tempfile.new("rdoc_output.html")
102
- old_stdout = $stdout
103
- begin
104
- # redirect stdout to the file
105
- $stdout = rdoc_output
98
+
99
+ def generate(input_paths, output_path, options = {})
100
+ require 'rdoc/generator/docapi'
101
+ require 'tmpdir'
102
+ temporary_output_path = File.join(Dir.tmpdir, "docapi")
103
+ rdoc_options = %w{-f docapi --charset=UTF-8 -U --quiet -o}
104
+ rdoc_options << temporary_output_path
105
+ rdoc_options.concat input_paths
106
+ output_dir = Pathname.new(output_path || Pathname.getwd+"documentation")
107
+ raise ArgumentError, "Output directory '#{output_dir}' does not exist" unless output_dir.directory?
106
108
  RDoc::RDoc.new.document(rdoc_options)
107
- ensure
108
- $stdout = old_stdout
109
- end
110
- rdoc_output.rewind
111
- documentation = rdoc_output.read
112
- rdoc_output.close
113
- date = documentation[/<tr><td>Modified:<\/td><td>(.*?)<\/td><\/tr>/, 1]
114
- methods = documentation.split("<h4> method: ")
115
- methods.shift
116
- methods.map!{ |m|
117
- ["<div class='docapi-subsection'>", m.gsub(/<blockquote><pre>.*/m, "").gsub(/<a name="(.+?)">(.*?)<br \/>\s*?<\/a>/m, "<div class='docapi-title'><a name=\"\\1\">\\2<a></div>").gsub(/<h2>(.*?)<\/h2>/m, "<div class='docapi-subtitle'>\\1</div>").gsub(/<pre>(.*?)<\/pre>/m, "<pre><code>\\1</code></pre>"), "</div>"].join("")
118
- }
119
-
120
- File.open(File.join(output_dir.realpath, "documentation.html"), "w+") do |f|
121
- # sort methods by :call-seq: length ASC. A bit dirty but...
122
- methods.sort_by{|m| method = m[/<div class='docapi-title'><a name=".*?">(.+?)<a><\/div>/, 1].length rescue 0}.each{ |method| f << method }
109
+ documentation = YAML.load_file(File.join(temporary_output_path, "index.yaml"))
110
+ html = Haml::Engine.new(TEMPLATE, :ugly => true).render(Object.new, :methods => documentation["methods"], :options => options)
111
+ File.open(File.join(output_dir.realpath, "documentation.html"), "w+") do |f|
112
+ f << html.gsub(/<pre>(.*?)<\/pre>/im, '<pre><code>\1</code></pre>')
113
+ end
123
114
  end
124
- end
125
-
126
-
127
- def header(options = {})
128
- output = []
129
- output << "<html><head><title>#{options[:title] || "Documentation"}</title>"
130
- FILES_TO_INCLUDE[:javascripts].each do |file|
131
- output << '<script type="text/javascript" src="'+file+'"></script>'
115
+
116
+
117
+ def header(options = {})
118
+ output = []
119
+ output << "<html><head><title>#{options[:title] || "Documentation"}</title>"
120
+ FILES_TO_INCLUDE[:javascripts].each do |file|
121
+ output << '<script type="text/javascript" src="'+file+'"></script>'
122
+ end
123
+ FILES_TO_INCLUDE[:stylesheets].each do |file|
124
+ output << '<link media="screen" type="text/css" href="'+file+'" rel="stylesheet"/>'
125
+ end
126
+ output << %Q{
127
+ <!--[if IE]>
128
+ <style type="text/css" media="screen">
129
+ body {padding-right: 320px}
130
+ </style>
131
+ <![endif]-->}
132
+ output << "</head><body>"
132
133
  end
133
- FILES_TO_INCLUDE[:stylesheets].each do |file|
134
- output << '<link media="screen" type="text/css" href="'+file+'" rel="stylesheet"/>'
134
+ def footer
135
+ output = []
136
+ output << "<div id='generation-date'>Generated at: <span class='date'>#{Time.now.to_s}</span></div>"
137
+ output << "</body></html>"
135
138
  end
136
- output << %Q{
137
- <!--[if IE]>
138
- <style type="text/css" media="screen">
139
- body {padding-right: 320px}
140
- </style>
141
- <![endif]-->}
142
- output << "</head><body>"
143
- end
144
- def footer
145
- output = []
146
- output << "<div id='generation-date'>Generated at: <span class='date'>#{Time.now.to_s}</span></div>"
147
- output << "</body></html>"
139
+
148
140
  end
149
-
150
141
  end
@@ -0,0 +1,149 @@
1
+ require 'rubygems'
2
+ gem 'rdoc', '>= 2.0.0'
3
+
4
+ require 'rdoc/rdoc' unless defined?( RDoc ) && defined?( RDoc::RDoc )
5
+ require 'rdoc/markup/to_html'
6
+
7
+ require 'pathname'
8
+ # require 'tempfile'
9
+ # require 'maruku'
10
+ require 'fileutils'
11
+ require 'haml'
12
+
13
+
14
+ module RDoc
15
+ module Generator
16
+ class Docapi
17
+
18
+
19
+ def self.for(options)
20
+ new(options)
21
+ end
22
+
23
+ def initialize(options)
24
+ @options = options
25
+
26
+ # set up a hash to keep track of all the classes/modules we have processed
27
+ @already_processed = {}
28
+
29
+ # set up a hash to keep track of all of the objects to be output
30
+ @output = {
31
+ :files => [],
32
+ :classes => [],
33
+ :modules => [],
34
+ :attributes => [],
35
+ :methods => [],
36
+ :aliases => [],
37
+ :constants => [],
38
+ :requires => [],
39
+ :includes => []
40
+ }
41
+ end
42
+
43
+ # Rdoc passes in TopLevel objects from the code_objects.rb tree (all files)
44
+ def generate(files)
45
+ # Each object passed in is a file, process it
46
+ files.each { |file| process_file(file) }
47
+
48
+ h = ::RDoc::Markup::ToHtml.new
49
+
50
+ yaml = YAML.dump({
51
+ "methods" => @output[:methods].map{|method|
52
+ next if method.visibility == :private
53
+ {
54
+ "name" => method.call_seq || method.name,
55
+ "comment" => method.comment,
56
+ "html_comment" => method.comment.nil? ? "" : h.convert(method.comment.gsub(/^#+ ?/, ''))
57
+ }
58
+ }.compact
59
+ })
60
+
61
+ puts yaml unless @options.quiet
62
+ File.open("index.yaml", "w+") do |f|
63
+ f << yaml
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ # process a file from the code_object.rb tree
70
+ def process_file(file)
71
+ @output[:files].push(file)
72
+
73
+ puts "#{file.comment}"
74
+
75
+ # Process all of the objects that this file contains
76
+ file.method_list.each { |child| process_method(child) }
77
+ file.aliases.each { |child| process_alias(child) }
78
+ file.constants.each { |child| process_constant(child) }
79
+ file.requires.each { |child| process_require(child) }
80
+ file.includes.each { |child| process_include(child) }
81
+ file.attributes.each { |child| process_attribute(child) }
82
+
83
+ # Recursively process contained subclasses and modules
84
+ file.each_classmodule do |child|
85
+ process_class_or_module(child)
86
+ end
87
+ end
88
+
89
+ # Process classes and modiles
90
+ def process_class_or_module(obj)
91
+ obj.class == Module ? type = :modules : type = :classes
92
+
93
+ # One important note about the code_objects.rb structure. A class or module
94
+ # definition can be spread a cross many files in Ruby so code_objects.rb handles
95
+ # this by keeping only *one* reference to each class or module that has a definition
96
+ # at the root level of a file (ie. not contained in another class or module).
97
+ # This means that when we are processing files we may run into the same class/module
98
+ # twice. So we need to keep track of what classes/modules we have
99
+ # already seen and make sure we don't create two INSERT statements for the same
100
+ # object.
101
+ if(!@already_processed.has_key?(obj.full_name)) then
102
+ @output[type].push(obj)
103
+ @already_processed[obj.full_name] = true
104
+
105
+ # Process all of the objects that this class or module contains
106
+ obj.method_list.each { |child| process_method(child) }
107
+ obj.aliases.each { |child| process_alias(child) }
108
+ obj.constants.each { |child| process_constant(child) }
109
+ obj.requires.each { |child| process_require(child) }
110
+ obj.includes.each { |child| process_include(child) }
111
+ obj.attributes.each { |child| process_attribute(child) }
112
+ end
113
+
114
+ id = @already_processed[obj.full_name]
115
+ # Recursively process contained subclasses and modules
116
+ obj.each_classmodule do |child|
117
+ process_class_or_module(child)
118
+ end
119
+ end
120
+
121
+ def process_method(obj)
122
+ @output[:methods].push(obj)
123
+ end
124
+
125
+ def process_alias(obj)
126
+ @output[:aliases].push(obj)
127
+ end
128
+
129
+ def process_constant(obj)
130
+ @output[:constants].push(obj)
131
+ end
132
+
133
+ def process_attribute(obj)
134
+ @output[:attributes].push(obj)
135
+ end
136
+
137
+ def process_require(obj)
138
+ @output[:requires].push(obj)
139
+ end
140
+
141
+ def process_include(obj)
142
+ @output[:includes].push(obj)
143
+ end
144
+ end
145
+
146
+ end
147
+ end
148
+
149
+ RDoc::RDoc.add_generator RDoc::Generator::Docapi
data/test/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+
2
+ namespace :test do
3
+ desc "Attempts to generate the list of methods"
4
+ task :generate do
5
+ $LOAD_PATH.unshift File.dirname(__FILE__)+'/../lib'
6
+ require 'docapi'
7
+ require 'rdoc/generator/docapi'
8
+ Docapi::CLI.new.generate(["code/reference_api.rb"], "doc/2-documentation")
9
+ # RDoc::RDoc.new.document(["-f", "docapi", "-U", "-q", "-o", "doc/2-documentation", "code/reference_api.rb"])
10
+ end
11
+
12
+ desc "Attempts to merge"
13
+ task :merge => :generate do
14
+ $LOAD_PATH.unshift File.dirname(__FILE__)+'/../lib'
15
+ require 'docapi'
16
+ require 'rdoc/generator/docapi'
17
+ Docapi::CLI.new.merge("doc", "output", :title => "Reference API Documentation")
18
+ end
19
+ end
@@ -1,74 +1,13 @@
1
- <ol class="methods"><li>
2
-
3
- <div class="synopsis"><a name="M000003">GET /:grid5000-resource[.:format]<a></div>
4
-
5
-
6
-
7
-
8
- <p>
9
- Get a specific version of a Grid5000 resource.
10
- </p>
11
- <h2>URI parameters</h2>
12
- <table>
13
- <tr><td valign="top"><tt>grid5000-resource</tt>:</td><td>the URI of the grid5000 resource.
14
-
15
- </td></tr>
16
- </table>
17
- <h2>Query parameters</h2>
18
- <table>
19
- <tr><td valign="top"><tt>version</tt>:</td><td>the requested version. It can be a version id (40 characters), or a UNIX
20
- timestamp [default=empty (most recent version is used)].
21
-
22
- </td></tr>
23
- <tr><td valign="top"><tt>depth</tt>:</td><td>the number of nested sub-resources to resolve [default=1].
24
-
25
- </td></tr>
26
- <tr><td valign="top"><tt>resolve</tt>:</td><td>a list of comma separated sub-resources names to resolve (to be used with
27
- the <tt>depth</tt> parameter) [default=all].
28
-
29
- </td></tr>
30
- </table>
31
- <h2>Content-Types</h2>
32
- <table>
33
- <tr><td valign="top"><tt>application/json</tt>:</td><td>JSON
34
-
35
- </td></tr>
36
- <tr><td valign="top"><tt>application/xml</tt>:</td><td>XML
37
-
38
- </td></tr>
39
- <tr><td valign="top"><tt>application/zip</tt>:</td><td>the ZIP format will return a zip archive containing the set of directories
40
- and files corresponding to the required data, with all its sub-resources.
41
-
42
- </td></tr>
43
- </table>
44
- <h2>Status codes</h2>
45
- <table>
46
- <tr><td valign="top"><tt>200</tt>:</td><td>OK, the response contains the description of the resource as it was at the
47
- requested version.
48
-
49
- </td></tr>
50
- <tr><td valign="top"><tt>404</tt>:</td><td>the requested grid5000 resource cannot be found, or the requested version
51
- does not exist.
52
-
53
- </td></tr>
54
- <tr><td valign="top"><tt>406</tt>:</td><td>Returns 406 if the requested format is not available.
55
-
56
- </td></tr>
57
- </table>
58
-
59
-
60
-
61
- </li><li>
62
-
63
- <div class="synopsis"><a name="M000001">GET /:grid5000-resource/versions[.:format]<a></div>
64
-
65
-
66
-
67
-
1
+ <div class='docapi-subsection'>
2
+ <div class='docapi-title'>
3
+ <a name='GET-/:grid5000-resource/versions[.:format]'>GET /:grid5000-resource/versions[.:format]
4
+ </a>
5
+ </div>
6
+ <div class='docapi-content'>
68
7
  <p>
69
8
  Get the list of all versions of a particular resource.
70
9
  </p>
71
- <h2>URI parameters</h2>
10
+ <div class="docapi-subtitle">URI parameters</div>
72
11
  <table>
73
12
  <tr><td valign="top"><tt>grid5000-resource</tt>:</td><td>the URI of the grid5000 resource.
74
13
 
@@ -78,13 +17,13 @@ header in your HTTP request.
78
17
 
79
18
  </td></tr>
80
19
  </table>
81
- <h2>Query parameters</h2>
20
+ <div class="docapi-subtitle">Query parameters</div>
82
21
  <table>
83
22
  <tr><td valign="top"><tt>limit</tt>:</td><td>maximum number of versions to return.
84
23
 
85
24
  </td></tr>
86
25
  </table>
87
- <h2>Content-Types</h2>
26
+ <div class="docapi-subtitle">Content-Types</div>
88
27
  <table>
89
28
  <tr><td valign="top"><tt>application/json</tt>:</td><td>JSON
90
29
 
@@ -93,7 +32,7 @@ header in your HTTP request.
93
32
 
94
33
  </td></tr>
95
34
  </table>
96
- <h2>Status codes</h2>
35
+ <div class="docapi-subtitle">Status codes</div>
97
36
  <table>
98
37
  <tr><td valign="top"><tt>200</tt>:</td><td>OK, the response contains the list of the versions of the requested
99
38
  grid5000 resource.
@@ -106,7 +45,7 @@ grid5000 resource.
106
45
 
107
46
  </td></tr>
108
47
  </table>
109
- <h2>Usage</h2>
48
+ <div class="docapi-subtitle">Usage</div>
110
49
  <p>
111
50
  Get the 2 latest versions of the Rennes site:
112
51
  </p>
@@ -137,50 +76,107 @@ Get the 2 latest versions of the Rennes site:
137
76
  ]
138
77
  </code></pre>
139
78
 
79
+ </div>
80
+ </div>
81
+ <div class='docapi-subsection'>
82
+ <div class='docapi-title'>
83
+ <a name='GET-/:grid5000-resource/versions/:version[.:format]'>GET /:grid5000-resource/versions/:version[.:format]
84
+ </a>
85
+ </div>
86
+ <div class='docapi-content'>
87
+ <p>
88
+ Get info about a specific version.
89
+ </p>
90
+ <div class="docapi-subtitle">URI parameters</div>
91
+ <table>
92
+ <tr><td valign="top"><tt>grid5000-resource</tt>:</td><td>the URI of the grid5000 resource.
140
93
 
94
+ </td></tr>
95
+ <tr><td valign="top"><tt>version</tt>:</td><td>the version id (40 characters long) or a UNIX timestamp.
141
96
 
142
- </li><li>
97
+ </td></tr>
98
+ </table>
99
+ <div class="docapi-subtitle">Content-Types</div>
100
+ <table>
101
+ <tr><td valign="top"><tt>application/json</tt>:</td><td>JSON
143
102
 
144
- <div class="synopsis"><a name="M000002">GET /:grid5000-resource/versions/:version[.:format]<a></div>
103
+ </td></tr>
104
+ <tr><td valign="top"><tt>application/xml</tt>:</td><td>XML
145
105
 
106
+ </td></tr>
107
+ </table>
108
+ <div class="docapi-subtitle">Status codes</div>
109
+ <table>
110
+ <tr><td valign="top"><tt>200</tt>:</td><td>OK.
146
111
 
112
+ </td></tr>
113
+ <tr><td valign="top"><tt>404</tt>:</td><td>the requested grid5000 resource cannot be found, or the requested version
114
+ does not exist.
115
+
116
+ </td></tr>
117
+ <tr><td valign="top"><tt>406</tt>:</td><td>the requested format is not available.
147
118
 
119
+ </td></tr>
120
+ </table>
148
121
 
122
+ </div>
123
+ </div>
124
+ <div class='docapi-subsection'>
125
+ <div class='docapi-title'>
126
+ <a name='GET-/:grid5000-resource[.:format]'>GET /:grid5000-resource[.:format]
127
+ </a>
128
+ </div>
129
+ <div class='docapi-content'>
149
130
  <p>
150
- Get info about a specific version.
131
+ Get a specific version of a Grid5000 resource.
151
132
  </p>
152
- <h2>URI parameters</h2>
133
+ <div class="docapi-subtitle">URI parameters</div>
153
134
  <table>
154
135
  <tr><td valign="top"><tt>grid5000-resource</tt>:</td><td>the URI of the grid5000 resource.
155
136
 
156
137
  </td></tr>
157
- <tr><td valign="top"><tt>version</tt>:</td><td>the version id (40 characters long) or a UNIX timestamp.
138
+ </table>
139
+ <div class="docapi-subtitle">Query parameters</div>
140
+ <table>
141
+ <tr><td valign="top"><tt>version</tt>:</td><td>the requested version. It can be a version id (40 characters), or a UNIX
142
+ timestamp [default=empty (most recent version is used)].
143
+
144
+ </td></tr>
145
+ <tr><td valign="top"><tt>depth</tt>:</td><td>the number of nested sub-resources to resolve [default=1].
146
+
147
+ </td></tr>
148
+ <tr><td valign="top"><tt>resolve</tt>:</td><td>a list of comma separated sub-resources names to resolve (to be used with
149
+ the <tt>depth</tt> parameter) [default=all].
158
150
 
159
151
  </td></tr>
160
152
  </table>
161
- <h2>Content-Types</h2>
153
+ <div class="docapi-subtitle">Content-Types</div>
162
154
  <table>
163
155
  <tr><td valign="top"><tt>application/json</tt>:</td><td>JSON
164
156
 
165
157
  </td></tr>
166
158
  <tr><td valign="top"><tt>application/xml</tt>:</td><td>XML
167
159
 
160
+ </td></tr>
161
+ <tr><td valign="top"><tt>application/zip</tt>:</td><td>the ZIP format will return a zip archive containing the set of directories
162
+ and files corresponding to the required data, with all its sub-resources.
163
+
168
164
  </td></tr>
169
165
  </table>
170
- <h2>Status codes</h2>
166
+ <div class="docapi-subtitle">Status codes</div>
171
167
  <table>
172
- <tr><td valign="top"><tt>200</tt>:</td><td>OK.
168
+ <tr><td valign="top"><tt>200</tt>:</td><td>OK, the response contains the description of the resource as it was at the
169
+ requested version.
173
170
 
174
171
  </td></tr>
175
172
  <tr><td valign="top"><tt>404</tt>:</td><td>the requested grid5000 resource cannot be found, or the requested version
176
173
  does not exist.
177
174
 
178
175
  </td></tr>
179
- <tr><td valign="top"><tt>406</tt>:</td><td>the requested format is not available.
176
+ <tr><td valign="top"><tt>406</tt>:</td><td>Returns 406 if the requested format is not available.
180
177
 
181
178
  </td></tr>
182
179
  </table>
183
180
 
184
-
185
-
186
- </li></ol>
181
+ </div>
182
+ </div>
@@ -1,9 +1,11 @@
1
1
  =begin markdown
2
2
  Comment `code` is good.
3
3
  =end
4
- def x
4
+
5
+ def method
5
6
  return "whatever"
6
7
  end
8
+
7
9
  =begin markdown
8
10
  Comment
9
11
  =end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Rohr
@@ -9,10 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-04 00:00:00 +01:00
12
+ date: 2010-03-15 00:00:00 +01:00
13
13
  default_executable: docapi
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rdoc
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.0
24
+ version:
16
25
  description: RDoc template for generating API documentation.
17
26
  email: cyril.rohr@gmail.com
18
27
  executables:
@@ -52,6 +61,8 @@ files:
52
61
  - files/stylesheets/documentation/highlighter/zenburn.css
53
62
  - files/stylesheets/documentation/layout.css
54
63
  - lib/docapi.rb
64
+ - lib/rdoc/generator/docapi.rb
65
+ - test/Rakefile
55
66
  - test/code/reference_api.rb
56
67
  - test/doc/1-README.md
57
68
  - test/doc/2-documentation/documentation.html