source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/rdoc/ri/ri_reader.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 2.2 KB
Line 
1require 'rdoc/ri/ri_descriptions'
2require 'rdoc/ri/ri_writer'
3require 'rdoc/markup/simple_markup/to_flow'
4
5module RI
6 class RiReader
7
8 def initialize(ri_cache)
9 @cache = ri_cache
10 end
11
12 def top_level_namespace
13 [ @cache.toplevel ]
14 end
15
16 def lookup_namespace_in(target, namespaces)
17 result = []
18 for n in namespaces
19 result.concat(n.contained_modules_matching(target))
20 end
21 result
22 end
23
24 def find_class_by_name(full_name)
25 names = full_name.split(/::/)
26 ns = @cache.toplevel
27 for name in names
28 ns = ns.contained_class_named(name)
29 return nil if ns.nil?
30 end
31 get_class(ns)
32 end
33
34 def find_methods(name, is_class_method, namespaces)
35 result = []
36 namespaces.each do |ns|
37 result.concat ns.methods_matching(name, is_class_method)
38 end
39 result
40 end
41
42 # return the MethodDescription for a given MethodEntry
43 # by deserializing the YAML
44 def get_method(method_entry)
45 path = method_entry.path_name
46 File.open(path) { |f| RI::Description.deserialize(f) }
47 end
48
49 # Return a class description
50 def get_class(class_entry)
51 result = nil
52 for path in class_entry.path_names
53 path = RiWriter.class_desc_path(path, class_entry)
54 desc = File.open(path) {|f| RI::Description.deserialize(f) }
55 if result
56 result.merge_in(desc)
57 else
58 result = desc
59 end
60 end
61 result
62 end
63
64 # return the names of all classes and modules
65 def full_class_names
66 res = []
67 find_classes_in(res, @cache.toplevel)
68 end
69
70 # return a list of all classes, modules, and methods
71 def all_names
72 res = []
73 find_names_in(res, @cache.toplevel)
74 end
75
76 # ----
77 private
78 # ----
79
80 def find_classes_in(res, klass)
81 classes = klass.classes_and_modules
82 for c in classes
83 res << c.full_name
84 find_classes_in(res, c)
85 end
86 res
87 end
88
89 def find_names_in(res, klass)
90 classes = klass.classes_and_modules
91 for c in classes
92 res << c.full_name
93 res.concat c.all_method_names
94 find_names_in(res, c)
95 end
96 res
97 end
98
99 end
100end
Note: See TracBrowser for help on using the repository browser.