Friday, September 12, 2008

Html Generator for Ruby 1.9 Classes

Ruby1.9のクラスリストを表示するHTMLファイルを生成するスクリプトを作った


   1  #!/usr/local/bin/ruby

   2  # encoding: utf-8

   3  require "erb"

   4  

   5  def get_klasses(obj)

   6    klasses = obj.constants.sort.map{ |c| eval(c.to_s) }.select{ |c| c.class.to_s =~ /^(Class|Module)$/ }

   7    normal_class, module_class, error_class = [],[],[]

   8    klasses.each do |klass|

   9      case

  10      when klass.to_s =~ /Error/

  11        error_class << klass

  12      when klass.class == Module

  13        module_class << klass

  14      else

  15        normal_class << klass

  16      end

  17    end  

  18    return normal_class, module_class, error_class

  19  end

  20  

  21  def get_methods(klass)

  22    result = []

  23    meths = %w(public_methods protected_methods private_methods

  24               public_instance_methods protected_instance_methods

  25               private_instance_methods singleton_methods)

  26    begin

  27      meths.each do |m|

  28        meth = klass.send(m,false)

  29        result << {m => meth.sort} unless meth.empty?

  30      end

  31    rescue Exception => e

  32      

  33    end

  34    result

  35  end

  36  

  37  klasses, modules, errors = get_klasses(Object)

  38  all_klasses = klasses + modules + errors

  39  

  40  file_name = "/Users/keyes/Desktop/ruby_class.html"

  41  File.open(file_name, "w+") do |f|

  42    f.puts ERB.new(DATA.read).result(binding)

  43  end

  44  

  45  __END__

  46  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

  47    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  48  <html>

  49  <head>

  50  <meta http-equiv="Content-type" content="text/html; charset=utf-8">

  51  <title>Ruby 1.9 Class List</title>

  52  <style type="text/css" media="screen">

  53    h1 {color:#eed; background:#149; padding-left:10px;}

  54    h3 {color:#833;}

  55    p.list {padding-left:15px;}

  56    div#meths {padding-left:15px;}

  57    span#top_link {font-size:18px; float:right; margin:8px 20px;}

  58    a:link {color:;}

  59  </style>

  60  </head>

  61  <body id="main" style='background:#eed'>

  62    <p class='list'>

  63      <% klasses.each do |klass| %>

  64      <span><a href="#<%= klass %>"><%= klass %></a></span>

  65      <% end %>

  66    </p>

  67    <p class='list'>

  68      <% modules.each do |mod| %>

  69      <span><a href="#<%= mod %>"><%= mod %></a></span>

  70      <% end %>

  71    </p>

  72    <p class='list'>

  73      <% errors.each do |error| %>

  74      <span><a href="#<%= error %>"><%= error %></a></span>

  75      <% end %>

  76    </p>

  77  <% all_klasses.each do |klass|  %>

  78    <h1 id="<%= klass %>"><%= klass %>:<%= klass.class %><span id="top_link"><a href=<%= File.basename(file_name) %> style="color:#883">top</a></span></h1>

  79    <div id='meths'>

  80  <% meths = get_methods(klass) %>

  81  <% meths.each do |method| %>

  82    <% method.each do |title, meths| %>

  83      <h3><%= title %></h3>

  84      <% meths.each do |meth| %>

  85      <span><a href="http://www.ruby-lang.org/ja/man/html/<%= klass %>.html#<%= meth %>"><%= meth  %></a> </span>

  86      <% end %>

  87    <% end %>

  88  <% end %>

  89  </div>

  90  <% end %>

  91  </body>

  92  </html>

No comments: