1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 ruby_classes = [ BasicObject, Object, Kernel, Module, Class, String, Array, Hash, Numeric, Integer, Fixnum, Float, Bignum, Range,
4 Regexp]#, MatchData, Struct, Struct::Tms, Symbol, IO, File, File::Stat, Dir, Time, Proc, Method, UnboundMethod, Binding, Encoding, Exception, Thread, ThreadGroup, Fiber, Mutex, Process::Status, TrueClass, FalseClass, NilClass ]
5 #Enumerator, Complex, Rational,
6 #ruby_modules = %w(Comparable Enumerable Errno FileTest GC Marshal Math ObjectSpace Process Process::GID Process::Sys Process::UID Signal)
7
8 class_output = ""
9 mod_output = ""
10
11 ruby_classes.each do |klass|
12 begin
13 superklass = klass.superclass
14 mods = klass.included_modules.delete_if{ |m| m == Kernel unless klass == Object }
15 meths = klass.instance_methods(false).join(",").gsub(/(([\w?!=\+\-\>@]+\,){3})/,'\1\n').gsub(/[<>|]/){ |m| '\\' + m }
16
17 class_output << %Q{ #{klass} [label="#{klass}\\nclass|#{meths}"]\n} << %Q{ #{superklass} -> #{klass}\n}
18
19 mods.each do |m|
20 mod_output << %Q{ #{m} -> #{klass}[color=red]\n}
21 end
22 rescue Exception => e
23 end
24 end
25 class_output.gsub!(/\s(\w+)::(\w+)/,'\1\2')
26 mod_output.gsub!(/\s(\w+)::(\w+)/,'\1\2')
27
28 File.open("/Users/keyes/Desktop/ruby_class.dot", "w+") do |f|
29 f.puts <<-"DOT"
30 digraph RubyClass {
31 rankdir=TB
32 node[shape=Mrecord, height=1.2, width=2, style=bold]
33 #{class_output}
34 node[shape=record, style=filled]
35 #{mod_output}
36 }
37 DOT
38 end
No comments:
Post a Comment