1 # $Id: transformer.rb,v 1.5 2011/11/23 15:55:30 machan Exp $
2
3 require 'tmdoc/tmstd'
4 require 'tmdoc/constant'
5 require 'tmdoc/model/object'
6 require 'tmdoc/model/document'
7 require 'tmdoc/transformer/object-into-document/module'
8 require 'tmdoc/transformer/object-into-document/source'
9 require 'tmdoc/transformer/object-into-document/node'
10 require 'tmdoc/transformer/object-into-document/link'
11 require 'tmdoc/transformer/object-into-document/path'
12
13
14 module TmDoc
15
16 module Transformer::ObjectIntoDocument
17
18 module_function
19
20 def transform(
21 mo_store,
22 env,
23 show_module_siblings,
24 show_class_siblings,
25 show_code,
26 sort_by_name
27 )
28 ASSERT.kind_of mo_store, MO::Store
29 ASSERT.kind_of env, ENV::Environment
30 ASSERT.boolean show_module_siblings
31 ASSERT.boolean show_class_siblings
32 ASSERT.boolean show_code
33 ASSERT.boolean sort_by_name
34
35 mo_files = mo_store.files
36 mo_toplevel_module = mo_store.a_toplevel_module
37 mo_unknown_module = mo_store.an_unknown_module
38 mo_builtin_module = mo_store.a_builtin_module
39 mo_object_class = mo_store.an_object_class
40
41 md_overview = transform_overview(
42 mo_toplevel_module, mo_object_class, mo_files
43 )
44
45 md_unknown_modules = Module.transform_modules(
46 mo_unknown_module,
47 env,
48 mo_toplevel_module, mo_object_class,
49 'Unknown Modules',
50 show_module_siblings,
51 show_class_siblings,
52 sort_by_name
53 )
54
55 md_builtin_modules = Module.transform_modules(
56 mo_builtin_module,
57 env,
58 mo_toplevel_module, mo_object_class,
59 'Built-in Modules',
60 show_module_siblings,
61 show_class_siblings,
62 sort_by_name
63 )
64
65 md_user_modules = Module.transform_modules(
66 mo_toplevel_module,
67 env,
68 mo_toplevel_module, mo_object_class,
69 'User Modules',
70 show_module_siblings,
71 show_class_siblings,
72 sort_by_name
73 ) {
74 |mo_module|
75 ASSERT.kind_of mo_module, MOLA::GenericModule
76
77 ! mo_module.kind_of?(MOLA::RootModule)
78 }
79
80 md_sources =
81 if show_code
82 Source.transform_sources(
83 mo_files,
84 mo_toplevel_module, mo_object_class
85 )
86 else
87 nil
88 end
89
90 MD::Store.new(
91 md_overview,
92 md_unknown_modules,
93 md_builtin_modules,
94 md_user_modules,
95 md_sources
96 )
97 end
98
99
100 def transform_overview(mo_toplevel_module, mo_object_class, mo_files)
101 ASSERT.kind_of mo_toplevel_module, MOLN::ToplevelModule
102 ASSERT.kind_of mo_object_class, MOLN::Object
103 ASSERT.kind_of mo_files, MOP::Files
104
105 LOG::Progress.log "\tOverview"
106
107 md_toplevel_module_node =
108 unless mo_toplevel_module.suppressable?
109 LOG::Progress.log "\t\tModule Structure"
110
111 Node.transform_module_structure_node mo_toplevel_module
112 else
113 nil
114 end
115
116 md_object_class_node =
117 unless mo_object_class.suppressable?
118 LOG::Progress.log "\t\tClass Hierarchy"
119
120 Node.transform_class_hierarchy_node mo_object_class
121 else
122 nil
123 end
124
125 md_source_structure =
126 unless mo_files.empty?
127 LOG::Progress.log "\t\tSource Structure"
128
129 md_array_of_file = mo_files.sort.map { |mo_file|
130 ASSERT.kind_of mo_file, MOP::File
131
132 MDN::File.new Link.transform_link_to_file(mo_file)
133 }
134
135 md_set_of_file = MDN::SeqOfFile.new md_array_of_file
136
137 MDN::SourceStructure.new md_set_of_file
138 else
139 nil
140 end
141
142 if [
143 md_toplevel_module_node,
144 md_object_class_node,
145 md_source_structure
146 ].all? { |md_node| md_node.nil? }
147 return nil
148 end
149
150 MDO::Overview.new(
151 md_toplevel_module_node,
152 md_object_class_node,
153 md_source_structure
154 )
155 end
156 end
157
158 end