mechanize 0.9.3 → 1.0.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 (180) hide show
  1. data/CHANGELOG.rdoc +21 -1
  2. data/EXAMPLES.rdoc +32 -18
  3. data/GUIDE.rdoc +11 -10
  4. data/Manifest.txt +60 -49
  5. data/README.rdoc +4 -4
  6. data/Rakefile +12 -22
  7. data/examples/flickr_upload.rb +5 -5
  8. data/examples/mech-dump.rb +1 -1
  9. data/examples/proxy_req.rb +1 -1
  10. data/examples/rubyforge.rb +3 -2
  11. data/examples/spider.rb +1 -1
  12. data/lib/mechanize.rb +657 -4
  13. data/lib/mechanize/chain.rb +33 -0
  14. data/lib/mechanize/chain/auth_headers.rb +78 -0
  15. data/lib/mechanize/chain/body_decoding_handler.rb +48 -0
  16. data/lib/mechanize/chain/connection_resolver.rb +77 -0
  17. data/lib/mechanize/chain/custom_headers.rb +21 -0
  18. data/lib/{www/mechanize → mechanize}/chain/handler.rb +1 -1
  19. data/lib/mechanize/chain/header_resolver.rb +57 -0
  20. data/lib/mechanize/chain/parameter_resolver.rb +22 -0
  21. data/lib/{www/mechanize → mechanize}/chain/post_connect_hook.rb +0 -0
  22. data/lib/mechanize/chain/pre_connect_hook.rb +20 -0
  23. data/lib/mechanize/chain/request_resolver.rb +30 -0
  24. data/lib/mechanize/chain/response_body_parser.rb +38 -0
  25. data/lib/mechanize/chain/response_header_handler.rb +48 -0
  26. data/lib/mechanize/chain/response_reader.rb +39 -0
  27. data/lib/mechanize/chain/ssl_resolver.rb +40 -0
  28. data/lib/mechanize/chain/uri_resolver.rb +75 -0
  29. data/lib/mechanize/content_type_error.rb +14 -0
  30. data/lib/mechanize/cookie.rb +78 -0
  31. data/lib/mechanize/cookie_jar.rb +186 -0
  32. data/lib/mechanize/file.rb +71 -0
  33. data/lib/mechanize/file_response.rb +60 -0
  34. data/lib/mechanize/file_saver.rb +37 -0
  35. data/lib/mechanize/form.rb +455 -0
  36. data/lib/mechanize/form/button.rb +9 -0
  37. data/lib/mechanize/form/check_box.rb +11 -0
  38. data/lib/mechanize/form/field.rb +38 -0
  39. data/lib/mechanize/form/file_upload.rb +23 -0
  40. data/lib/mechanize/form/image_button.rb +21 -0
  41. data/lib/mechanize/form/multi_select_list.rb +67 -0
  42. data/lib/mechanize/form/option.rb +49 -0
  43. data/lib/mechanize/form/radio_button.rb +48 -0
  44. data/lib/mechanize/form/select_list.rb +68 -0
  45. data/lib/mechanize/headers.rb +11 -0
  46. data/lib/mechanize/history.rb +65 -0
  47. data/lib/mechanize/inspect.rb +88 -0
  48. data/lib/{www/mechanize → mechanize}/monkey_patch.rb +4 -6
  49. data/lib/mechanize/page.rb +300 -0
  50. data/lib/mechanize/page/base.rb +8 -0
  51. data/lib/mechanize/page/frame.rb +20 -0
  52. data/lib/mechanize/page/image.rb +26 -0
  53. data/lib/mechanize/page/label.rb +20 -0
  54. data/lib/mechanize/page/link.rb +48 -0
  55. data/lib/mechanize/page/meta.rb +50 -0
  56. data/lib/mechanize/pluggable_parsers.rb +101 -0
  57. data/lib/mechanize/redirect_limit_reached_error.rb +16 -0
  58. data/lib/mechanize/redirect_not_get_or_head_error.rb +18 -0
  59. data/lib/mechanize/response_code_error.rb +22 -0
  60. data/lib/mechanize/unsupported_scheme_error.rb +8 -0
  61. data/lib/mechanize/util.rb +69 -0
  62. data/test/chain/test_argument_validator.rb +3 -3
  63. data/test/chain/test_auth_headers.rb +25 -0
  64. data/test/chain/test_custom_headers.rb +3 -3
  65. data/test/chain/test_header_resolver.rb +5 -4
  66. data/test/chain/test_parameter_resolver.rb +5 -5
  67. data/test/chain/test_request_resolver.rb +5 -5
  68. data/test/chain/test_response_reader.rb +4 -4
  69. data/test/helper.rb +7 -4
  70. data/test/htdocs/tc_bad_charset.html +9 -0
  71. data/test/htdocs/tc_charset.html +6 -0
  72. data/test/htdocs/tc_field_precedence.html +11 -0
  73. data/test/htdocs/tc_meta_in_body.html +9 -0
  74. data/test/htdocs/test_bad_encoding.html +52 -0
  75. data/test/servlets.rb +2 -2
  76. data/test/test_authenticate.rb +4 -4
  77. data/test/test_bad_links.rb +2 -2
  78. data/test/test_blank_form.rb +2 -2
  79. data/test/test_checkboxes.rb +2 -2
  80. data/test/test_content_type.rb +3 -3
  81. data/test/test_cookie_class.rb +13 -13
  82. data/test/test_cookie_jar.rb +81 -119
  83. data/test/test_cookies.rb +2 -2
  84. data/test/test_encoded_links.rb +2 -2
  85. data/test/test_errors.rb +3 -3
  86. data/test/test_field_precedence.rb +30 -0
  87. data/test/test_follow_meta.rb +23 -12
  88. data/test/test_form_action.rb +10 -2
  89. data/test/test_form_as_hash.rb +2 -2
  90. data/test/test_form_button.rb +3 -3
  91. data/test/test_form_no_inputname.rb +2 -2
  92. data/test/test_forms.rb +9 -2
  93. data/test/test_frames.rb +2 -2
  94. data/test/test_get_headers.rb +2 -2
  95. data/test/test_gzipping.rb +3 -3
  96. data/test/test_hash_api.rb +2 -2
  97. data/test/test_history.rb +8 -8
  98. data/test/test_history_added.rb +2 -2
  99. data/test/test_html_unscape_forms.rb +15 -8
  100. data/test/test_if_modified_since.rb +2 -2
  101. data/test/test_keep_alive.rb +2 -2
  102. data/test/test_links.rb +11 -3
  103. data/test/test_mech.rb +3 -3
  104. data/test/test_mech_proxy.rb +16 -0
  105. data/test/test_mechanize_file.rb +8 -8
  106. data/test/test_meta.rb +20 -20
  107. data/test/test_multi_select.rb +2 -2
  108. data/test/test_no_attributes.rb +2 -2
  109. data/test/test_option.rb +2 -2
  110. data/test/test_page.rb +9 -4
  111. data/test/test_pluggable_parser.rb +15 -15
  112. data/test/test_post_form.rb +2 -2
  113. data/test/test_pretty_print.rb +3 -3
  114. data/test/test_radiobutton.rb +2 -2
  115. data/test/test_redirect_limit_reached.rb +2 -4
  116. data/test/test_redirect_verb_handling.rb +9 -5
  117. data/test/test_referer.rb +2 -2
  118. data/test/test_relative_links.rb +2 -2
  119. data/test/test_request.rb +2 -2
  120. data/test/test_response_code.rb +4 -4
  121. data/test/test_save_file.rb +4 -4
  122. data/test/test_scheme.rb +5 -5
  123. data/test/test_select.rb +13 -3
  124. data/test/test_select_all.rb +2 -2
  125. data/test/test_select_none.rb +2 -2
  126. data/test/test_select_noopts.rb +2 -2
  127. data/test/test_set_fields.rb +2 -2
  128. data/test/test_ssl_server.rb +2 -2
  129. data/test/test_subclass.rb +18 -2
  130. data/test/test_textarea.rb +2 -2
  131. data/test/test_upload.rb +2 -2
  132. data/test/test_util.rb +7 -0
  133. data/test/test_verbs.rb +3 -3
  134. metadata +70 -55
  135. data/lib/www/mechanize.rb +0 -589
  136. data/lib/www/mechanize/chain.rb +0 -34
  137. data/lib/www/mechanize/chain/auth_headers.rb +0 -80
  138. data/lib/www/mechanize/chain/body_decoding_handler.rb +0 -48
  139. data/lib/www/mechanize/chain/connection_resolver.rb +0 -78
  140. data/lib/www/mechanize/chain/custom_headers.rb +0 -23
  141. data/lib/www/mechanize/chain/header_resolver.rb +0 -53
  142. data/lib/www/mechanize/chain/parameter_resolver.rb +0 -23
  143. data/lib/www/mechanize/chain/pre_connect_hook.rb +0 -22
  144. data/lib/www/mechanize/chain/request_resolver.rb +0 -32
  145. data/lib/www/mechanize/chain/response_body_parser.rb +0 -40
  146. data/lib/www/mechanize/chain/response_header_handler.rb +0 -50
  147. data/lib/www/mechanize/chain/response_reader.rb +0 -41
  148. data/lib/www/mechanize/chain/ssl_resolver.rb +0 -42
  149. data/lib/www/mechanize/chain/uri_resolver.rb +0 -77
  150. data/lib/www/mechanize/content_type_error.rb +0 -16
  151. data/lib/www/mechanize/cookie.rb +0 -72
  152. data/lib/www/mechanize/cookie_jar.rb +0 -191
  153. data/lib/www/mechanize/file.rb +0 -73
  154. data/lib/www/mechanize/file_response.rb +0 -62
  155. data/lib/www/mechanize/file_saver.rb +0 -39
  156. data/lib/www/mechanize/form.rb +0 -360
  157. data/lib/www/mechanize/form/button.rb +0 -8
  158. data/lib/www/mechanize/form/check_box.rb +0 -13
  159. data/lib/www/mechanize/form/field.rb +0 -28
  160. data/lib/www/mechanize/form/file_upload.rb +0 -24
  161. data/lib/www/mechanize/form/image_button.rb +0 -23
  162. data/lib/www/mechanize/form/multi_select_list.rb +0 -69
  163. data/lib/www/mechanize/form/option.rb +0 -51
  164. data/lib/www/mechanize/form/radio_button.rb +0 -38
  165. data/lib/www/mechanize/form/select_list.rb +0 -45
  166. data/lib/www/mechanize/headers.rb +0 -12
  167. data/lib/www/mechanize/history.rb +0 -67
  168. data/lib/www/mechanize/inspect.rb +0 -90
  169. data/lib/www/mechanize/page.rb +0 -176
  170. data/lib/www/mechanize/page/base.rb +0 -10
  171. data/lib/www/mechanize/page/frame.rb +0 -22
  172. data/lib/www/mechanize/page/link.rb +0 -50
  173. data/lib/www/mechanize/page/meta.rb +0 -51
  174. data/lib/www/mechanize/pluggable_parsers.rb +0 -103
  175. data/lib/www/mechanize/redirect_limit_reached_error.rb +0 -18
  176. data/lib/www/mechanize/redirect_not_get_or_head_error.rb +0 -20
  177. data/lib/www/mechanize/response_code_error.rb +0 -25
  178. data/lib/www/mechanize/unsupported_scheme_error.rb +0 -10
  179. data/lib/www/mechanize/util.rb +0 -76
  180. data/mechanize.gemspec +0 -42
@@ -1,10 +1,30 @@
1
1
  = Mechanize CHANGELOG
2
2
 
3
- === HEAD
3
+ === 1.0.0
4
+
5
+ * New Features:
6
+
7
+ * An optional verb may be passed to Mechanize#get GH #26
8
+ * The WWW constant is deprecated. Switch to the top level constant Mechanize
9
+ * SelectList#option_with and options_with for finding options
10
+
11
+ * Bug Fixes:
12
+
13
+ * Rescue errors from bogus encodings
14
+ * 7bit content-encoding support. Thanks sporkmonger! GH #2
15
+ * Fixed a bug with iconv conversion. Thanks awesomeman! GH #9
16
+ * meta redirects outside the head are not followed. GH #13
17
+ * Form submissions work with nil page encodings. GH #25
18
+ * Fixing default values with serialized cookies. GH #3
19
+ * Checkboxes and fields are sorted by page appearance before submitting. #11
20
+
21
+ === 0.9.3
4
22
 
5
23
  * Bug Fixes:
6
24
 
7
25
  * Do not apply encoding if encoding equals 'none' Thanks Akinori MUSHA!
26
+ * Fixed Page#encoding= when changing the value from or to nil. Made
27
+ it return the assigned value while at it. (Akinori MUSHA)
8
28
  * Custom request headers may be supplied WWW::Mechanize#request_headers
9
29
  RF #24516
10
30
  * HTML Parser may be set on a per instance level WWW::Mechanize#html_parser
@@ -1,10 +1,15 @@
1
- = WWW::Mechanize examples
1
+ = Mechanize examples
2
+
3
+ Note: Several examples show methods chained to the end of do/end blocks.
4
+ Do...end is the same as curly braces ({...}). For example, do ... end.submit
5
+ is the same as { ... }.submit.
2
6
 
3
7
  == Google
8
+
4
9
  require 'rubygems'
5
10
  require 'mechanize'
6
11
 
7
- a = WWW::Mechanize.new { |agent|
12
+ a = Mechanize.new { |agent|
8
13
  agent.user_agent_alias = 'Mac Safari'
9
14
  }
10
15
 
@@ -20,10 +25,13 @@
20
25
 
21
26
  == Rubyforge
22
27
 
23
- a = WWW::Mechanize.new
28
+ require 'rubygems'
29
+ require 'mechanize'
30
+
31
+ a = Mechanize.new
24
32
  a.get('http://rubyforge.org/') do |page|
25
33
  # Click the login link
26
- login_page = a.click(page.links.text(/Log In/))
34
+ login_page = a.click(page.link_with(:text => /Log In/))
27
35
 
28
36
  # Submit the login form
29
37
  my_page = login_page.form_with(:action => '/account/login.php') do |f|
@@ -41,25 +49,30 @@
41
49
  == File Upload
42
50
  Upload a file to flickr.
43
51
 
44
- a = WWW::Mechanize.new { |agent|
52
+ require 'rubygems'
53
+ require 'mechanize'
54
+
55
+ abort "#{$0} login passwd filename" if (ARGV.size != 3)
56
+
57
+ a = Mechanize.new { |agent|
45
58
  # Flickr refreshes after login
46
59
  agent.follow_meta_refresh = true
47
60
  }
48
-
61
+
49
62
  a.get('http://flickr.com/') do |home_page|
50
- signin_page = a.click(home_page.links.text(/Sign In/))
51
-
63
+ signin_page = a.click(home_page.link_with(:text => /Sign In/))
64
+
52
65
  my_page = signin_page.form_with(:name => 'login_form') do |form|
53
66
  form.login = ARGV[0]
54
67
  form.passwd = ARGV[1]
55
68
  end.submit
56
-
69
+
57
70
  # Click the upload link
58
- upload_page = a.click(my_page.links.text(/Upload/))
59
-
71
+ upload_page = a.click(my_page.link_with(:text => /Upload/))
72
+
60
73
  # We want the basic upload page.
61
- upload_page = a.click(upload_page.links.text(/basic Uploader/))
62
-
74
+ upload_page = a.click(upload_page.link_with(:text => /basic Uploader/))
75
+
63
76
  # Upload the file
64
77
  upload_page.form_with(:method => 'POST') do |upload_form|
65
78
  upload_form.file_uploads.first.file_name = ARGV[2]
@@ -74,7 +87,7 @@ This example shows you how:
74
87
  require 'mechanize'
75
88
  require 'rubyful_soup'
76
89
 
77
- class SoupParser < WWW::Mechanize::Page
90
+ class SoupParser < Mechanize::Page
78
91
  attr_reader :soup
79
92
  def initialize(uri = nil, response = nil, body = nil, code = nil)
80
93
  @soup = BeautifulSoup.new(body)
@@ -82,7 +95,7 @@ This example shows you how:
82
95
  end
83
96
  end
84
97
 
85
- agent = WWW::Mechanize.new
98
+ agent = Mechanize.new
86
99
  agent.pluggable_parser.html = SoupParser
87
100
 
88
101
  Now all HTML pages will be parsed with the SoupParser class, and automatically
@@ -94,7 +107,7 @@ Beautiful Soup for that page.
94
107
  require 'rubygems'
95
108
  require 'mechanize'
96
109
 
97
- agent = WWW::Mechanize.new
110
+ agent = Mechanize.new
98
111
  agent.set_proxy('localhost', '8000')
99
112
  page = agent.get(ARGV[0])
100
113
  puts page.body
@@ -108,9 +121,10 @@ possible exceptions).
108
121
 
109
122
  This example also demonstrates subclassing Mechanize.
110
123
 
124
+ require 'rubygems'
111
125
  require 'mechanize'
112
126
 
113
- class TestMech < WWW::Mechanize
127
+ class TestMech < Mechanize
114
128
  def process
115
129
  get 'http://rubyforge.org/'
116
130
  search_form = page.forms.first
@@ -154,7 +168,7 @@ openssl.exe pkcs12 -in input_file.p12 -clcerts -out example.cer -nokeys
154
168
  require 'mechanize'
155
169
 
156
170
  # create Mechanize instance
157
- agent = WWW::Mechanize.new
171
+ agent = Mechanize.new
158
172
 
159
173
  # set the path of the certificate file
160
174
  agent.cert = 'example.cer'
data/GUIDE.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = Getting Started With WWW::Mechanize
1
+ = Getting Started With Mechanize
2
2
  This guide is meant to get you started using Mechanize. By the end of this
3
3
  guide, you should be able to fetch pages, click links, fill out and submit
4
4
  forms, scrape data, and many other hopefully useful things. This guide
@@ -11,7 +11,7 @@ instantiate a new mechanize object:
11
11
  require 'rubygems'
12
12
  require 'mechanize'
13
13
 
14
- agent = WWW::Mechanize.new
14
+ agent = Mechanize.new
15
15
  Now we'll use the agent we've created to fetch a page. Let's fetch google
16
16
  with our mechanize agent:
17
17
  page = agent.get('http://google.com/')
@@ -34,18 +34,18 @@ Now that we've fetched google's homepage, lets try listing all of the links:
34
34
  We can list the links, but Mechanize gives a few shortcuts to help us find a
35
35
  link to click on. Lets say we wanted to click the link whose text is 'News'.
36
36
  Normally, we would have to do this:
37
- page = agent.click page.links.find { |l| l.text == 'News' }
37
+ page = agent.page.links.find { |l| l.text == 'News' }.click
38
38
  But Mechanize gives us a shortcut. Instead we can say this:
39
- page = agent.click page.link_with(:text => 'News')
39
+ page = agent.page.link_with(:text => 'News').click
40
40
  That shortcut says "find all links with the name 'News'". You're probably
41
41
  thinking "there could be multiple links with that text!", and you would be
42
42
  correct! If you use the plural form, you can access the list.
43
43
  If you wanted to click on the second news link, you could do this:
44
- agent.click page.links_with(:text => 'News')[1]
44
+ agent.page.links_with(:text => 'News')[1].click
45
45
  We can even find a link with a certain href like so:
46
- page.links_with(:href => '/something')
46
+ page.link_with(:href => '/something')
47
47
  Or chain them together to find a link with certain text and certain href:
48
- page.links_with(:text => 'News', :href => '/something')
48
+ page.link_with(:text => 'News', :href => '/something')
49
49
 
50
50
  These shortcuts that mechanize provides are available on any list that you
51
51
  can fetch like frames, iframes, or forms. Now that we know how to find and
@@ -56,7 +56,7 @@ Lets continue with our google example. Here's the code we have so far:
56
56
  require 'rubygems'
57
57
  require 'mechanize'
58
58
 
59
- agent = WWW::Mechanize.new
59
+ agent = Mechanize.new
60
60
  page = agent.get('http://google.com/')
61
61
  If we pretty print the page, we can see that there is one form named 'f',
62
62
  that has a couple buttons and a few fields:
@@ -69,7 +69,7 @@ object. So lets set the form field named 'q' on the form to 'ruby mechanize':
69
69
  google_form.q = 'ruby mechanize'
70
70
  To make sure that we set the value, lets pretty print the form, and you should
71
71
  see a line similar to this:
72
- #<WWW::Mechanize::Field:0x1403488 @name="q", @value="ruby mechanize">
72
+ #<Mechanize::Field:0x1403488 @name="q", @value="ruby mechanize">
73
73
  If you saw that the value of 'q' changed, you're on the right track! Now we
74
74
  can submit the form and 'press' the submit button and print the results:
75
75
  page = agent.submit(google_form, google_form.buttons.first)
@@ -83,7 +83,7 @@ Lets take a look at the code all together:
83
83
  require 'rubygems'
84
84
  require 'mechanize'
85
85
 
86
- agent = WWW::Mechanize.new
86
+ agent = Mechanize.new
87
87
  page = agent.get('http://google.com/')
88
88
  google_form = page.form('f')
89
89
  google_form.q = 'ruby mechanize'
@@ -120,3 +120,4 @@ html. What does this mean for you? You can treat a mechanize page like
120
120
  an nokogiri object. After you have used Mechanize to navigate to the page
121
121
  that you need to scrape, then scrape it using nokogiri methods:
122
122
  agent.get('http://someurl.com/').search(".//p[@class='posted']")
123
+
@@ -12,57 +12,59 @@ examples/proxy_req.rb
12
12
  examples/rubyforge.rb
13
13
  examples/spider.rb
14
14
  lib/mechanize.rb
15
- lib/www/mechanize.rb
16
- lib/www/mechanize/chain.rb
17
- lib/www/mechanize/chain/auth_headers.rb
18
- lib/www/mechanize/chain/body_decoding_handler.rb
19
- lib/www/mechanize/chain/connection_resolver.rb
20
- lib/www/mechanize/chain/custom_headers.rb
21
- lib/www/mechanize/chain/handler.rb
22
- lib/www/mechanize/chain/header_resolver.rb
23
- lib/www/mechanize/chain/parameter_resolver.rb
24
- lib/www/mechanize/chain/post_connect_hook.rb
25
- lib/www/mechanize/chain/pre_connect_hook.rb
26
- lib/www/mechanize/chain/request_resolver.rb
27
- lib/www/mechanize/chain/response_body_parser.rb
28
- lib/www/mechanize/chain/response_header_handler.rb
29
- lib/www/mechanize/chain/response_reader.rb
30
- lib/www/mechanize/chain/ssl_resolver.rb
31
- lib/www/mechanize/chain/uri_resolver.rb
32
- lib/www/mechanize/content_type_error.rb
33
- lib/www/mechanize/cookie.rb
34
- lib/www/mechanize/cookie_jar.rb
35
- lib/www/mechanize/file.rb
36
- lib/www/mechanize/file_response.rb
37
- lib/www/mechanize/file_saver.rb
38
- lib/www/mechanize/form.rb
39
- lib/www/mechanize/form/button.rb
40
- lib/www/mechanize/form/check_box.rb
41
- lib/www/mechanize/form/field.rb
42
- lib/www/mechanize/form/file_upload.rb
43
- lib/www/mechanize/form/image_button.rb
44
- lib/www/mechanize/form/multi_select_list.rb
45
- lib/www/mechanize/form/option.rb
46
- lib/www/mechanize/form/radio_button.rb
47
- lib/www/mechanize/form/select_list.rb
48
- lib/www/mechanize/headers.rb
49
- lib/www/mechanize/history.rb
50
- lib/www/mechanize/inspect.rb
51
- lib/www/mechanize/monkey_patch.rb
52
- lib/www/mechanize/page.rb
53
- lib/www/mechanize/page/base.rb
54
- lib/www/mechanize/page/frame.rb
55
- lib/www/mechanize/page/link.rb
56
- lib/www/mechanize/page/meta.rb
57
- lib/www/mechanize/pluggable_parsers.rb
58
- lib/www/mechanize/redirect_limit_reached_error.rb
59
- lib/www/mechanize/redirect_not_get_or_head_error.rb
60
- lib/www/mechanize/response_code_error.rb
61
- lib/www/mechanize/unsupported_scheme_error.rb
62
- lib/www/mechanize/util.rb
63
- mechanize.gemspec
15
+ lib/mechanize/chain.rb
16
+ lib/mechanize/chain/auth_headers.rb
17
+ lib/mechanize/chain/body_decoding_handler.rb
18
+ lib/mechanize/chain/connection_resolver.rb
19
+ lib/mechanize/chain/custom_headers.rb
20
+ lib/mechanize/chain/handler.rb
21
+ lib/mechanize/chain/header_resolver.rb
22
+ lib/mechanize/chain/parameter_resolver.rb
23
+ lib/mechanize/chain/post_connect_hook.rb
24
+ lib/mechanize/chain/pre_connect_hook.rb
25
+ lib/mechanize/chain/request_resolver.rb
26
+ lib/mechanize/chain/response_body_parser.rb
27
+ lib/mechanize/chain/response_header_handler.rb
28
+ lib/mechanize/chain/response_reader.rb
29
+ lib/mechanize/chain/ssl_resolver.rb
30
+ lib/mechanize/chain/uri_resolver.rb
31
+ lib/mechanize/content_type_error.rb
32
+ lib/mechanize/cookie.rb
33
+ lib/mechanize/cookie_jar.rb
34
+ lib/mechanize/file.rb
35
+ lib/mechanize/file_response.rb
36
+ lib/mechanize/file_saver.rb
37
+ lib/mechanize/form.rb
38
+ lib/mechanize/form/button.rb
39
+ lib/mechanize/form/check_box.rb
40
+ lib/mechanize/form/field.rb
41
+ lib/mechanize/form/file_upload.rb
42
+ lib/mechanize/form/image_button.rb
43
+ lib/mechanize/form/multi_select_list.rb
44
+ lib/mechanize/form/option.rb
45
+ lib/mechanize/form/radio_button.rb
46
+ lib/mechanize/form/select_list.rb
47
+ lib/mechanize/headers.rb
48
+ lib/mechanize/history.rb
49
+ lib/mechanize/inspect.rb
50
+ lib/mechanize/monkey_patch.rb
51
+ lib/mechanize/page.rb
52
+ lib/mechanize/page/base.rb
53
+ lib/mechanize/page/frame.rb
54
+ lib/mechanize/page/image.rb
55
+ lib/mechanize/page/label.rb
56
+ lib/mechanize/page/link.rb
57
+ lib/mechanize/page/meta.rb
58
+ lib/mechanize/pluggable_parsers.rb
59
+ lib/mechanize/redirect_limit_reached_error.rb
60
+ lib/mechanize/redirect_not_get_or_head_error.rb
61
+ lib/mechanize/response_code_error.rb
62
+ lib/mechanize/unsupported_scheme_error.rb
63
+ lib/mechanize/util.rb
64
64
  test/chain/test_argument_validator.rb
65
+ test/chain/test_auth_headers.rb
65
66
  test/chain/test_custom_headers.rb
67
+ test/chain/test_header_resolver.rb
66
68
  test/chain/test_parameter_resolver.rb
67
69
  test/chain/test_request_resolver.rb
68
70
  test/chain/test_response_reader.rb
@@ -96,20 +98,25 @@ test/htdocs/link with space.html
96
98
  test/htdocs/meta_cookie.html
97
99
  test/htdocs/no_title_test.html
98
100
  test/htdocs/relative/tc_relative_links.html
101
+ test/htdocs/tc_bad_charset.html
99
102
  test/htdocs/tc_bad_links.html
100
103
  test/htdocs/tc_base_link.html
101
104
  test/htdocs/tc_blank_form.html
105
+ test/htdocs/tc_charset.html
102
106
  test/htdocs/tc_checkboxes.html
103
107
  test/htdocs/tc_encoded_links.html
108
+ test/htdocs/tc_field_precedence.html
104
109
  test/htdocs/tc_follow_meta.html
105
110
  test/htdocs/tc_form_action.html
106
111
  test/htdocs/tc_links.html
112
+ test/htdocs/tc_meta_in_body.html
107
113
  test/htdocs/tc_no_attributes.html
108
114
  test/htdocs/tc_pretty_print.html
109
115
  test/htdocs/tc_radiobuttons.html
110
116
  test/htdocs/tc_referer.html
111
117
  test/htdocs/tc_relative_links.html
112
118
  test/htdocs/tc_textarea.html
119
+ test/htdocs/test_bad_encoding.html
113
120
  test/htdocs/unusual______.html
114
121
  test/servlets.rb
115
122
  test/ssl_server.rb
@@ -123,6 +130,7 @@ test/test_cookie_jar.rb
123
130
  test/test_cookies.rb
124
131
  test/test_encoded_links.rb
125
132
  test/test_errors.rb
133
+ test/test_field_precedence.rb
126
134
  test/test_follow_meta.rb
127
135
  test/test_form_action.rb
128
136
  test/test_form_as_hash.rb
@@ -140,7 +148,9 @@ test/test_if_modified_since.rb
140
148
  test/test_keep_alive.rb
141
149
  test/test_links.rb
142
150
  test/test_mech.rb
151
+ test/test_mech_proxy.rb
143
152
  test/test_mechanize_file.rb
153
+ test/test_meta.rb
144
154
  test/test_multi_select.rb
145
155
  test/test_no_attributes.rb
146
156
  test/test_option.rb
@@ -166,4 +176,5 @@ test/test_ssl_server.rb
166
176
  test/test_subclass.rb
167
177
  test/test_textarea.rb
168
178
  test/test_upload.rb
179
+ test/test_util.rb
169
180
  test/test_verbs.rb
@@ -1,6 +1,6 @@
1
- = WWW::Mechanize
1
+ = Mechanize
2
2
 
3
- * http://mechanize.rubyforge.org/
3
+ * http://mechanize.rubyforge.org
4
4
  * http://github.com/tenderlove/mechanize/tree/master
5
5
 
6
6
  == DESCRIPTION
@@ -24,7 +24,7 @@ The mechanize mailing list is available here:
24
24
 
25
25
  The bug tracker is available here:
26
26
 
27
- * http://rubyforge.org/tracker/?atid=5709&group_id=1453
27
+ * http://github.com/tenderlove/mechanize/issues
28
28
 
29
29
  == Examples
30
30
 
@@ -35,7 +35,7 @@ Also, check out the EXAMPLES file.
35
35
 
36
36
  Copyright (c) 2005 by Michael Neumann (mneumann@ntecs.de)
37
37
 
38
- Copyright (c) 2006-2009:
38
+ Copyright (c) 2006-2010:
39
39
 
40
40
  * {Aaron Patterson}[http://tenderlovemaking.com] (aaronp@rubyforge.org)
41
41
  * {Mike Dalessio}[http://mike.daless.io] (mike@csa.net)
data/Rakefile CHANGED
@@ -1,17 +1,14 @@
1
1
  require 'rubygems'
2
2
  require 'hoe'
3
3
 
4
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "lib")
5
- require 'mechanize'
4
+ Hoe.spec 'mechanize' do
5
+ developer 'Aaron Patterson', 'aaronp@rubyforge.org'
6
+ developer 'Mike Dalessio', 'mike.dalessio@gmail.com'
6
7
 
7
- HOE = Hoe.new('mechanize', WWW::Mechanize::VERSION) do |p|
8
- p.developer('Aaron Patterson','aaronp@rubyforge.org')
9
- p.developer('Mike Dalessio','mike.dalessio@gmail.com')
10
- p.readme_file = 'README.rdoc'
11
- p.history_file = 'CHANGELOG.rdoc'
12
- p.extra_rdoc_files = FileList['*.rdoc']
13
- p.summary = "Mechanize provides automated web-browsing"
14
- p.extra_deps = [['nokogiri', '>= 1.2.1']]
8
+ self.readme_file = 'README.rdoc'
9
+ self.history_file = 'CHANGELOG.rdoc'
10
+ self.extra_rdoc_files += Dir['*.rdoc']
11
+ self.extra_deps << ['nokogiri', '>= 1.2.1']
15
12
  end
16
13
 
17
14
  desc "Update SSL Certificate"
@@ -26,18 +23,11 @@ task('ssl_cert') do |p|
26
23
  sh "rm server.key.org"
27
24
  end
28
25
 
29
- namespace :gem do
30
- desc 'Generate a gem spec'
31
- task :spec do
32
- File.open("#{HOE.name}.gemspec", 'w') do |f|
33
- HOE.spec.version = "#{HOE.version}.#{Time.now.strftime("%Y%m%d%H%M%S")}"
34
- f.write(HOE.spec.to_ruby)
35
- end
26
+ desc 'Generate a gem spec'
27
+ task "gem:spec" do
28
+ File.open("mechanize.gemspec", 'w') do |f|
29
+ now = Time.now.strftime("%Y%m%d%H%M%S")
30
+ f.write `rake debug_gem`.sub(/(s.version = ".*)(")/) { "#{$1}.#{now}#{$2}" }
36
31
  end
37
32
  end
38
33
 
39
- desc "Run code-coverage analysis"
40
- task :coverage do
41
- rm_rf "coverage"
42
- sh "rcov -x Library -I lib:test #{Dir[*HOE.test_globs].join(' ')}"
43
- end