mechanize 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mechanize might be problematic. Click here for more details.

Files changed (242) hide show
  1. data/README +32 -0
  2. data/doc/classes/Net/HTTP.html +1716 -0
  3. data/doc/classes/Net/HTTP.src/M000103.html +18 -0
  4. data/doc/classes/Net/HTTP.src/M000104.html +18 -0
  5. data/doc/classes/Net/HTTP.src/M000105.html +18 -0
  6. data/doc/classes/Net/HTTP.src/M000106.html +18 -0
  7. data/doc/classes/Net/HTTP.src/M000107.html +29 -0
  8. data/doc/classes/Net/HTTP.src/M000108.html +18 -0
  9. data/doc/classes/Net/HTTP.src/M000109.html +22 -0
  10. data/doc/classes/Net/HTTP.src/M000110.html +18 -0
  11. data/doc/classes/Net/HTTP.src/M000111.html +18 -0
  12. data/doc/classes/Net/HTTP.src/M000112.html +18 -0
  13. data/doc/classes/Net/HTTP.src/M000113.html +18 -0
  14. data/doc/classes/Net/HTTP.src/M000114.html +22 -0
  15. data/doc/classes/Net/HTTP.src/M000115.html +29 -0
  16. data/doc/classes/Net/HTTP.src/M000116.html +18 -0
  17. data/doc/classes/Net/HTTP.src/M000117.html +19 -0
  18. data/doc/classes/Net/HTTP.src/M000118.html +19 -0
  19. data/doc/classes/Net/HTTP.src/M000119.html +18 -0
  20. data/doc/classes/Net/HTTP.src/M000121.html +18 -0
  21. data/doc/classes/Net/HTTP.src/M000122.html +28 -0
  22. data/doc/classes/Net/HTTP.src/M000123.html +19 -0
  23. data/doc/classes/Net/HTTP.src/M000124.html +30 -0
  24. data/doc/classes/Net/HTTP.src/M000125.html +18 -0
  25. data/doc/classes/Net/HTTP.src/M000126.html +18 -0
  26. data/doc/classes/Net/HTTP.src/M000127.html +18 -0
  27. data/doc/classes/Net/HTTP.src/M000128.html +18 -0
  28. data/doc/classes/Net/HTTP.src/M000129.html +18 -0
  29. data/doc/classes/Net/HTTP.src/M000130.html +18 -0
  30. data/doc/classes/Net/HTTP.src/M000133.html +28 -0
  31. data/doc/classes/Net/HTTP.src/M000134.html +20 -0
  32. data/doc/classes/Net/HTTP.src/M000135.html +28 -0
  33. data/doc/classes/Net/HTTP.src/M000136.html +18 -0
  34. data/doc/classes/Net/HTTP.src/M000137.html +18 -0
  35. data/doc/classes/Net/HTTP.src/M000138.html +18 -0
  36. data/doc/classes/Net/HTTP.src/M000139.html +18 -0
  37. data/doc/classes/Net/HTTP.src/M000140.html +18 -0
  38. data/doc/classes/Net/HTTP.src/M000141.html +18 -0
  39. data/doc/classes/Net/HTTP.src/M000142.html +18 -0
  40. data/doc/classes/Net/HTTP.src/M000143.html +18 -0
  41. data/doc/classes/Net/HTTP.src/M000144.html +18 -0
  42. data/doc/classes/Net/HTTP.src/M000145.html +18 -0
  43. data/doc/classes/Net/HTTP.src/M000146.html +18 -0
  44. data/doc/classes/Net/HTTP.src/M000147.html +18 -0
  45. data/doc/classes/Net/HTTP.src/M000148.html +18 -0
  46. data/doc/classes/Net/HTTP.src/M000152.html +19 -0
  47. data/doc/classes/Net/HTTP.src/M000153.html +39 -0
  48. data/doc/classes/Net/HTTP.src/M000154.html +18 -0
  49. data/doc/classes/Net/HTTP.src/M000156.html +24 -0
  50. data/doc/classes/Net/HTTP.src/M000157.html +18 -0
  51. data/doc/classes/Net/HTTP.src/M000158.html +19 -0
  52. data/doc/classes/Net/HTTP.src/M000159.html +21 -0
  53. data/doc/classes/Net/HTTP.src/M000161.html +19 -0
  54. data/doc/classes/Net/HTTP/Copy.html +134 -0
  55. data/doc/classes/Net/HTTP/Delete.html +134 -0
  56. data/doc/classes/Net/HTTP/Get.html +134 -0
  57. data/doc/classes/Net/HTTP/Head.html +134 -0
  58. data/doc/classes/Net/HTTP/Lock.html +134 -0
  59. data/doc/classes/Net/HTTP/Mkcol.html +134 -0
  60. data/doc/classes/Net/HTTP/Move.html +134 -0
  61. data/doc/classes/Net/HTTP/Options.html +134 -0
  62. data/doc/classes/Net/HTTP/Post.html +134 -0
  63. data/doc/classes/Net/HTTP/Propfind.html +134 -0
  64. data/doc/classes/Net/HTTP/Proppatch.html +134 -0
  65. data/doc/classes/Net/HTTP/Put.html +134 -0
  66. data/doc/classes/Net/HTTP/Trace.html +134 -0
  67. data/doc/classes/Net/HTTP/Unlock.html +134 -0
  68. data/doc/classes/Net/HTTPError.html +120 -0
  69. data/doc/classes/Net/HTTPExceptions.html +137 -0
  70. data/doc/classes/Net/HTTPFatalError.html +120 -0
  71. data/doc/classes/Net/HTTPGenericRequest.html +274 -0
  72. data/doc/classes/Net/HTTPGenericRequest.src/M000088.html +26 -0
  73. data/doc/classes/Net/HTTPGenericRequest.src/M000089.html +18 -0
  74. data/doc/classes/Net/HTTPGenericRequest.src/M000090.html +18 -0
  75. data/doc/classes/Net/HTTPGenericRequest.src/M000091.html +18 -0
  76. data/doc/classes/Net/HTTPGenericRequest.src/M000092.html +19 -0
  77. data/doc/classes/Net/HTTPGenericRequest.src/M000093.html +20 -0
  78. data/doc/classes/Net/HTTPGenericRequest.src/M000094.html +20 -0
  79. data/doc/classes/Net/HTTPHeader.html +734 -0
  80. data/doc/classes/Net/HTTPHeader.src/M000055.html +23 -0
  81. data/doc/classes/Net/HTTPHeader.src/M000056.html +19 -0
  82. data/doc/classes/Net/HTTPHeader.src/M000057.html +22 -0
  83. data/doc/classes/Net/HTTPHeader.src/M000058.html +22 -0
  84. data/doc/classes/Net/HTTPHeader.src/M000059.html +19 -0
  85. data/doc/classes/Net/HTTPHeader.src/M000060.html +19 -0
  86. data/doc/classes/Net/HTTPHeader.src/M000061.html +20 -0
  87. data/doc/classes/Net/HTTPHeader.src/M000063.html +18 -0
  88. data/doc/classes/Net/HTTPHeader.src/M000065.html +20 -0
  89. data/doc/classes/Net/HTTPHeader.src/M000066.html +20 -0
  90. data/doc/classes/Net/HTTPHeader.src/M000067.html +18 -0
  91. data/doc/classes/Net/HTTPHeader.src/M000068.html +18 -0
  92. data/doc/classes/Net/HTTPHeader.src/M000069.html +18 -0
  93. data/doc/classes/Net/HTTPHeader.src/M000070.html +20 -0
  94. data/doc/classes/Net/HTTPHeader.src/M000072.html +30 -0
  95. data/doc/classes/Net/HTTPHeader.src/M000073.html +43 -0
  96. data/doc/classes/Net/HTTPHeader.src/M000075.html +21 -0
  97. data/doc/classes/Net/HTTPHeader.src/M000076.html +22 -0
  98. data/doc/classes/Net/HTTPHeader.src/M000077.html +20 -0
  99. data/doc/classes/Net/HTTPHeader.src/M000078.html +21 -0
  100. data/doc/classes/Net/HTTPHeader.src/M000079.html +19 -0
  101. data/doc/classes/Net/HTTPHeader.src/M000080.html +18 -0
  102. data/doc/classes/Net/HTTPHeader.src/M000081.html +19 -0
  103. data/doc/classes/Net/HTTPHeader.src/M000082.html +19 -0
  104. data/doc/classes/Net/HTTPHeader.src/M000083.html +23 -0
  105. data/doc/classes/Net/HTTPHeader.src/M000084.html +18 -0
  106. data/doc/classes/Net/HTTPHeader.src/M000086.html +18 -0
  107. data/doc/classes/Net/HTTPHeader.src/M000087.html +18 -0
  108. data/doc/classes/Net/HTTPRequest.html +150 -0
  109. data/doc/classes/Net/HTTPRequest.src/M000102.html +21 -0
  110. data/doc/classes/Net/HTTPResponse.html +425 -0
  111. data/doc/classes/Net/HTTPResponse.src/M000162.html +18 -0
  112. data/doc/classes/Net/HTTPResponse.src/M000163.html +18 -0
  113. data/doc/classes/Net/HTTPResponse.src/M000164.html +23 -0
  114. data/doc/classes/Net/HTTPResponse.src/M000165.html +18 -0
  115. data/doc/classes/Net/HTTPResponse.src/M000166.html +32 -0
  116. data/doc/classes/Net/HTTPResponse.src/M000167.html +18 -0
  117. data/doc/classes/Net/HTTPRetriableError.html +120 -0
  118. data/doc/classes/Net/HTTPServerException.html +120 -0
  119. data/doc/classes/Net/ProtoAuthError.html +113 -0
  120. data/doc/classes/Net/ProtoCommandError.html +113 -0
  121. data/doc/classes/Net/ProtoFatalError.html +113 -0
  122. data/doc/classes/Net/ProtoRetriableError.html +113 -0
  123. data/doc/classes/Net/ProtoServerError.html +113 -0
  124. data/doc/classes/Net/ProtoSyntaxError.html +113 -0
  125. data/doc/classes/Net/ProtoUnknownError.html +113 -0
  126. data/doc/classes/Net/ProtocolError.html +111 -0
  127. data/doc/classes/Net/WriteAdapter.html +235 -0
  128. data/doc/classes/Net/WriteAdapter.src/M000095.html +19 -0
  129. data/doc/classes/Net/WriteAdapter.src/M000096.html +18 -0
  130. data/doc/classes/Net/WriteAdapter.src/M000097.html +18 -0
  131. data/doc/classes/Net/WriteAdapter.src/M000099.html +19 -0
  132. data/doc/classes/Net/WriteAdapter.src/M000100.html +18 -0
  133. data/doc/classes/Net/WriteAdapter.src/M000101.html +18 -0
  134. data/doc/classes/REXML.html +109 -0
  135. data/doc/classes/REXML/Comment.html +137 -0
  136. data/doc/classes/REXML/Comment.src/M000053.html +18 -0
  137. data/doc/classes/REXML/Node.html +240 -0
  138. data/doc/classes/REXML/Node.src/M000047.html +21 -0
  139. data/doc/classes/REXML/Node.src/M000048.html +21 -0
  140. data/doc/classes/REXML/Node.src/M000049.html +22 -0
  141. data/doc/classes/REXML/Node.src/M000050.html +18 -0
  142. data/doc/classes/REXML/Node.src/M000051.html +18 -0
  143. data/doc/classes/REXML/Node.src/M000052.html +18 -0
  144. data/doc/classes/REXML/Text.html +137 -0
  145. data/doc/classes/REXML/Text.src/M000054.html +18 -0
  146. data/doc/classes/WWW.html +130 -0
  147. data/doc/classes/WWW/Button.html +190 -0
  148. data/doc/classes/WWW/Button.src/M000028.html +18 -0
  149. data/doc/classes/WWW/Button.src/M000029.html +18 -0
  150. data/doc/classes/WWW/Button.src/M000030.html +25 -0
  151. data/doc/classes/WWW/CheckBox.html +160 -0
  152. data/doc/classes/WWW/CheckBox.src/M000024.html +18 -0
  153. data/doc/classes/WWW/Cookie.html +207 -0
  154. data/doc/classes/WWW/Cookie.src/M000032.html +59 -0
  155. data/doc/classes/WWW/Cookie.src/M000033.html +21 -0
  156. data/doc/classes/WWW/Cookie.src/M000034.html +18 -0
  157. data/doc/classes/WWW/CookieJar.html +197 -0
  158. data/doc/classes/WWW/CookieJar.src/M000008.html +18 -0
  159. data/doc/classes/WWW/CookieJar.src/M000009.html +22 -0
  160. data/doc/classes/WWW/CookieJar.src/M000010.html +33 -0
  161. data/doc/classes/WWW/CookieJar.src/M000011.html +18 -0
  162. data/doc/classes/WWW/Field.html +174 -0
  163. data/doc/classes/WWW/Field.src/M000045.html +18 -0
  164. data/doc/classes/WWW/Field.src/M000046.html +26 -0
  165. data/doc/classes/WWW/FileUpload.html +163 -0
  166. data/doc/classes/WWW/FileUpload.src/M000031.html +19 -0
  167. data/doc/classes/WWW/Form.html +152 -0
  168. data/doc/classes/WWW/Form.src/M000044.html +19 -0
  169. data/doc/classes/WWW/GlobalForm.html +271 -0
  170. data/doc/classes/WWW/GlobalForm.src/M000004.html +24 -0
  171. data/doc/classes/WWW/GlobalForm.src/M000005.html +26 -0
  172. data/doc/classes/WWW/GlobalForm.src/M000006.html +46 -0
  173. data/doc/classes/WWW/GlobalForm.src/M000007.html +46 -0
  174. data/doc/classes/WWW/ImageButton.html +157 -0
  175. data/doc/classes/WWW/ImageButton.src/M000027.html +22 -0
  176. data/doc/classes/WWW/Link.html +160 -0
  177. data/doc/classes/WWW/Link.src/M000025.html +20 -0
  178. data/doc/classes/WWW/Mechanize.html +379 -0
  179. data/doc/classes/WWW/Mechanize.src/M000013.html +21 -0
  180. data/doc/classes/WWW/Mechanize.src/M000014.html +18 -0
  181. data/doc/classes/WWW/Mechanize.src/M000015.html +24 -0
  182. data/doc/classes/WWW/Mechanize.src/M000016.html +19 -0
  183. data/doc/classes/WWW/Mechanize.src/M000017.html +23 -0
  184. data/doc/classes/WWW/Mechanize.src/M000018.html +32 -0
  185. data/doc/classes/WWW/Mechanize.src/M000019.html +19 -0
  186. data/doc/classes/WWW/Mechanize.src/M000020.html +18 -0
  187. data/doc/classes/WWW/Mechanize.src/M000021.html +33 -0
  188. data/doc/classes/WWW/Mechanize.src/M000022.html +18 -0
  189. data/doc/classes/WWW/Meta.html +113 -0
  190. data/doc/classes/WWW/Page.html +313 -0
  191. data/doc/classes/WWW/Page.src/M000036.html +18 -0
  192. data/doc/classes/WWW/Page.src/M000037.html +18 -0
  193. data/doc/classes/WWW/Page.src/M000038.html +18 -0
  194. data/doc/classes/WWW/Page.src/M000039.html +19 -0
  195. data/doc/classes/WWW/Page.src/M000040.html +19 -0
  196. data/doc/classes/WWW/Page.src/M000041.html +19 -0
  197. data/doc/classes/WWW/Page.src/M000042.html +19 -0
  198. data/doc/classes/WWW/Page.src/M000043.html +19 -0
  199. data/doc/classes/WWW/RadioButton.html +160 -0
  200. data/doc/classes/WWW/RadioButton.src/M000012.html +18 -0
  201. data/doc/classes/WWW/ResponseCodeError.html +150 -0
  202. data/doc/classes/WWW/ResponseCodeError.src/M000035.html +18 -0
  203. data/doc/classes/WWW/SelectList.html +160 -0
  204. data/doc/classes/WWW/SelectList.src/M000026.html +28 -0
  205. data/doc/created.rid +1 -0
  206. data/doc/files/CHANGELOG.html +136 -0
  207. data/doc/files/LICENSE.html +531 -0
  208. data/doc/files/README.html +161 -0
  209. data/doc/files/lib/mechanize/cookie_rb.html +101 -0
  210. data/doc/files/lib/mechanize/net-overrides/net/http_rb.html +139 -0
  211. data/doc/files/lib/mechanize/net-overrides/net/https_rb.html +109 -0
  212. data/doc/files/lib/mechanize/net-overrides/net/protocol_rb.html +117 -0
  213. data/doc/files/lib/mechanize/parsing_rb.html +267 -0
  214. data/doc/files/lib/mechanize/parsing_rb.src/M000001.html +22 -0
  215. data/doc/files/lib/mechanize/parsing_rb.src/M000002.html +44 -0
  216. data/doc/files/lib/mechanize/parsing_rb.src/M000003.html +34 -0
  217. data/doc/files/lib/mechanize_rb.html +152 -0
  218. data/doc/fr_class_index.html +80 -0
  219. data/doc/fr_file_index.html +35 -0
  220. data/doc/fr_method_index.html +194 -0
  221. data/doc/index.html +24 -0
  222. data/doc/rdoc-style.css +208 -0
  223. data/lib/mechanize.rb +128 -26
  224. data/lib/mechanize/cookie.rb +98 -0
  225. data/lib/mechanize/net-overrides/net/http.rb +2 -2
  226. data/test/README +7 -0
  227. data/test/htdocs/find_link.html +40 -0
  228. data/test/htdocs/form_test.html +154 -0
  229. data/test/htdocs/google.html +13 -0
  230. data/test/htdocs/index.html +6 -0
  231. data/test/server.rb +19 -0
  232. data/test/servlets.rb +130 -0
  233. data/test/tc_cookies.rb +125 -0
  234. data/test/tc_forms.rb +339 -0
  235. data/test/tc_links.rb +25 -0
  236. data/test/tc_mech.rb +70 -0
  237. data/test/tc_response_code.rb +31 -0
  238. data/test/ts_mech.rb +9 -0
  239. metadata +310 -41
  240. data/Rakefile +0 -14
  241. data/examples/rubyforge.rb +0 -13
  242. data/mechanize.gemspec +0 -22
@@ -0,0 +1,117 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: protocol.rb</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>protocol.rb</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>lib/mechanize/net-overrides/net/protocol.rb
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Wed Mar 22 10:31:45 PST 2006</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+ <div id="description">
72
+ <h1>net/protocol.rb</h1>
73
+ <p>
74
+ WARNING: This file is going to remove. Do not rely on the implementation
75
+ written in this file.
76
+ </p>
77
+
78
+ </div>
79
+
80
+ <div id="requires-list">
81
+ <h3 class="section-bar">Required files</h3>
82
+
83
+ <div class="name-list">
84
+ socket&nbsp;&nbsp;
85
+ timeout&nbsp;&nbsp;
86
+ </div>
87
+ </div>
88
+
89
+ </div>
90
+
91
+
92
+ </div>
93
+
94
+
95
+ <!-- if includes -->
96
+
97
+ <div id="section">
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+ <!-- if method_list -->
107
+
108
+
109
+ </div>
110
+
111
+
112
+ <div id="validator-badges">
113
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
114
+ </div>
115
+
116
+ </body>
117
+ </html>
@@ -0,0 +1,267 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: parsing.rb</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>parsing.rb</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>lib/mechanize/parsing.rb
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Wed Mar 22 10:31:45 PST 2006</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+ <div id="description">
72
+ <p>
73
+ Copyright &#169; 2005 by Michael Neumann (mneumann@ntecs.de). Released
74
+ under the same terms of license as Ruby.
75
+ </p>
76
+
77
+ </div>
78
+
79
+ <div id="requires-list">
80
+ <h3 class="section-bar">Required files</h3>
81
+
82
+ <div class="name-list">
83
+ rexml/rexml&nbsp;&nbsp;
84
+ </div>
85
+ </div>
86
+
87
+ </div>
88
+
89
+ <div id="method-list">
90
+ <h3 class="section-bar">Methods</h3>
91
+
92
+ <div class="name-list">
93
+ <a href="#M000002">extract_from_table</a>&nbsp;&nbsp;
94
+ <a href="#M000001">find_node</a>&nbsp;&nbsp;
95
+ <a href="#M000003">table_to_matrix</a>&nbsp;&nbsp;
96
+ </div>
97
+ </div>
98
+
99
+ </div>
100
+
101
+
102
+ <!-- if includes -->
103
+
104
+ <div id="section">
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+ <!-- if method_list -->
114
+ <div id="methods">
115
+ <h3 class="section-bar">Public Instance methods</h3>
116
+
117
+ <div id="method-M000002" class="method-detail">
118
+ <a name="M000002"></a>
119
+
120
+ <div class="method-heading">
121
+ <a href="parsing_rb.src/M000002.html" target="Code" class="method-signature"
122
+ onclick="popupCode('parsing_rb.src/M000002.html');return false;">
123
+ <span class="method-name">extract_from_table</span><span class="method-args">(root_node, headers, header_tags = %w(td th))</span>
124
+ </a>
125
+ </div>
126
+
127
+ <div class="method-description">
128
+ <p>
129
+ Extract specific columns (specified by the position of it&#8217;s
130
+ corrensponding header column) from a table.
131
+ </p>
132
+ <p>
133
+ Given the following table:
134
+ </p>
135
+ <pre>
136
+ &lt;table&gt;
137
+ &lt;tr&gt;
138
+ &lt;td&gt;A&lt;/td&gt;
139
+ &lt;td&gt;B&lt;/td&gt;
140
+ &lt;td&gt;C&lt;/td&gt;
141
+ &lt;/tr&gt;
142
+ &lt;tr&gt;
143
+ &lt;td&gt;A.1&lt;/td&gt;
144
+ &lt;td&gt;B.1&lt;/td&gt;
145
+ &lt;td&gt;C.1&lt;/td&gt;
146
+ &lt;/tr&gt;
147
+ &lt;tr&gt;
148
+ &lt;td&gt;A.2&lt;/td&gt;
149
+ &lt;td&gt;B.2&lt;/td&gt;
150
+ &lt;td&gt;C.2&lt;/td&gt;
151
+ &lt;/tr&gt;
152
+ &lt;/table&gt;
153
+ </pre>
154
+ <p>
155
+ To extract the first (A) and last (C) column:
156
+ </p>
157
+ <pre>
158
+ extract_from_table(root_node, [&quot;A&quot;, &quot;C&quot;])
159
+ </pre>
160
+ <p>
161
+ And you get this as result:
162
+ </p>
163
+ <pre>
164
+ [
165
+ [&quot;A.1&quot;, &quot;C.1&quot;],
166
+ [&quot;A.2&quot;, &quot;C.2&quot;]
167
+ ]
168
+ </pre>
169
+ </div>
170
+ </div>
171
+
172
+ <div id="method-M000001" class="method-detail">
173
+ <a name="M000001"></a>
174
+
175
+ <div class="method-heading">
176
+ <a href="parsing_rb.src/M000001.html" target="Code" class="method-signature"
177
+ onclick="popupCode('parsing_rb.src/M000001.html');return false;">
178
+ <span class="method-name">find_node</span><span class="method-args">(root_node, tag, attributes, text=nil)</span>
179
+ </a>
180
+ </div>
181
+
182
+ <div class="method-description">
183
+ <p>
184
+ Starting with <tt>root_node</tt>, we recursively look for a node with the
185
+ given <tt>tag</tt>, the given <tt>attributes</tt> (a Hash) and whoose text
186
+ equals or matches the <tt>text</tt> string or regular expression.
187
+ </p>
188
+ <p>
189
+ To find the following node:
190
+ </p>
191
+ <pre>
192
+ &lt;td class='abc'&gt;text&lt;/td&gt;
193
+ </pre>
194
+ <p>
195
+ We use:
196
+ </p>
197
+ <pre>
198
+ find_node(root, 'td', {'class' =&gt; 'abc'}, &quot;text&quot;)
199
+ </pre>
200
+ <p>
201
+ Returns <tt>nil</tt> if no matching node was found.
202
+ </p>
203
+ </div>
204
+ </div>
205
+
206
+ <div id="method-M000003" class="method-detail">
207
+ <a name="M000003"></a>
208
+
209
+ <div class="method-heading">
210
+ <a href="parsing_rb.src/M000003.html" target="Code" class="method-signature"
211
+ onclick="popupCode('parsing_rb.src/M000003.html');return false;">
212
+ <span class="method-name">table_to_matrix</span><span class="method-args">(table_node)</span>
213
+ </a>
214
+ </div>
215
+
216
+ <div class="method-description">
217
+ <p>
218
+ Given a HTML table, this method returns a matrix (2-dim array), with all
219
+ the table-data elements correctly placed in it.
220
+ </p>
221
+ <p>
222
+ If there&#8217;s a table data element which uses &#8216;colspan&#8217;,
223
+ that node is stored in at the current position of the row followed by
224
+ (colspan-1) nil values.
225
+ </p>
226
+ <p>
227
+ Example:
228
+ </p>
229
+ <pre>
230
+ &lt;table&gt;
231
+ &lt;tr&gt;
232
+ &lt;td&gt;A&lt;/td&gt;
233
+ &lt;td&gt;B&lt;/td&gt;
234
+ &lt;/tr&gt;
235
+ &lt;tr&gt;
236
+ &lt;td colspan=&quot;2&quot;&gt;C&lt;/td&gt;
237
+ &lt;/tr&gt;
238
+ &lt;/table&gt;
239
+ </pre>
240
+ <p>
241
+ Result:
242
+ </p>
243
+ <pre>
244
+ [
245
+ [A, B],
246
+ [C, nil]
247
+ ]
248
+ </pre>
249
+ <p>
250
+ where A, B and C are the corresponding &quot;&lt;td&gt;&quot; nodes.
251
+ </p>
252
+ </div>
253
+ </div>
254
+
255
+
256
+ </div>
257
+
258
+
259
+ </div>
260
+
261
+
262
+ <div id="validator-badges">
263
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
264
+ </div>
265
+
266
+ </body>
267
+ </html>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>find_node (lib/mechanize/parsing.rb)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/mechanize/parsing.rb, line 96</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">find_node</span>(<span class="ruby-identifier">root_node</span>, <span class="ruby-identifier">tag</span>, <span class="ruby-identifier">attributes</span>, <span class="ruby-identifier">text</span>=<span class="ruby-keyword kw">nil</span>)
15
+ <span class="ruby-identifier">root_node</span>.<span class="ruby-identifier">find_first_recursive</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">node</span><span class="ruby-operator">|</span>
16
+ <span class="ruby-identifier">node</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span> <span class="ruby-keyword kw">and</span>
17
+ <span class="ruby-identifier">attributes</span>.<span class="ruby-identifier">all?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">attr</span>, <span class="ruby-identifier">val</span><span class="ruby-operator">|</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">attributes</span>[<span class="ruby-identifier">attr</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">val</span>} <span class="ruby-keyword kw">and</span>
18
+ (<span class="ruby-identifier">text</span> <span class="ruby-value">? </span><span class="ruby-identifier">text</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">text</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">true</span>)
19
+ }
20
+ <span class="ruby-keyword kw">end</span></pre>
21
+ </body>
22
+ </html>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>extract_from_table (lib/mechanize/parsing.rb)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/mechanize/parsing.rb, line 140</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">extract_from_table</span>(<span class="ruby-identifier">root_node</span>, <span class="ruby-identifier">headers</span>, <span class="ruby-identifier">header_tags</span> = <span class="ruby-node">%w(td th)</span>)
15
+
16
+ <span class="ruby-comment cmt"># extract and collect all header nodes</span>
17
+
18
+ <span class="ruby-identifier">header_nodes</span> = <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">header</span><span class="ruby-operator">|</span>
19
+ <span class="ruby-identifier">root_node</span>.<span class="ruby-identifier">find_first_recursive</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">node</span><span class="ruby-operator">|</span>
20
+ <span class="ruby-identifier">header_tags</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">node</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">downcase</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">header</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">all_text</span>
21
+ }
22
+ }
23
+
24
+ <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;some headers not found&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">header_nodes</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">headers</span>.<span class="ruby-identifier">size</span>
25
+
26
+ <span class="ruby-comment cmt"># assert that all headers have the same parent 'header_row', which is the row</span>
27
+ <span class="ruby-comment cmt"># in which the header_nodes are contained. 'table' is the surrounding table tag.</span>
28
+
29
+ <span class="ruby-identifier">header_row</span> = <span class="ruby-identifier">header_nodes</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">parent</span>
30
+ <span class="ruby-identifier">table</span> = <span class="ruby-identifier">header_row</span>.<span class="ruby-identifier">parent</span>
31
+
32
+ <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;different parents&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">header_nodes</span>.<span class="ruby-identifier">all?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">parent</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">header_row</span>}
33
+
34
+ <span class="ruby-comment cmt"># we now iterate over all rows in the table that follows the header_row. </span>
35
+ <span class="ruby-comment cmt"># for each row we collect the elements at the same positions as the header_nodes.</span>
36
+ <span class="ruby-comment cmt"># this is what we finally return from the method. </span>
37
+
38
+ (<span class="ruby-identifier">header_row</span>.<span class="ruby-identifier">index_in_parent</span><span class="ruby-operator">+</span><span class="ruby-value">1</span> <span class="ruby-operator">..</span> <span class="ruby-identifier">table</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">size</span>).<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">inx</span><span class="ruby-operator">|</span>
39
+ <span class="ruby-identifier">row</span> = <span class="ruby-identifier">table</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-identifier">inx</span>]
40
+ <span class="ruby-identifier">header_nodes</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">row</span>.<span class="ruby-identifier">elements</span>[ <span class="ruby-identifier">n</span>.<span class="ruby-identifier">index_in_parent</span> ].<span class="ruby-identifier">text</span> }
41
+ <span class="ruby-keyword kw">end</span>
42
+ <span class="ruby-keyword kw">end</span></pre>
43
+ </body>
44
+ </html>