net-ssh 1.1.4 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- data/test/util/tc_buffer.rb +0 -217
@@ -1,270 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
background: #FFF;
|
3
|
-
font-family: sans-serif;
|
4
|
-
color: #000;
|
5
|
-
margin: 0px;
|
6
|
-
}
|
7
|
-
|
8
|
-
a {
|
9
|
-
color: #00F;
|
10
|
-
text-decoration: none;
|
11
|
-
}
|
12
|
-
|
13
|
-
a:hover {
|
14
|
-
text-decoration: underline;
|
15
|
-
}
|
16
|
-
|
17
|
-
.product-manual {
|
18
|
-
text-align: center;
|
19
|
-
font-size: x-large;
|
20
|
-
font-variant: small-caps;
|
21
|
-
font-weight: bold;
|
22
|
-
color: #005;
|
23
|
-
}
|
24
|
-
|
25
|
-
.copyright {
|
26
|
-
text-align: center;
|
27
|
-
font-size: small;
|
28
|
-
font-style: italic;
|
29
|
-
color: #005;
|
30
|
-
margin-top: 1in;
|
31
|
-
}
|
32
|
-
|
33
|
-
#banner {
|
34
|
-
background: #005;
|
35
|
-
color: #FFF;
|
36
|
-
border-bottom: 1px solid #000;
|
37
|
-
padding-top: 0.5em;
|
38
|
-
padding-bottom: 0.5em;
|
39
|
-
padding-left: 1em;
|
40
|
-
margin-bottom: 1em;
|
41
|
-
}
|
42
|
-
|
43
|
-
#banner .title {
|
44
|
-
font-size: x-large;
|
45
|
-
}
|
46
|
-
|
47
|
-
#banner .title:first-letter {
|
48
|
-
font-size: 250%;
|
49
|
-
font-weight: normal;
|
50
|
-
float: left;
|
51
|
-
margin-top: -7px;
|
52
|
-
margin-bottom: -7px;
|
53
|
-
}
|
54
|
-
|
55
|
-
#banner .product {
|
56
|
-
font-weight: bold;
|
57
|
-
color: #FF7;
|
58
|
-
letter-spacing: 0.5em;
|
59
|
-
}
|
60
|
-
|
61
|
-
#banner .tagline {
|
62
|
-
font-style: italic;
|
63
|
-
font-size: large;
|
64
|
-
letter-spacing: 0.1em;
|
65
|
-
color: #FFF;
|
66
|
-
}
|
67
|
-
|
68
|
-
#banner .info {
|
69
|
-
color: white;
|
70
|
-
font-size: small;
|
71
|
-
padding-right: 1em;
|
72
|
-
}
|
73
|
-
|
74
|
-
#content {
|
75
|
-
margin-left: 0cm;
|
76
|
-
margin-right: 1cm;
|
77
|
-
}
|
78
|
-
|
79
|
-
#navigation {
|
80
|
-
font-size: x-small;
|
81
|
-
border-right: 2px groove black;
|
82
|
-
border-top: 2px groove black;
|
83
|
-
margin-right: 1em;
|
84
|
-
width: 200px;
|
85
|
-
height: 100%;
|
86
|
-
background: #FFD;
|
87
|
-
}
|
88
|
-
|
89
|
-
#navigation ul, #navigation ol {
|
90
|
-
margin-left: 1.2em;
|
91
|
-
padding-left: 1.2em;
|
92
|
-
}
|
93
|
-
|
94
|
-
#navigation .license {
|
95
|
-
font-size: x-small;
|
96
|
-
text-align: center;
|
97
|
-
border-top: 1px dashed #005;
|
98
|
-
margin-top: 2em;
|
99
|
-
padding: 1em;
|
100
|
-
}
|
101
|
-
|
102
|
-
.section {
|
103
|
-
margin-bottom: 1em;
|
104
|
-
}
|
105
|
-
|
106
|
-
.section p {
|
107
|
-
text-align: justify;
|
108
|
-
}
|
109
|
-
|
110
|
-
#content h1 {
|
111
|
-
background: #005;
|
112
|
-
color: #FFF;
|
113
|
-
font-size: x-large;
|
114
|
-
font-weight: bold;
|
115
|
-
font-variant: small-caps;
|
116
|
-
padding: 0.5em;
|
117
|
-
border: 1px solid #000;
|
118
|
-
margin-top: 0px;
|
119
|
-
margin-bottom: 1em;
|
120
|
-
}
|
121
|
-
|
122
|
-
#content h2 {
|
123
|
-
background: #005;
|
124
|
-
color: #FFF;
|
125
|
-
font-size: large;
|
126
|
-
font-weight: bold;
|
127
|
-
font-variant: small-caps;
|
128
|
-
padding: 0.25em;
|
129
|
-
padding-left: 0.5em;
|
130
|
-
border: 1px solid #000;
|
131
|
-
margin-bottom: 1em;
|
132
|
-
}
|
133
|
-
|
134
|
-
#content h3 {
|
135
|
-
background: #FFD;
|
136
|
-
color: #000;
|
137
|
-
font-size: normal;
|
138
|
-
font-weight: bold;
|
139
|
-
font-variant: small-caps;
|
140
|
-
padding: 0.25em;
|
141
|
-
padding-left: 0.5em;
|
142
|
-
border: 1px dotted #000;
|
143
|
-
margin-bottom: 1em;
|
144
|
-
}
|
145
|
-
|
146
|
-
#content h4 {
|
147
|
-
background: #FFE;
|
148
|
-
color: #000;
|
149
|
-
font-size: normal;
|
150
|
-
font-weight: bold;
|
151
|
-
font-variant: small-caps;
|
152
|
-
padding: 0.25em;
|
153
|
-
padding-left: 0.5em;
|
154
|
-
border: 1px dotted #777;
|
155
|
-
margin-bottom: 1em;
|
156
|
-
}
|
157
|
-
|
158
|
-
#navigation h1 {
|
159
|
-
margin: 0px;
|
160
|
-
padding: 1em;
|
161
|
-
color: #005;
|
162
|
-
background: transparent;
|
163
|
-
font-weight: bold;
|
164
|
-
font-size: 150%;
|
165
|
-
font-variant: small-caps;
|
166
|
-
text-align: center;
|
167
|
-
}
|
168
|
-
|
169
|
-
#navigation h2 {
|
170
|
-
margin: 0px;
|
171
|
-
margin-bottom: 1em;
|
172
|
-
padding: 0.5em;
|
173
|
-
border-top: 1px dashed #005;
|
174
|
-
border-bottom: 1px dashed #005;
|
175
|
-
color: #005;
|
176
|
-
background: transparent;
|
177
|
-
font-weight: bold;
|
178
|
-
font-size: 125%;
|
179
|
-
font-variant: small-caps;
|
180
|
-
text-align: center;
|
181
|
-
}
|
182
|
-
|
183
|
-
table.list {
|
184
|
-
margin: 2em;
|
185
|
-
border: 1px solid black;
|
186
|
-
background: #FFD;
|
187
|
-
padding: 0px;
|
188
|
-
border-spacing: 0px;
|
189
|
-
}
|
190
|
-
|
191
|
-
table.list th {
|
192
|
-
border-bottom: 1px solid #005;
|
193
|
-
padding-bottom: 5px;
|
194
|
-
background: #008;
|
195
|
-
color: white;
|
196
|
-
padding: 0.5em;
|
197
|
-
text-align: left;
|
198
|
-
}
|
199
|
-
|
200
|
-
table.list td {
|
201
|
-
padding: 0.2em;
|
202
|
-
text-align: left;
|
203
|
-
vertical-align: top;
|
204
|
-
border-bottom: 1px solid;
|
205
|
-
}
|
206
|
-
|
207
|
-
.prevnext {
|
208
|
-
padding: 0.5em 1em 0.5em 1em;
|
209
|
-
background: #557;
|
210
|
-
color: #FFF;
|
211
|
-
font-size: small;
|
212
|
-
font-weight: bold;
|
213
|
-
border: 1px solid #000;
|
214
|
-
}
|
215
|
-
|
216
|
-
.prevnext a {
|
217
|
-
color: #FF0;
|
218
|
-
}
|
219
|
-
|
220
|
-
.top .prevnext {
|
221
|
-
margin: 0 0 1em 0;
|
222
|
-
text-align: left;
|
223
|
-
}
|
224
|
-
|
225
|
-
.bottom .prevnext {
|
226
|
-
margin: 1em 0 0 0;
|
227
|
-
text-align: right;
|
228
|
-
}
|
229
|
-
|
230
|
-
.figure {
|
231
|
-
border: 1px solid black;
|
232
|
-
line-height: normal;
|
233
|
-
background: #FFD;
|
234
|
-
margin: 2em;
|
235
|
-
}
|
236
|
-
|
237
|
-
.figure .caption {
|
238
|
-
background: #008;
|
239
|
-
color: white;
|
240
|
-
font-weight: bold;
|
241
|
-
font-size: small;
|
242
|
-
padding: 4px 24px 4px 8px;
|
243
|
-
margin-left: -4px;
|
244
|
-
border: 1px dotted #77F;
|
245
|
-
}
|
246
|
-
|
247
|
-
.figure table {
|
248
|
-
padding-top: 0.8em;
|
249
|
-
padding-bottom: 0.5em;
|
250
|
-
}
|
251
|
-
|
252
|
-
.figure .body {
|
253
|
-
padding-left: 1em;
|
254
|
-
}
|
255
|
-
|
256
|
-
.figure pre {
|
257
|
-
padding: 0px;
|
258
|
-
background: transparent;
|
259
|
-
border: none;
|
260
|
-
font-size: small;
|
261
|
-
font-family: monospace;
|
262
|
-
}
|
263
|
-
|
264
|
-
.figure .lineno {
|
265
|
-
text-align: right;
|
266
|
-
color: #B00;
|
267
|
-
font-family: monospace;
|
268
|
-
font-size: small;
|
269
|
-
padding-right: 1em;
|
270
|
-
}
|
@@ -1,17 +0,0 @@
|
|
1
|
-
.ruby .normal {}
|
2
|
-
.ruby .comment { color: #005; font-style: italic; }
|
3
|
-
.ruby .keyword { color: #A00; font-weight: bold; }
|
4
|
-
.ruby .method { color: #077; }
|
5
|
-
.ruby .class { color: #074; }
|
6
|
-
.ruby .module { color: #050; }
|
7
|
-
.ruby .punct { color: #447; font-weight: bold; }
|
8
|
-
.ruby .symbol { color: #099; }
|
9
|
-
.ruby .string { color: #944; }
|
10
|
-
.ruby .char { color: #F07; }
|
11
|
-
.ruby .ident { color: #004; }
|
12
|
-
.ruby .constant { color: #07F; }
|
13
|
-
.ruby .regex { color: #B66; }
|
14
|
-
.ruby .number { color: #D55; }
|
15
|
-
.ruby .attribute { color: #377; }
|
16
|
-
.ruby .global { color: #3B7; }
|
17
|
-
.ruby .expr { color: #227; }
|
data/doc/manual/chapter.erb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
<div class="top"><div class="prevnext">
|
2
|
-
<% if previous_chapter %>
|
3
|
-
<a href="chapter-<%= previous_chapter.index %>.html">Previous (<%= previous_chapter.index %>. <%= previous_chapter.title %>)</a> |
|
4
|
-
<% end %>
|
5
|
-
<a href="index.html">Up</a>
|
6
|
-
<% if next_chapter %>
|
7
|
-
| <a href="chapter-<%= next_chapter.index %>.html">Next (<%= next_chapter.index %>. <%= next_chapter.title %>)</a>
|
8
|
-
<% end %>
|
9
|
-
</div></div>
|
10
|
-
|
11
|
-
<h1><%= object.index %>. <%= object.title %></h1>
|
12
|
-
|
13
|
-
<% object.sections.each do |section|
|
14
|
-
|
15
|
-
if section.title %>
|
16
|
-
|
17
|
-
<h2>
|
18
|
-
<a name="s<%= section.index %>"></a>
|
19
|
-
<%= object.index %>.<%= section.index %>. <%= section.title %>
|
20
|
-
</h2>
|
21
|
-
|
22
|
-
<% end %>
|
23
|
-
|
24
|
-
<div class="section">
|
25
|
-
<%= section.content.to_html %>
|
26
|
-
</div>
|
27
|
-
|
28
|
-
<% end %>
|
29
|
-
|
30
|
-
<div class="bottom"><div class="prevnext">
|
31
|
-
<% if previous_chapter %>
|
32
|
-
<a href="chapter-<%= previous_chapter.index %>.html">Previous (<%= previous_chapter.index %>. <%= previous_chapter.title %>)</a> |
|
33
|
-
<% end %>
|
34
|
-
<a href="index.html">Up</a>
|
35
|
-
<% if next_chapter %>
|
36
|
-
| <a href="chapter-<%= next_chapter.index %>.html">Next (<%= next_chapter.index %>. <%= next_chapter.title %>)</a>
|
37
|
-
<% end %>
|
38
|
-
</div></div>
|
data/doc/manual/example.erb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
<h1>Example #<%= object.index %>. <%= object.title %></h1>
|
2
|
-
|
3
|
-
<h2>Introduction</h2>
|
4
|
-
|
5
|
-
<%= object.intro.to_html %>
|
6
|
-
|
7
|
-
<h2>Design</h2>
|
8
|
-
|
9
|
-
<%= object.design.to_html %>
|
10
|
-
|
11
|
-
<h2>Implementation</h2>
|
12
|
-
|
13
|
-
<%= object.implementation.to_html %>
|
14
|
-
|
15
|
-
<h2>Summary</h2>
|
16
|
-
|
17
|
-
<%= object.summary.to_html %>
|
18
|
-
|
data/doc/manual/index.erb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
<p class="product-manual">Product Manual</p>
|
2
|
-
|
3
|
-
<p align="center">
|
4
|
-
<img src="<%= manual.product.logo %>"
|
5
|
-
alt="<%= manual.product.name %>: <%= manual.product.tagline %>" />
|
6
|
-
</p>
|
7
|
-
|
8
|
-
<p align="center">
|
9
|
-
<% manual.product.urls.each do |item| %>
|
10
|
-
<%= item.keys.first %>: <a href="<%= item.values.first %>"><%= item.values.first %></a><br />
|
11
|
-
<% end %>
|
12
|
-
</p>
|
13
|
-
|
14
|
-
<% if manual.recent_updates && manual.recent_updates.length > 0 %>
|
15
|
-
<p align="center"><strong>Recent Updates to This Manual</strong></p>
|
16
|
-
<table border='0' cellpadding='0' cellspacing='0' align='center'><tr><td>
|
17
|
-
<ul>
|
18
|
-
<% manual.recent_updates.each do |update| %>
|
19
|
-
<li><%= update %></li>
|
20
|
-
<% end %>
|
21
|
-
</ul>
|
22
|
-
</table>
|
23
|
-
<% end %>
|
24
|
-
|
25
|
-
<p class="copyright">
|
26
|
-
Copyright © <%= manual.meta.copyright %>
|
27
|
-
<%= manual.meta.author %>
|
28
|
-
(<a href="mailto:<%= manual.meta.email %>"><%= manual.meta.email %></a>)
|
29
|
-
</p>
|
data/doc/manual/manual.rb
DELETED
@@ -1,311 +0,0 @@
|
|
1
|
-
# --------------------------------------------------------------------------
|
2
|
-
# Portions of this code were taken from the "poignant.rb" script created
|
3
|
-
# by whytheluckystiff, which generates "Why's (Poignant) Guide to Ruby".
|
4
|
-
# The original script may be obtained from the poignant CVS repository,
|
5
|
-
# at http://poignant.rubyforge.org.
|
6
|
-
#
|
7
|
-
# This script is distributed under the by-sa/1.0 Creative Commons license.
|
8
|
-
# --------------------------------------------------------------------------
|
9
|
-
|
10
|
-
require 'erb'
|
11
|
-
require 'fileutils'
|
12
|
-
require 'yaml'
|
13
|
-
require 'redcloth'
|
14
|
-
require 'syntax/convertors/html'
|
15
|
-
|
16
|
-
module Net ; module SSH
|
17
|
-
module Manual
|
18
|
-
|
19
|
-
class Manual
|
20
|
-
attr_accessor :product, :meta, :chapters, :tutorials, :examples, :recent_updates
|
21
|
-
|
22
|
-
def Manual.load( file_name )
|
23
|
-
File.open( file_name ) { |file| YAML.load( file ) }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Meta
|
28
|
-
attr_accessor :copyright, :author, :email
|
29
|
-
end
|
30
|
-
|
31
|
-
class Product
|
32
|
-
attr_accessor :name, :tagline, :version, :logo, :urls, :project
|
33
|
-
end
|
34
|
-
|
35
|
-
class Sidebar
|
36
|
-
attr_accessor :title, :content
|
37
|
-
end
|
38
|
-
|
39
|
-
class Chapter
|
40
|
-
attr_accessor :index, :title, :sections
|
41
|
-
|
42
|
-
def initialize( index, title, sections )
|
43
|
-
@index = index
|
44
|
-
@title = title
|
45
|
-
|
46
|
-
section_index = 0
|
47
|
-
@sections = ( sections || [] ).collect do |section|
|
48
|
-
section_index += 1
|
49
|
-
if section.respond_to? :keys
|
50
|
-
Section.new( section_index, section.keys.first, section.values.first )
|
51
|
-
else
|
52
|
-
section_index -= 1
|
53
|
-
Section.new( section_index, nil, section )
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def page_title
|
59
|
-
"Chapter #{index}: #{title}"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class Tutorial
|
64
|
-
attr_accessor :index, :title, :brief, :intro, :steps, :summary
|
65
|
-
|
66
|
-
def initialize( index, title, brief, intro, steps, summary )
|
67
|
-
@index = index
|
68
|
-
@title = title
|
69
|
-
@brief = RedCloth.new( brief )
|
70
|
-
@intro = RedCloth.new( intro ) if intro
|
71
|
-
@summary = RedCloth.new( summary ) if summary
|
72
|
-
@steps = steps.map { |step| RedCloth.new( step ) }
|
73
|
-
end
|
74
|
-
|
75
|
-
def page_title
|
76
|
-
"Tutorial #{index}: #{title}"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class Example
|
81
|
-
attr_accessor :index, :title, :brief, :intro, :design, :implementation, :summary
|
82
|
-
|
83
|
-
def initialize( index, title, brief, intro, design, implementation, summary )
|
84
|
-
@index = index
|
85
|
-
@title = title
|
86
|
-
@brief = RedCloth.new( brief )
|
87
|
-
@intro = RedCloth.new( intro )
|
88
|
-
@design = RedCloth.new( design )
|
89
|
-
@implementation = RedCloth.new( implementation )
|
90
|
-
@summary = RedCloth.new( summary )
|
91
|
-
end
|
92
|
-
|
93
|
-
def page_title
|
94
|
-
"Example #{index}: #{title}"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
class Section
|
99
|
-
attr_accessor :index, :title, :content
|
100
|
-
|
101
|
-
def initialize( index, title, content )
|
102
|
-
@index = index
|
103
|
-
@title = RedCloth.new( title ).to_html.gsub( %r{</?p>}, "" ) if title
|
104
|
-
@content = FigureContainer.new( content || "" )
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
class FigureContainer
|
109
|
-
def initialize( content )
|
110
|
-
@content = content
|
111
|
-
@html = nil
|
112
|
-
end
|
113
|
-
|
114
|
-
def to_html
|
115
|
-
return @html if @html
|
116
|
-
extract_figures
|
117
|
-
convert_to_html
|
118
|
-
replace_figures
|
119
|
-
@html
|
120
|
-
end
|
121
|
-
|
122
|
-
private
|
123
|
-
|
124
|
-
Figure = Struct.new( :opts, :body )
|
125
|
-
|
126
|
-
def extract_figures
|
127
|
-
@figures = []
|
128
|
-
@content.gsub!( /^\{\{\{(.*?)?\n(.*?)\n\}\}\}$/m ) do
|
129
|
-
body = $2.strip
|
130
|
-
opts = Hash[*$1.strip.split(/,/).map{|p| p.split(/=/)}.flatten]
|
131
|
-
@figures << Figure.new( opts, body )
|
132
|
-
"====#{@figures.length-1}===="
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def convert_to_html
|
137
|
-
@html = ( @content.length < 1 ? "" :
|
138
|
-
RedCloth.new( @content ).to_html )
|
139
|
-
end
|
140
|
-
|
141
|
-
def replace_figures
|
142
|
-
@html.gsub!( /<p>====(.*?)====<\/p>/ ) do
|
143
|
-
figure = @figures[$1.to_i]
|
144
|
-
lang = figure.opts["lang"]
|
145
|
-
caption = figure.opts["caption"] || "Figure"
|
146
|
-
caption << " [#{lang}]" if lang
|
147
|
-
|
148
|
-
body = figure.body
|
149
|
-
|
150
|
-
if lang
|
151
|
-
convertor = Syntax::Convertors::HTML.for_syntax( lang )
|
152
|
-
|
153
|
-
body = "<link rel='stylesheet' type='text/css' " +
|
154
|
-
"href='stylesheets/#{lang}.css' />" +
|
155
|
-
"<div class='#{lang}'>" +
|
156
|
-
convertor.convert( body ) +
|
157
|
-
"</div>"
|
158
|
-
end
|
159
|
-
|
160
|
-
if figure.opts["number"] && eval(figure.opts["number"])
|
161
|
-
line = 1
|
162
|
-
numbers = ""
|
163
|
-
body.each_line { numbers << "#{line}<br />"; line += 1 }
|
164
|
-
body = "<table border='0' cellpadding='0' cellspacing='0'>" +
|
165
|
-
"<tr><td class='lineno'>#{numbers}</td>" +
|
166
|
-
"<td width='100%'>#{body}</td></tr></table>"
|
167
|
-
end
|
168
|
-
|
169
|
-
"<div class='figure'>\n" +
|
170
|
-
"<span class='caption'>#{caption}</span>\n" +
|
171
|
-
"<div class='body'>#{body}</div>" +
|
172
|
-
"</div>"
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
YAML.add_private_type( 'file' ) { |type_id, value| File.read( value ) rescue "" }
|
178
|
-
YAML.add_private_type( 'eval' ) { |type_id, value| eval( value ) }
|
179
|
-
|
180
|
-
YAML.add_domain_type( 'jamisbuck.org,2004', 'manual' ) do |taguri, val|
|
181
|
-
index = 0
|
182
|
-
|
183
|
-
val['chapters'].collect! do |chapter|
|
184
|
-
index += 1
|
185
|
-
Chapter.new( index, chapter.keys.first, chapter.values.first )
|
186
|
-
end
|
187
|
-
|
188
|
-
index = 0
|
189
|
-
( val['tutorials'] ||= [] ).collect! do |tutorial|
|
190
|
-
index += 1
|
191
|
-
content = tutorial.values.first
|
192
|
-
Tutorial.new( index, tutorial.keys.first, content['brief'], content['intro'],
|
193
|
-
content['steps'], content['summary'] )
|
194
|
-
end
|
195
|
-
|
196
|
-
index = 0
|
197
|
-
( val['examples'] ||= [] ).collect! do |example|
|
198
|
-
index += 1
|
199
|
-
content = example.values.first
|
200
|
-
Example.new( index, example.keys.first, content['brief'], content['intro'], content['design'],
|
201
|
-
content['implementation'], content['summary'] )
|
202
|
-
end
|
203
|
-
|
204
|
-
YAML.object_maker( Manual, val )
|
205
|
-
end
|
206
|
-
|
207
|
-
YAML.add_domain_type( 'jamisbuck.org,2004', 'meta' ) do |taguri, val|
|
208
|
-
YAML.object_maker( Meta, val )
|
209
|
-
end
|
210
|
-
|
211
|
-
YAML.add_domain_type( 'jamisbuck.org,2004', 'product' ) do |taguri, val|
|
212
|
-
version = val["version"]
|
213
|
-
if version.respond_to?( :type_id )
|
214
|
-
if version.type_id == "version"
|
215
|
-
if version.value =~ %r{(.*)/(.*)}
|
216
|
-
require_file, constant = $1, $2
|
217
|
-
else
|
218
|
-
constant = version.value
|
219
|
-
end
|
220
|
-
|
221
|
-
require require_file if require_file
|
222
|
-
val["version"] = eval(constant)
|
223
|
-
else
|
224
|
-
raise "Unexpected type: #{val.type_id}"
|
225
|
-
end
|
226
|
-
end
|
227
|
-
YAML.object_maker( Product, val )
|
228
|
-
end
|
229
|
-
|
230
|
-
YAML.add_domain_type( 'jamisbuck.org,2004', 'sidebar' ) do |taguri, val|
|
231
|
-
YAML.object_maker( Sidebar,
|
232
|
-
'title' => val.keys.first,
|
233
|
-
'content'=> RedCloth.new( val.values.first ) )
|
234
|
-
end
|
235
|
-
|
236
|
-
end
|
237
|
-
end; end
|
238
|
-
|
239
|
-
if __FILE__ == $0
|
240
|
-
|
241
|
-
def log_action( action )
|
242
|
-
$stderr.puts action
|
243
|
-
end
|
244
|
-
|
245
|
-
unless ( output_path = ARGV[0] )
|
246
|
-
$stderr.puts "Usage: #{$0} [/path/to/save/html]"
|
247
|
-
exit
|
248
|
-
end
|
249
|
-
|
250
|
-
FileUtils.mkdir_p File.join( output_path, "stylesheets" )
|
251
|
-
|
252
|
-
log_action "Loading manual.yml..."
|
253
|
-
manual = Net::SSH::Manual::Manual.load( 'manual.yml' )
|
254
|
-
|
255
|
-
# force these to be defined at the TOPLEVEL_BINDING
|
256
|
-
object = nil
|
257
|
-
guts = nil
|
258
|
-
|
259
|
-
page = File.open( "page.erb" ) { |file| ERB.new( file.read ) }
|
260
|
-
page.filename = "page.erb"
|
261
|
-
|
262
|
-
template = File.open( "index.erb" ) { |file| ERB.new( file.read ) }
|
263
|
-
template.filename = "index.erb"
|
264
|
-
|
265
|
-
File.open( File.join( output_path, "index.html" ), "w" ) do |file|
|
266
|
-
guts = template.result
|
267
|
-
file << page.result
|
268
|
-
end
|
269
|
-
|
270
|
-
template = File.open( "chapter.erb" ) { |file| ERB.new( file.read ) }
|
271
|
-
template.filename = "chapter.erb"
|
272
|
-
|
273
|
-
manual.chapters.each_with_index do |object,index|
|
274
|
-
log_action "Processing chapter ##{object.index}..."
|
275
|
-
|
276
|
-
previous_chapter = ( index < 1 ? nil : manual.chapters[index-1] )
|
277
|
-
next_chapter = manual.chapters[index+1]
|
278
|
-
|
279
|
-
File.open( File.join( output_path, "chapter-#{object.index}.html" ), "w" ) do |file|
|
280
|
-
guts = template.result( binding )
|
281
|
-
file << page.result( binding )
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
template = File.open( "tutorial.erb" ) { |file| ERB.new( file.read ) }
|
286
|
-
template.filename = "tutorial.erb"
|
287
|
-
|
288
|
-
manual.tutorials.each do |object|
|
289
|
-
log_action "Processing tutorial ##{object.index}..."
|
290
|
-
File.open( File.join( output_path, "tutorial-#{object.index}.html" ), "w" ) do |file|
|
291
|
-
guts = template.result
|
292
|
-
file << page.result
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
# template = File.open( "example.erb" ) { |file| ERB.new( file.read ) }
|
297
|
-
# template.filename = "example.erb"
|
298
|
-
|
299
|
-
# manual.examples.each do |object|
|
300
|
-
# log_action "Processing example ##{object.index}..."
|
301
|
-
# File.open( File.join( output_path, "example-#{object.index}.html" ), "w" ) do |file|
|
302
|
-
# guts = template.result
|
303
|
-
# file << page.result
|
304
|
-
# end
|
305
|
-
# end
|
306
|
-
|
307
|
-
log_action "Copying style sheets..."
|
308
|
-
FileUtils.cp Dir["stylesheets/*.css"], File.join( output_path, "stylesheets" )
|
309
|
-
|
310
|
-
log_action "Done!"
|
311
|
-
end
|