wrongdoc.git  about / heads / tags
RDoc done right (IMNSHO)
blob cb0b5a1c36c7f97f5a6bd41b9ac8302c689ee757 1723 bytes (raw)
$ git show HEAD:lib/wrongdoc/rdoc.rb	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
# we won't deal with the non-Darkfish RDoc in older rubies, it has frames :<
if (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby") && \
   RUBY_VERSION.to_f <= 1.8
  require 'rubygems'
end

# we never want the rdoc 2.5.x from Ruby 1.9.2
gem 'rdoc', '~> 3.9.4'
require 'rdoc/rdoc'

class Wrongdoc::Rdoc
  include Wrongdoc::RdocOptions
  include Wrongdoc::ParseXML

  def initialize(opts)
    @rdoc_uri = URI.parse(opts[:rdoc_url])
    @cgit_uri = URI.parse(opts[:cgit_url])
  end

  def run(argv = [])
    rdoc(argv)
    add_atom("doc/ChangeLog.html", cgit_atom_uri)
    add_atom("doc/NEWS.html", news_atom_uri)
    add_atom("doc/README.html", news_atom_uri)

    # the stock RDoc index page layout lacks a vertical sidebar full of links
    rdoc_index = "doc/rdoc_index.html"
    File.exist?(rdoc_index) and File.unlink(rdoc_index)
    File.rename("doc/index.html", rdoc_index)
    File.link("doc/README.html", "doc/index.html")
  end

  def rdoc(argv)
    r = RDoc::RDoc.new
    r.document(rdoc_options.concat(argv))
  end

  def add_atom(path, atom_uri)
    File.open(path, "a+") do |fp|
      doc = parse_xml(fp.read)
      doc.search("title").each { |t|
        t.add_next_sibling(atom_node(doc, atom_uri))
      }
      fp.truncate 0
      fp.write doc.to_xhtml
    end
  end

  def cgit_atom_uri
    uri = @cgit_uri.dup
    uri.path += "/atom/"
    uri.query = "h=master"
    uri
  end

  def news_atom_uri
    uri = @rdoc_uri.dup
    uri.path += "NEWS.atom.xml"
    uri
  end

  def atom_node(doc, uri, title = 'Atom feed')
    link = Nokogiri::XML::Node.new('link', doc)
    link['rel'] = 'alternate'
    link['title'] = title
    link['href'] = uri.to_s
    link['type'] = 'application/atom+xml'
    link
  end
end

git clone https://yhbt.net/wrongdoc.git