wri 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/MANIFEST +60 -0
- data/NOTES +3 -0
- data/README +49 -0
- data/bin/wri +3 -0
- data/lib/wri/fastri_service.rb +387 -0
- data/lib/wri/public/css/style.css +70 -0
- data/lib/wri/public/css/tree_blue/images/collapsable-last.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/collapsable.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/expandable-last.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/expandable.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/leaf-last.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/leaf.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/root.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/spacer.gif +0 -0
- data/lib/wri/public/css/tree_blue/images/spinner.gif +0 -0
- data/lib/wri/public/css/tree_blue/style.css +83 -0
- data/lib/wri/public/css/tree_blue2/images/collapsable-last.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/collapsable.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/expandable-last.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/expandable.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/leaf-last.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/leaf.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/root.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/spacer.gif +0 -0
- data/lib/wri/public/css/tree_blue2/images/spinner.gif +0 -0
- data/lib/wri/public/css/tree_blue2/style.css +83 -0
- data/lib/wri/public/css/tree_xp/images/collapsable-last.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/collapsable.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/expandable-last.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/expandable.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/leaf-last.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/leaf.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/root.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/spacer.gif +0 -0
- data/lib/wri/public/css/tree_xp/images/spinner.gif +0 -0
- data/lib/wri/public/css/tree_xp/style.css +83 -0
- data/lib/wri/public/img/dir.gif +0 -0
- data/lib/wri/public/img/mod.ico +0 -0
- data/lib/wri/public/img/ruby_logo.png +0 -0
- data/lib/wri/public/js/jquery.js +11 -0
- data/lib/wri/public/js/ri.jquery.js +56 -0
- data/lib/wri/ri_service.rb +67 -0
- data/lib/wri/server.rb +186 -0
- data/lib/wri/template.rhtml +60 -0
- data/meta/project.yaml +20 -0
- data/meta/version +1 -0
- metadata +120 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'wri/server'
|
2
|
+
|
3
|
+
module WRI
|
4
|
+
|
5
|
+
class RiService
|
6
|
+
|
7
|
+
attr :library
|
8
|
+
|
9
|
+
def initialize(library=nil)
|
10
|
+
@library = library
|
11
|
+
end
|
12
|
+
|
13
|
+
def info(keyword)
|
14
|
+
if library
|
15
|
+
`ri -d #{library} -f html #{keyword}`
|
16
|
+
else
|
17
|
+
`ri -f html #{keyword}`
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def names
|
22
|
+
@names ||= if library
|
23
|
+
`ri -d #{library} --list-names`
|
24
|
+
else
|
25
|
+
`ri --list-names`
|
26
|
+
end.split(/\s*\n/)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
library = ARGV[0]
|
34
|
+
|
35
|
+
service = WRI::RiService.new(library)
|
36
|
+
|
37
|
+
wri = WRI::Server.new(service)
|
38
|
+
#puts wri.to_html
|
39
|
+
|
40
|
+
require 'webrick'
|
41
|
+
include WEBrick
|
42
|
+
|
43
|
+
p wri.directory + "/public"
|
44
|
+
|
45
|
+
s = HTTPServer.new(
|
46
|
+
:Port => 8888,
|
47
|
+
:DocumentRoot => wri.directory + "/public"
|
48
|
+
)
|
49
|
+
|
50
|
+
s.mount_proc("/"){|req, res|
|
51
|
+
res.body = wri.to_html
|
52
|
+
res['Content-Type'] = "text/html"
|
53
|
+
}
|
54
|
+
|
55
|
+
s.mount_proc("/ri"){|req, res|
|
56
|
+
res.body = wri.lookup(req)
|
57
|
+
res['Content-Type'] = "text/html"
|
58
|
+
}
|
59
|
+
|
60
|
+
## mount subdirectories
|
61
|
+
s.mount("/js", HTTPServlet::FileHandler, wri.directory + "/public/js")
|
62
|
+
s.mount("/css", HTTPServlet::FileHandler, wri.directory + "/public/css")
|
63
|
+
s.mount("/img", HTTPServlet::FileHandler, wri.directory + "/public/img")
|
64
|
+
|
65
|
+
trap("INT"){ s.shutdown }
|
66
|
+
s.start
|
67
|
+
|
data/lib/wri/server.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module WRI
|
5
|
+
|
6
|
+
class Server
|
7
|
+
|
8
|
+
# Reference to CGI Service
|
9
|
+
attr :cgi
|
10
|
+
|
11
|
+
# Reference to RI Service
|
12
|
+
attr :service
|
13
|
+
|
14
|
+
def initialize(service)
|
15
|
+
@cgi = {} #CGI.new('html4')
|
16
|
+
@service = service
|
17
|
+
end
|
18
|
+
|
19
|
+
def directory
|
20
|
+
File.dirname(__FILE__)
|
21
|
+
end
|
22
|
+
|
23
|
+
def heirarchy
|
24
|
+
ns = NS.new(nil)
|
25
|
+
service.names.each do |m|
|
26
|
+
if m.index('#')
|
27
|
+
type = :instance
|
28
|
+
space, method = m.split('#')
|
29
|
+
spaces = space.split('::').collect{|s| s.to_sym }
|
30
|
+
method = method.to_sym
|
31
|
+
elsif m.index('::')
|
32
|
+
type = :class
|
33
|
+
space, method = m.split('::')
|
34
|
+
spaces = space.split('::').collect{|s| s.to_sym }
|
35
|
+
if spaces.last =~ /^[a-z]/
|
36
|
+
method = spaces.pop
|
37
|
+
else
|
38
|
+
next # what to do about class/module ?
|
39
|
+
end
|
40
|
+
else
|
41
|
+
next # what to do abot class/module ?
|
42
|
+
end
|
43
|
+
|
44
|
+
memo = ns
|
45
|
+
spaces.each do |space|
|
46
|
+
memo[space] ||= NS.new(space, memo)
|
47
|
+
memo = memo[space]
|
48
|
+
end
|
49
|
+
|
50
|
+
if type == :class
|
51
|
+
memo.class_methods << method
|
52
|
+
else
|
53
|
+
memo.instance_methods << method
|
54
|
+
end
|
55
|
+
end
|
56
|
+
return ns
|
57
|
+
end
|
58
|
+
|
59
|
+
def tree
|
60
|
+
@tree ||= heirarchy.to_html
|
61
|
+
end
|
62
|
+
|
63
|
+
def lookup(req)
|
64
|
+
keyw = File.basename(req.path_info)
|
65
|
+
if keyw
|
66
|
+
keyw.sub!('-','#')
|
67
|
+
html = service.info(keyw)
|
68
|
+
puts html
|
69
|
+
#term = AnsiSys::Terminal.new.echo(ansi)
|
70
|
+
#html = term.render(:html) #=> HTML fragment
|
71
|
+
#html = ERB::Util.html_escape(html)
|
72
|
+
html = "#{html}"
|
73
|
+
else
|
74
|
+
html = "<h1>ERROR</h1>"
|
75
|
+
end
|
76
|
+
return html
|
77
|
+
end
|
78
|
+
|
79
|
+
def to_html
|
80
|
+
filetext = File.read(File.join(File.dirname(__FILE__), 'template.rhtml'))
|
81
|
+
template = ERB.new(filetext)
|
82
|
+
template.result(binding)
|
83
|
+
#heirarchy.to_html
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
|
88
|
+
class NS
|
89
|
+
attr :name
|
90
|
+
attr :parent
|
91
|
+
attr :subspaces
|
92
|
+
attr :instance_methods
|
93
|
+
attr :class_methods
|
94
|
+
|
95
|
+
def initialize(name, parent=nil)
|
96
|
+
@name = name
|
97
|
+
@parent = parent if NS===parent
|
98
|
+
@subspaces = {}
|
99
|
+
@class_methods = []
|
100
|
+
@instance_methods = []
|
101
|
+
end
|
102
|
+
|
103
|
+
def key
|
104
|
+
full_name
|
105
|
+
end
|
106
|
+
|
107
|
+
def [](name)
|
108
|
+
@subspaces[name]
|
109
|
+
end
|
110
|
+
|
111
|
+
def []=(name, value)
|
112
|
+
@subspaces[name] = value
|
113
|
+
end
|
114
|
+
|
115
|
+
def root?
|
116
|
+
!parent
|
117
|
+
end
|
118
|
+
|
119
|
+
def full_name
|
120
|
+
if root?
|
121
|
+
nil
|
122
|
+
else
|
123
|
+
[parent.full_name, name].compact.join("::")
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def to_html
|
128
|
+
markup = []
|
129
|
+
if root?
|
130
|
+
markup << %[<div class="root">]
|
131
|
+
else
|
132
|
+
markup << %[
|
133
|
+
<li class="trigger">
|
134
|
+
<img src="img/dir.gif" onClick="showBranch(this);"/>
|
135
|
+
<span class="link" onClick="lookup(this, '#{full_name}');">#{name}</span>
|
136
|
+
]
|
137
|
+
markup << %[<div class="branch">]
|
138
|
+
end
|
139
|
+
|
140
|
+
markup << %[<ul>]
|
141
|
+
class_methods.each do |method|
|
142
|
+
markup << %[
|
143
|
+
<li class="leaf">
|
144
|
+
<span class="link" onClick="lookup(this, '#{full_name}::#{method}');">#{method}</span>
|
145
|
+
</li>
|
146
|
+
]
|
147
|
+
end
|
148
|
+
|
149
|
+
instance_methods.each do |method|
|
150
|
+
markup << %[
|
151
|
+
<li class="leaf">
|
152
|
+
<span class="link" onClick="lookup(this, '#{full_name}-#{method}');">#{method}</span>
|
153
|
+
</li>
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
subspaces.to_a.sort{ |a,b| a[0].to_s <=> b[0].to_s }.each do |(name, subspace)|
|
158
|
+
#subspaces.each do |name, subspace|
|
159
|
+
markup << subspace.to_html
|
160
|
+
end
|
161
|
+
markup << %[</ul>]
|
162
|
+
|
163
|
+
if root?
|
164
|
+
markup << %[</div>]
|
165
|
+
else
|
166
|
+
markup << %[</div>]
|
167
|
+
markup << %[</li>]
|
168
|
+
end
|
169
|
+
|
170
|
+
return markup.join("\n")
|
171
|
+
end
|
172
|
+
|
173
|
+
def esc(text)
|
174
|
+
CGI.escape(text.to_s)
|
175
|
+
end
|
176
|
+
|
177
|
+
def inspect
|
178
|
+
"<#{self.class} #{name}>"
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
+
<html>
|
3
|
+
|
4
|
+
<head>
|
5
|
+
<title>WebRI</title>
|
6
|
+
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
|
8
|
+
|
9
|
+
<link rel="icon" href="img/ruby_logo.png" type="image/x-icon">
|
10
|
+
|
11
|
+
<link href="css/style.css" rel="stylesheet" type="text/css">
|
12
|
+
|
13
|
+
<SCRIPT src="js/jquery.js" type="text/javascript"></SCRIPT>
|
14
|
+
<SCRIPT src="js/ri.jquery.js" type="text/javascript"></SCRIPT>
|
15
|
+
|
16
|
+
<script type="text/javascript">
|
17
|
+
$(document).ready(function(){
|
18
|
+
//$("#screenFrame").css('height', $(window).height() + 'px');
|
19
|
+
resizePage();
|
20
|
+
});
|
21
|
+
</script>
|
22
|
+
</head>
|
23
|
+
|
24
|
+
<body>
|
25
|
+
|
26
|
+
<div id="screenFrame">
|
27
|
+
|
28
|
+
<div id="header">
|
29
|
+
<img src="img/ruby_logo.png" align="absmiddle"/> WebRI
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div id="side">
|
33
|
+
<div style="background: black; color: white; padding-left: 30px; font-weight: bold;"> Class Tree </div>
|
34
|
+
|
35
|
+
<%= tree %>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div id="main">
|
39
|
+
<h1>Welcome to WebRI</h1>
|
40
|
+
<h2>Webrick-based RI Browser</h2>
|
41
|
+
|
42
|
+
<p>
|
43
|
+
WebRI provides a web-based interface
|
44
|
+
to RI documentation.
|
45
|
+
</p>
|
46
|
+
|
47
|
+
<p>
|
48
|
+
WebRI © 2008 Tiger Ops
|
49
|
+
</p>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div style="text-align: left; font-size: 8pt; font-weight: bold; padding: 2px;">
|
53
|
+
WebRI © 2008 <a href="http://tigerops.psytower.info">Tiger Ops</a>
|
54
|
+
<div>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
</body>
|
58
|
+
|
59
|
+
</html>
|
60
|
+
|
data/meta/project.yaml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
project : wri
|
3
|
+
contact : Trans <transfire@gmail.com>
|
4
|
+
license : GPLv3
|
5
|
+
created : 2008-02-21
|
6
|
+
homepage : http://tigerops.rubyforge.org/wri
|
7
|
+
repository : http://tigerops.rubyforge.org/svn/wri
|
8
|
+
|
9
|
+
title : WebRI
|
10
|
+
brief : Web-base RI browser
|
11
|
+
|
12
|
+
# Detailed description.
|
13
|
+
description: >
|
14
|
+
Webrick-based RI browser.
|
15
|
+
|
16
|
+
exclude : [ work, doc, ri, site ]
|
17
|
+
|
18
|
+
#dependency :
|
19
|
+
# - [facets, '>= 2.3.0']
|
20
|
+
|
data/meta/version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0 beta (2008-03-28)
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wri
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Trans <transfire@gmail.com>
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-03-28 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Webrick-based RI browser.
|
17
|
+
email: transfire@gmail.com
|
18
|
+
executables:
|
19
|
+
- wri
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- MANIFEST
|
25
|
+
- NOTES
|
26
|
+
- CHANGES
|
27
|
+
files:
|
28
|
+
- NOTES
|
29
|
+
- CHANGES
|
30
|
+
- README
|
31
|
+
- meta
|
32
|
+
- meta/project.yaml
|
33
|
+
- meta/version
|
34
|
+
- lib
|
35
|
+
- lib/wri
|
36
|
+
- lib/wri/ri_service.rb
|
37
|
+
- lib/wri/fastri_service.rb
|
38
|
+
- lib/wri/server.rb
|
39
|
+
- lib/wri/public
|
40
|
+
- lib/wri/public/img
|
41
|
+
- lib/wri/public/img/dir.gif
|
42
|
+
- lib/wri/public/img/mod.ico
|
43
|
+
- lib/wri/public/img/ruby_logo.png
|
44
|
+
- lib/wri/public/js
|
45
|
+
- lib/wri/public/js/ri.jquery.js
|
46
|
+
- lib/wri/public/js/jquery.js
|
47
|
+
- lib/wri/public/css
|
48
|
+
- lib/wri/public/css/tree_blue2
|
49
|
+
- lib/wri/public/css/tree_blue2/images
|
50
|
+
- lib/wri/public/css/tree_blue2/images/collapsable.gif
|
51
|
+
- lib/wri/public/css/tree_blue2/images/spacer.gif
|
52
|
+
- lib/wri/public/css/tree_blue2/images/leaf.gif
|
53
|
+
- lib/wri/public/css/tree_blue2/images/expandable.gif
|
54
|
+
- lib/wri/public/css/tree_blue2/images/collapsable-last.gif
|
55
|
+
- lib/wri/public/css/tree_blue2/images/expandable-last.gif
|
56
|
+
- lib/wri/public/css/tree_blue2/images/spinner.gif
|
57
|
+
- lib/wri/public/css/tree_blue2/images/leaf-last.gif
|
58
|
+
- lib/wri/public/css/tree_blue2/images/root.gif
|
59
|
+
- lib/wri/public/css/tree_blue2/style.css
|
60
|
+
- lib/wri/public/css/tree_xp
|
61
|
+
- lib/wri/public/css/tree_xp/images
|
62
|
+
- lib/wri/public/css/tree_xp/images/collapsable.gif
|
63
|
+
- lib/wri/public/css/tree_xp/images/spacer.gif
|
64
|
+
- lib/wri/public/css/tree_xp/images/leaf.gif
|
65
|
+
- lib/wri/public/css/tree_xp/images/expandable.gif
|
66
|
+
- lib/wri/public/css/tree_xp/images/collapsable-last.gif
|
67
|
+
- lib/wri/public/css/tree_xp/images/expandable-last.gif
|
68
|
+
- lib/wri/public/css/tree_xp/images/spinner.gif
|
69
|
+
- lib/wri/public/css/tree_xp/images/leaf-last.gif
|
70
|
+
- lib/wri/public/css/tree_xp/images/root.gif
|
71
|
+
- lib/wri/public/css/tree_xp/style.css
|
72
|
+
- lib/wri/public/css/tree_blue
|
73
|
+
- lib/wri/public/css/tree_blue/images
|
74
|
+
- lib/wri/public/css/tree_blue/images/collapsable.gif
|
75
|
+
- lib/wri/public/css/tree_blue/images/spacer.gif
|
76
|
+
- lib/wri/public/css/tree_blue/images/leaf.gif
|
77
|
+
- lib/wri/public/css/tree_blue/images/expandable.gif
|
78
|
+
- lib/wri/public/css/tree_blue/images/collapsable-last.gif
|
79
|
+
- lib/wri/public/css/tree_blue/images/expandable-last.gif
|
80
|
+
- lib/wri/public/css/tree_blue/images/spinner.gif
|
81
|
+
- lib/wri/public/css/tree_blue/images/leaf-last.gif
|
82
|
+
- lib/wri/public/css/tree_blue/images/root.gif
|
83
|
+
- lib/wri/public/css/tree_blue/style.css
|
84
|
+
- lib/wri/public/css/style.css
|
85
|
+
- lib/wri/template.rhtml
|
86
|
+
- bin
|
87
|
+
- bin/wri
|
88
|
+
- MANIFEST
|
89
|
+
has_rdoc: true
|
90
|
+
homepage: http://tigerops.rubyforge.org/wri
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options:
|
93
|
+
- --inline-source
|
94
|
+
- --title
|
95
|
+
- WebRI
|
96
|
+
- --main
|
97
|
+
- README
|
98
|
+
require_paths:
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: "0"
|
105
|
+
version:
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: "0"
|
111
|
+
version:
|
112
|
+
requirements: []
|
113
|
+
|
114
|
+
rubyforge_project: tigerops
|
115
|
+
rubygems_version: 1.0.1
|
116
|
+
signing_key:
|
117
|
+
specification_version: 2
|
118
|
+
summary: Web-base RI browser
|
119
|
+
test_files: []
|
120
|
+
|