rdot 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. data/.yardopts +9 -0
  2. data/README.md +152 -0
  3. data/bin/rdot +531 -0
  4. data/lib/rdot.rb +762 -0
  5. metadata +67 -0
@@ -0,0 +1,9 @@
1
+ --no-cache
2
+ --hide-void-return
3
+ --private
4
+ --no-private
5
+ --plugin yard-is-monkey
6
+ --title 'RDot: GraphViz class diagrams for Ruby'
7
+ lib/**/*.rb
8
+ - *.md
9
+
@@ -0,0 +1,152 @@
1
+ # RDot — GraphViz diagrams for Ruby classes
2
+
3
+ [![endorse](https://api.coderwall.com/shikhalev/endorsecount.png)](https://coderwall.com/shikhalev)
4
+
5
+ ## About
6
+
7
+ <img src="https://raw.github.com/shikhalev/rdot/master/share/img/rdot.png" align="right" />
8
+
9
+ * Author: [Ivan Shikhalev](https://github.com/shikhalev)
10
+ * License: [GNU GPL](http://www.gnu.org/copyleft/gpl.html)
11
+ * [Project](https://github.com/shikhalev/rdot) @ [GitHub.com](https://github.com/)
12
+ * [Gem](https://rubygems.org/gems/rdot) @ [RubyGems.org](https://rubygems.org)
13
+ * [Documentation](http://rubydoc.info/github/shikhalev/rdot/frames/)
14
+ @ [RubyDoc.info](http://rubydoc.info/)
15
+
16
+ ### Versions
17
+
18
+ * For Ruby 1.9.2 and later:
19
+ * 1.1.x — testing
20
+ * [1.0.x — stable](https://github.com/shikhalev/rdot/tree/fixes)
21
+ * 0.10.x (0.10.10.3 latest) — pre-1.0
22
+ * For Ruby 1.8.7:
23
+ * [0.9.x (0.9.4 latest)](https://github.com/shikhalev/rdot/tree/v0.9.4)
24
+
25
+ ## Command-line help
26
+ Usage: rdot [options] <libs>
27
+
28
+ Note:
29
+ -- Stop options parsing, rest of line treated
30
+ as <libs>.
31
+ If it's a FIRST argument, the 'optparse'
32
+ should not be loaded (include config
33
+ files), no options will be parsed, all
34
+ values will be default. And we can make
35
+ graph of 'optparse'.
36
+ Config files:
37
+ /etc/rdotopts
38
+ ~/.config/rdotopts
39
+ ./.rdotopts
40
+
41
+ Service options:
42
+ -h, --help Show short help and exit.
43
+ -?, --usage Show usage info and exit.
44
+ -B, --about Show about string and exit.
45
+ -A, --author Show author and contact info and exit.
46
+ -L, --license Show info about license and exit.
47
+ -V, --version Show version number and exit.
48
+ -I, --info=[info] Show some information and exit.
49
+ Argument may be comma-separated set of:
50
+ about, author, license, usage, version;
51
+ or one of presets:
52
+ help = about + usage,
53
+ info (or no argument) =
54
+ about + author + license,
55
+ all = about + author + license + usage.
56
+
57
+ -o, --output=[file] File for output instead STDOUT.
58
+ 'rdot.dot' if empty.
59
+ --stdout Reset output to STDOUT.
60
+
61
+ Data options:
62
+ -p, --preload=libs Comma-separated list of preloading
63
+ libraries which must be hidden.
64
+ -i, --load, --input=libs Comma-separated list of libraries
65
+ which must be loaded and visualized.
66
+ -l, --libs, --search-path=paths Comma-separated list of paths where search
67
+ for libs by load and preload.
68
+
69
+ -e, --[no-]exclude-classes=list Comma-separated list of classes which
70
+ should be ignored with their descendants.
71
+ -xlist, Comma-separated list of modules which
72
+ --[no-]exclude-namespaces should be ignored with their namespace.
73
+ RDot, Gem, Errno & OptionParser by default,
74
+ use '--no-exclude-namespaces' to reset.
75
+ --[no-]exclude-files=list Comma-separated list of files & wildcards
76
+ their methods should by ingnored.
77
+ Currect RDot location excluding by default,
78
+ use '--no-exclude-files' to reset.
79
+ -c, --[no-]filter-classes=list Comma separated list of classes which only
80
+ should be visualized (with descendants).
81
+ -nlist, Comma-separated list of modules which only
82
+ --[no-]filter-namespaces should be visualized (with nested).
83
+ --[no-]filter-global Filter classes and modules only in global
84
+ namespace.
85
+ --[no-]filter-files=list Comma-separated list of files & wildcards
86
+ their methods only should by processed.
87
+
88
+ Diagram options:
89
+ -C, --[no-]hide-constants Ignore constants in classes & modules.
90
+ -M, --[no-]hide-methods Ignore methods & attributes.
91
+ -G, --[no-]hide-arguments Don't show methods' arguments.
92
+ -X, --[no-]hide-included Don't show 'include' links.
93
+ -E, --[no-]hide-extended Don't show 'extend' links.
94
+ -N, --[no-]hide-nested Don't show nesting links
95
+
96
+ -S, --[no-]show-private Show private & protected methods.
97
+ -s, --[no-]show-protected Show protected methods.
98
+ -P, --[no-]show-preloaded Show preloaded classes & modules.
99
+
100
+ --[no-]select-attributes Show attributes with access rights
101
+ instead getters & setters as methods.
102
+ True by default.
103
+
104
+ Graph options:
105
+ -T, --title=title Graph title.
106
+ 'RDot Graph' by default.
107
+
108
+ --title-font=name Font name for the graph title.
109
+ 'sans-serif' by default.
110
+ --title-size=size Font size for the graph title (pt).
111
+ 24 by default.
112
+ --font=name Font name for main text.
113
+ 'monospace' by default.
114
+ --font-size=size Font size for main text (pt).
115
+ 9 by default.
116
+ Colors:
117
+ May be RGB value or name from X11 scheme,
118
+ see http://graphviz.org/content/color-names#x11.
119
+ --color-class=color Background color of class title.
120
+ #BBFFBB by default.
121
+ --color-class-preloaded=color
122
+ Background color of preloaded class title.
123
+ #CCEECC by default.
124
+ --color-class-core=color Background color of core class title.
125
+ #DDFF99 by default.
126
+ --color-exception=color Background color of exception title.
127
+ #FFBBBB by default.
128
+ --color-exception-preloaded=color
129
+ Background color of preloaded exception
130
+ title.
131
+ #EECCCC by default.
132
+ --color-exception-core=color Background color of core exception title.
133
+ #FFDD99 by default.
134
+ --color-module=color Background color of module title.
135
+ #BBBBFF by default.
136
+ --color-module-preloaded=color
137
+ Background color of preloaded module title.
138
+ #CCCCEE by default.
139
+ --color-module-core=color Background color of core module title.
140
+ #DDDDFF by default.
141
+ --color-protected=color Background color for protected methods.
142
+ #EEEEEE by default.
143
+ --color-private=color Background color for private methods.
144
+ #DDDDDD by default.
145
+ --color-inherited=color Color for inheritance links.
146
+ #0000FF by default.
147
+ --color-included=color Color for 'include' links.
148
+ #00AAFF by default.
149
+ --color-extended=color Color for 'extend' links.
150
+ #AA00FF by default.
151
+ --color-nested=color Color for nesting links.
152
+ #EEEEEE by default.
@@ -0,0 +1,531 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ require 'is/monkey/sandbox'
5
+ require 'rdot'
6
+
7
+ options = {
8
+ :output => $stdout,
9
+ :preload => [],
10
+ :load => [],
11
+ :exclude_classes => [],
12
+ :exclude_namespaces => [RDot, Gem, Errno],
13
+ :exclude_files => [RDot.method(:dot).source_location[0], __FILE__],
14
+ :select_attributes => true
15
+ }
16
+
17
+ def hi str
18
+ if $stdout.stat.chardev?
19
+ "\e[1m#{str}\e[0m"
20
+ else
21
+ str
22
+ end
23
+ end
24
+
25
+ title = <<-TXT
26
+ #{hi("RDot v#{RDot::VERSION}:")} GraphViz class diagrams for Ruby
27
+ http://github.com/shikhalev/rdot
28
+ TXT
29
+
30
+ usage = <<-TXT
31
+ #{hi('Usage:')} rdot [options] <libs>
32
+ TXT
33
+
34
+ author = <<-TXT
35
+ #{hi('Author:')} Ivan Shikhalev <shikhalev@gmail.com>
36
+ http://github.com/shikhalev
37
+ TXT
38
+
39
+ license = <<-TXT
40
+ #{hi('License:')} GNU GPL (General Public License)
41
+ http://gnu.org/licenses/gpl.html
42
+ TXT
43
+
44
+ if ARGV[0] == '--'
45
+
46
+ ARGV.shift
47
+ options[:load] += ARGV
48
+
49
+ else
50
+
51
+ require 'optparse'
52
+
53
+ options[:exclude_namespaces] << OptionParser
54
+
55
+ opts = OptionParser.new(usage) do |o|
56
+
57
+ o.separator ''
58
+ o.separator hi('Note:')
59
+ o.separator ' -- ' +
60
+ 'Stop options parsing, rest of line treated'
61
+ o.separator ' ' +
62
+ ' as <libs>.'
63
+ o.separator ' ' +
64
+ 'If it\'s a FIRST argument, the \'optparse\''
65
+ o.separator ' ' +
66
+ ' should not be loaded (include config'
67
+ o.separator ' ' +
68
+ ' files), no options will be parsed, all'
69
+ o.separator ' ' +
70
+ ' values will be default. And we can make'
71
+ o.separator ' ' +
72
+ ' graph of \'optparse\'.'
73
+ o.separator hi('Config files:')
74
+ o.separator ' /etc/rdotopts'
75
+ o.separator ' ~/.config/rdotopts'
76
+ o.separator ' ./.rdotopts'
77
+
78
+ o.separator ''
79
+ o.separator hi('Service options:')
80
+
81
+ o.on '-h', '--help', 'Show short help and exit.' do
82
+ puts title
83
+ puts
84
+ puts opts.help
85
+ exit 0
86
+ end
87
+
88
+ o.on '-?', '--usage', 'Show usage info and exit.' do
89
+ puts opts.help
90
+ exit 0
91
+ end
92
+
93
+ o.on '-B', '--about', 'Show about string and exit.' do
94
+ puts title
95
+ exit 0
96
+ end
97
+
98
+ o.on '-A', '--author', 'Show author and contact info and exit.' do
99
+ puts author
100
+ exit 0
101
+ end
102
+
103
+ o.on '-L', '--license', 'Show info about license and exit.' do
104
+ puts license
105
+ exit 0
106
+ end
107
+
108
+ o.on '-V', '--version', 'Show version number and exit.' do
109
+ puts RDot::VERSION
110
+ exit 0
111
+ end
112
+
113
+ o.on '-I', '--info', '=[info]', Array,
114
+ 'Show some information and exit.',
115
+ 'Argument may be comma-separated set of:',
116
+ ' about, author, license, usage, version;',
117
+ 'or one of presets:',
118
+ ' help = about + usage,',
119
+ ' info (or no argument) =',
120
+ ' about + author + license,',
121
+ ' all = about + author + license + usage.' do |value|
122
+ if value == nil || value == []
123
+ value = ['info']
124
+ end
125
+ case value[0]
126
+ when 'help'
127
+ value = ['about', 'usage']
128
+ when 'info'
129
+ value = ['about', 'author', 'license']
130
+ when 'all'
131
+ value = ['about', 'author', 'license', 'usage']
132
+ when 'version'
133
+ puts RDot::VERSION
134
+ exit 0
135
+ end
136
+ if value.include? 'about'
137
+ puts title
138
+ if value.include?('author') || value.include?('license') ||
139
+ value.include?('usage')
140
+ puts
141
+ end
142
+ end
143
+ if value.include? 'author'
144
+ puts author
145
+ if value.include?('usage') && ! value.include?('license')
146
+ puts
147
+ end
148
+ end
149
+ if value.include? 'license'
150
+ puts license
151
+ if value.include?('usage')
152
+ puts
153
+ end
154
+ end
155
+ if value.include? 'usage'
156
+ puts opts.help
157
+ end
158
+ exit 0
159
+ end
160
+
161
+ o.separator ''
162
+
163
+ o.on '-o', '--output', '=[file]', String,
164
+ 'File for output instead STDOUT.',
165
+ ' \'rdot.dot\' if empty.' do |value|
166
+ if value == nil
167
+ value = 'rdot.dot'
168
+ end
169
+ options[:output] = File.open value, 'w'
170
+ end
171
+
172
+ o.on '--stdout', 'Reset output to STDOUT.'
173
+
174
+ o.separator ''
175
+ o.separator hi('Data options:')
176
+
177
+ o.on '-p', '--preload', '=libs', Array,
178
+ 'Comma-separated list of preloading',
179
+ ' libraries which must be hidden.' do |value|
180
+ options[:preload] += value
181
+ end
182
+
183
+ o.on '-i', '--load', '--input', '=libs', Array,
184
+ 'Comma-separated list of libraries',
185
+ ' which must be loaded and visualized.' do |value|
186
+ options[:load] += value
187
+ end
188
+
189
+ o.on '-l', '--libs', '--search-path', '=paths', Array,
190
+ 'Comma-separated list of paths where search',
191
+ ' for libs by load and preload.' do |value|
192
+ $:.push *(value.map { |d| File.expand_path(d) })
193
+ end
194
+
195
+ o.separator ''
196
+
197
+ o.on '-e', '--[no-]exclude-classes', '=list', Array,
198
+ 'Comma-separated list of classes which',
199
+ ' should be ignored with their descendants.' do |value|
200
+ if ! value
201
+ options[:exclude_classes] = []
202
+ else
203
+ value.each do |v|
204
+ c = sandbox { eval v }
205
+ if Class === c
206
+ options[:exclude_classes] << c
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+ o.on '-x', '--[no-]exclude-namespaces', '=list', Array,
213
+ 'Comma-separated list of modules which',
214
+ ' should be ignored with their namespace.',
215
+ 'RDot, Gem, Errno & OptionParser by default,',
216
+ ' use \'--no-exclude-namespaces\' to reset.' do |value|
217
+ if ! value
218
+ options[:exclude_namespaces] = []
219
+ else
220
+ value.each do |v|
221
+ m = sandbox { eval v }
222
+ if Module === m
223
+ options[:exclude_namespaces] << m
224
+ end
225
+ end
226
+ end
227
+ end
228
+
229
+ o.on '--[no-]exclude-files', '=list', Array,
230
+ 'Comma-separated list of files & wildcards',
231
+ ' their methods should by ingnored.',
232
+ 'Currect RDot location excluding by default,',
233
+ ' use \'--no-exclude-files\' to reset.' do |value|
234
+ if ! value
235
+ options[:exclude_files] = []
236
+ else
237
+ value.each do |v|
238
+ options[:exclude_files] += Dir[v]
239
+ end
240
+ end
241
+ end
242
+
243
+ o.on '-c', '--[no-]filter-classes', '=list', Array,
244
+ 'Comma separated list of classes which only',
245
+ ' should be visualized (with descendants).' do |value|
246
+ if ! value
247
+ options.delete :filter_classes
248
+ else
249
+ options[:filter_classes] ||= []
250
+ value.each do |v|
251
+ c = sandbox { eval v }
252
+ if Class === c
253
+ options[:filter_classes] << c
254
+ end
255
+ end
256
+ end
257
+ end
258
+
259
+ o.on '-n', '--[no-]filter-namespaces', '=list', Array,
260
+ 'Comma-separated list of modules which only',
261
+ ' should be visualized (with nested).' do |value|
262
+ if ! value
263
+ options.delete :filter_namespaces
264
+ else
265
+ options[:filter_namespaces] ||= []
266
+ value.each do |v|
267
+ m = sandbox { eval v }
268
+ if Module === m
269
+ options[:filter_namespaces] << m
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+ o.on '--[no-]filter-global', TrueClass,
276
+ 'Filter classes and modules only in global',
277
+ ' namespace.' do |value|
278
+ options[:filter_global] = value
279
+ end
280
+
281
+ o.on '--[no-]filter-files', '=list', Array,
282
+ 'Comma-separated list of files & wildcards',
283
+ ' their methods only should by processed.' do |value|
284
+ if ! value
285
+ options.delete :filter_files
286
+ else
287
+ options[:filter_files] ||= []
288
+ value.each do |v|
289
+ options[:filter_files] += Dir[v]
290
+ end
291
+ end
292
+ end
293
+
294
+ o.separator ''
295
+ o.separator hi('Diagram options:')
296
+
297
+ o.on '-C', '--[no-]hide-constants', TrueClass,
298
+ 'Ignore constants in classes & modules.' do |value|
299
+ options[:hide_constants] = value
300
+ end
301
+
302
+ o.on '-M', '--[no-]hide-methods', TrueClass,
303
+ 'Ignore methods & attributes.' do |value|
304
+ options[:hide_methods] = value
305
+ end
306
+
307
+ o.on '-G', '--[no-]hide-arguments', TrueClass,
308
+ 'Don\'t show methods\' arguments.' do |value|
309
+ options[:hide_arguments] = value
310
+ end
311
+
312
+ o.on '-X', '--[no-]hide-included', TrueClass,
313
+ 'Don\'t show \'include\' links.' do |value|
314
+ options[:hide_included] = value
315
+ end
316
+
317
+ o.on '-E', '--[no-]hide-extended', TrueClass,
318
+ 'Don\'t show \'extend\' links.' do |value|
319
+ options[:hide_extended] = value
320
+ end
321
+
322
+ o.on '-N', '--[no-]hide-nested', TrueClass,
323
+ 'Don\'t show nesting links' do |value|
324
+ options[:hide_nested] = value
325
+ end
326
+
327
+ o.separator ''
328
+
329
+ o.on '-S', '--[no-]show-private', TrueClass,
330
+ 'Show private & protected methods.' do |value|
331
+ options[:show_private] = value
332
+ if value
333
+ options[:show_protected] = value
334
+ end
335
+ end
336
+
337
+ o.on '-s', '--[no-]show-protected', TrueClass,
338
+ 'Show protected methods.' do |value|
339
+ options[:show_protected] = value
340
+ end
341
+
342
+ o.on '-P', '--[no-]show-preloaded', TrueClass,
343
+ 'Show preloaded classes & modules.' do |value|
344
+ options[:show_preloaded] = value
345
+ end
346
+
347
+ o.separator ''
348
+
349
+ o.on '--[no-]select-attributes', TrueClass,
350
+ 'Show attributes with access rights',
351
+ ' instead getters & setters as methods.',
352
+ 'True by default.' do |value|
353
+ options[:select_attributes] = value
354
+ end
355
+
356
+ o.separator ''
357
+ o.separator hi('Graph options:')
358
+
359
+ o.on '-T', '--title', '=title', String, 'Graph title.',
360
+ " '#{RDot::defaults[:graph_label]}' by default." do |value|
361
+ options[:graph_label] = value
362
+ end
363
+
364
+ o.separator ''
365
+
366
+ o.on '--title-font', '=name', String,
367
+ 'Font name for the graph title.',
368
+ " '#{RDot::defaults[:graph_fontname]}' by default." do |value|
369
+ options[:graph_fontname] = value
370
+ end
371
+
372
+ o.on '--title-size', '=size', Numeric,
373
+ 'Font size for the graph title (pt).',
374
+ " #{RDot::defaults[:graph_fontsize]} by default." do |value|
375
+ options[:graph_fontsize] = value
376
+ end
377
+
378
+ o.on '--font', '=name', String, 'Font name for main text.',
379
+ " '#{RDot::defaults[:node_fontname]}' by default." do |value|
380
+ options[:node_fontname] = value
381
+ end
382
+
383
+ o.on '--font-size', '=size', Numeric, 'Font size for main text (pt).',
384
+ " #{RDot::defaults[:node_fontsize]} by default." do |value|
385
+ options[:node_fontsize] = value
386
+ end
387
+
388
+ o.separator "Colors:\n" +
389
+ ' May by RGB value or name from X11 scheme,' + "\n" +
390
+ ' see http://graphviz.org/content/color-names#x11.'
391
+
392
+ o.on '--color-class', '=color', String, 'Background color of class title.',
393
+ " #{RDot::defaults[:color_class]} by default." do |value|
394
+ options[:color_class] = value
395
+ end
396
+
397
+ o.on '--color-class-preloaded', '=color', String,
398
+ 'Background color of preloaded class title.',
399
+ " #{RDot::defaults[:color_class_preloaded]} by default." do |value|
400
+ options[:color_class_preloaded] = value
401
+ end
402
+
403
+ o.on '--color-class-core', '=color', String,
404
+ 'Background color of core class title.',
405
+ " #{RDot::defaults[:color_class_core]} by default." do |value|
406
+ options[:color_class_core] = value
407
+ end
408
+
409
+ o.on '--color-exception', '=color', String,
410
+ 'Background color of exception title.',
411
+ " #{RDot::defaults[:color_exception]} by default." do |value|
412
+ options[:color_exception] = value
413
+ end
414
+
415
+ o.on '--color-exception-preloaded', '=color', String,
416
+ 'Background color of preloaded exception', ' title.',
417
+ " #{RDot::defaults[:color_exception_preloaded]} by default." do |value|
418
+ options[:color_exception_preloaded] = value
419
+ end
420
+
421
+ o.on '--color-exception-core', '=color', String,
422
+ 'Background color of core exception title.',
423
+ " #{RDot::defaults[:color_exception_core]} by default." do |value|
424
+ options[:color_exception_core] = value
425
+ end
426
+
427
+ o.on '--color-module', '=color', String, 'Background color of module title.',
428
+ " #{RDot::defaults[:color_module]} by default." do |value|
429
+ options[:color_module] = value
430
+ end
431
+
432
+ o.on '--color-module-preloaded', '=color', String,
433
+ 'Background color of preloaded module title.',
434
+ " #{RDot::defaults[:color_module_preloaded]} by default." do |value|
435
+ options[:color_module_preloaded] = value
436
+ end
437
+
438
+ o.on '--color-module-core', '=color', String,
439
+ 'Background color of core module title.',
440
+ " #{RDot::defaults[:color_module_core]} by default." do |value|
441
+ options[:color_module_core] = value
442
+ end
443
+
444
+ o.on '--color-protected', '=color', String,
445
+ 'Background color for protected methods.',
446
+ " #{RDot::defaults[:color_protected]} by default." do |value|
447
+ options[:color_protected] = value
448
+ end
449
+
450
+ o.on '--color-private', '=color', String,
451
+ 'Background color for private methods.',
452
+ " #{RDot::defaults[:color_private]} by default." do |value|
453
+ options[:color_private] = value
454
+ end
455
+
456
+ o.on '--color-inherited', '=color', String,
457
+ 'Color for inheritance links.',
458
+ " #{RDot::defaults[:color_inherited]} by default." do |value|
459
+ options[:color_inherited] = value
460
+ end
461
+
462
+ o.on '--color-included', '=color', String,
463
+ 'Color for \'include\' links.',
464
+ " #{RDot::defaults[:color_included]} by default." do |value|
465
+ options[:color_included] = value
466
+ end
467
+
468
+ o.on '--color-extended', '=color', String,
469
+ 'Color for \'extend\' links.',
470
+ " #{RDot::defaults[:color_extended]} by default." do |value|
471
+ options[:color_extended] = value
472
+ end
473
+
474
+ o.on '--color-nested', '=color', String,
475
+ 'Color for nesting links.',
476
+ " #{RDot::defaults[:color_nested]} by default." do |value|
477
+ options[:color_nested] = value
478
+ end
479
+
480
+ end
481
+
482
+ begin
483
+ [
484
+ '/etc/rdotopts',
485
+ File.expand_path('~/.config/rdotopts'),
486
+ File.expand_path('./.rdotopts')
487
+ ].each do |f|
488
+ if File.exists? f
489
+ opts.load f
490
+ end
491
+ end
492
+ rescue
493
+ raise 'Error while processing options file.'
494
+ end
495
+
496
+ begin
497
+ options[:load] += opts.parse ARGV
498
+ rescue
499
+ raise 'Error while processing command line.'
500
+ end
501
+
502
+ if options[:load].include?('optparse')
503
+ options[:exclude_namespaces].delete OptionParser
504
+ end
505
+
506
+ end
507
+
508
+ if options[:load].include?('rdot')
509
+ options[:exclude_namespaces].delete RDot
510
+ options[:exclude_files].delete RDot.method(:dot).source_location[0]
511
+ end
512
+
513
+ if options[:preload]
514
+ options[:preload].each do |l|
515
+ require l
516
+ end
517
+ end
518
+
519
+ pre = RDot.snapshot options
520
+
521
+ if options[:load]
522
+ options[:load].each do |l|
523
+ require l
524
+ end
525
+ end
526
+
527
+ post = RDot.snapshot options
528
+
529
+ delta = RDot.diff post, pre, options
530
+
531
+ options[:output].puts RDot.dot(delta, options)