mechanize 1.0.1.beta.20110107104205 → 2.0.pre.1
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.
- data.tar.gz.sig +2 -0
- data/{lib/mechanize/chain/post_connect_hook.rb → .gemtest} +0 -0
- data/CHANGELOG.rdoc +51 -6
- data/EXAMPLES.rdoc +5 -3
- data/GUIDE.rdoc +72 -32
- data/LICENSE.rdoc +20 -340
- data/Manifest.txt +20 -27
- data/README.rdoc +12 -9
- data/Rakefile +5 -2
- data/examples/spider.rb +13 -2
- data/lib/mechanize.rb +545 -267
- data/lib/mechanize/content_type_error.rb +1 -1
- data/lib/mechanize/cookie.rb +72 -65
- data/lib/mechanize/cookie_jar.rb +197 -148
- data/lib/mechanize/element_matcher.rb +35 -0
- data/lib/mechanize/file.rb +3 -1
- data/lib/mechanize/file_connection.rb +17 -0
- data/lib/mechanize/file_request.rb +26 -0
- data/lib/mechanize/file_response.rb +61 -47
- data/lib/mechanize/form.rb +57 -58
- data/lib/mechanize/form/image_button.rb +2 -3
- data/lib/mechanize/form/multi_select_list.rb +71 -55
- data/lib/mechanize/form/select_list.rb +34 -62
- data/lib/mechanize/monkey_patch.rb +13 -11
- data/lib/mechanize/page.rb +277 -270
- data/lib/mechanize/page/image.rb +6 -2
- data/lib/mechanize/redirect_limit_reached_error.rb +1 -1
- data/lib/mechanize/redirect_not_get_or_head_error.rb +1 -1
- data/lib/mechanize/response_code_error.rb +3 -3
- data/lib/mechanize/unsupported_scheme_error.rb +1 -1
- data/lib/mechanize/uri_resolver.rb +82 -0
- data/lib/mechanize/util.rb +76 -60
- data/test/helper.rb +35 -5
- data/test/htdocs/dir with spaces/foo.html +1 -0
- data/test/htdocs/rails_3_encoding_hack_form_test.html +27 -0
- data/test/htdocs/tc_base_images.html +10 -0
- data/test/htdocs/tc_images.html +8 -0
- data/test/htdocs/test_click.html +11 -0
- data/test/servlets.rb +3 -2
- data/test/test_authenticate.rb +5 -5
- data/test/test_errors.rb +8 -8
- data/test/test_follow_meta.rb +4 -4
- data/test/test_form_as_hash.rb +4 -4
- data/test/test_forms.rb +3 -7
- data/test/test_hash_api.rb +2 -2
- data/test/test_headers.rb +1 -1
- data/test/test_images.rb +19 -0
- data/test/test_mech.rb +6 -6
- data/test/test_mechanize.rb +687 -0
- data/test/{test_cookie_class.rb → test_mechanize_cookie.rb} +52 -45
- data/test/test_mechanize_cookie_jar.rb +400 -0
- data/test/test_mechanize_file.rb +7 -1
- data/test/test_mechanize_file_request.rb +19 -0
- data/test/test_mechanize_file_response.rb +21 -0
- data/test/test_mechanize_form_image_button.rb +12 -0
- data/test/test_mechanize_page.rb +165 -0
- data/test/test_mechanize_uri_resolver.rb +29 -0
- data/test/{test_util.rb → test_mechanize_util.rb} +1 -1
- data/test/test_multi_select.rb +12 -0
- data/test/test_post_form.rb +7 -0
- data/test/test_redirect_verb_handling.rb +6 -6
- data/test/test_scheme.rb +0 -7
- data/test/test_verbs.rb +3 -3
- metadata +106 -72
- metadata.gz.sig +0 -0
- data/lib/mechanize/chain.rb +0 -36
- data/lib/mechanize/chain/auth_headers.rb +0 -78
- data/lib/mechanize/chain/body_decoding_handler.rb +0 -50
- data/lib/mechanize/chain/connection_resolver.rb +0 -28
- data/lib/mechanize/chain/custom_headers.rb +0 -21
- data/lib/mechanize/chain/handler.rb +0 -9
- data/lib/mechanize/chain/header_resolver.rb +0 -48
- data/lib/mechanize/chain/parameter_resolver.rb +0 -22
- data/lib/mechanize/chain/pre_connect_hook.rb +0 -20
- data/lib/mechanize/chain/request_resolver.rb +0 -31
- data/lib/mechanize/chain/response_body_parser.rb +0 -36
- data/lib/mechanize/chain/response_header_handler.rb +0 -34
- data/lib/mechanize/chain/response_reader.rb +0 -39
- data/lib/mechanize/chain/ssl_resolver.rb +0 -40
- data/lib/mechanize/chain/uri_resolver.rb +0 -75
- data/test/chain/test_argument_validator.rb +0 -14
- data/test/chain/test_auth_headers.rb +0 -25
- data/test/chain/test_custom_headers.rb +0 -18
- data/test/chain/test_header_resolver.rb +0 -27
- data/test/chain/test_parameter_resolver.rb +0 -35
- data/test/chain/test_request_resolver.rb +0 -29
- data/test/chain/test_response_reader.rb +0 -24
- data/test/test_cookie_jar.rb +0 -324
- data/test/test_page.rb +0 -124
data/test/test_mechanize_file.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestMechanizeFile < Test::Unit::TestCase
|
4
4
|
def test_content_disposition
|
5
5
|
file = Mechanize::File.new(
|
6
6
|
URI.parse('http://localhost/foo'),
|
@@ -21,6 +21,12 @@ class MechanizeFileTest < Test::Unit::TestCase
|
|
21
21
|
assert_equal('genome.jpeg', file.filename)
|
22
22
|
end
|
23
23
|
|
24
|
+
def test_content_disposition_double_semicolon
|
25
|
+
agent = Mechanize.new
|
26
|
+
page = agent.get("http://localhost/http_headers?content-disposition=#{CGI.escape('attachment;; filename=fooooo')}")
|
27
|
+
assert page.parser
|
28
|
+
end
|
29
|
+
|
24
30
|
def test_from_uri
|
25
31
|
file = Mechanize::File.new(
|
26
32
|
URI.parse('http://localhost/foo'),
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMechanizeFileRequest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_initialize
|
6
|
+
uri = URI.parse 'http://example/'
|
7
|
+
|
8
|
+
r = Mechanize::FileRequest.new uri
|
9
|
+
|
10
|
+
assert_equal uri, r.uri
|
11
|
+
assert_equal '/', r.path
|
12
|
+
|
13
|
+
assert_respond_to r, :[]=
|
14
|
+
assert_respond_to r, :add_field
|
15
|
+
assert_respond_to r, :each_header
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMechanizeFileConnection < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_request
|
6
|
+
uri = URI.parse "file://#{File.expand_path __FILE__}"
|
7
|
+
conn = Mechanize::FileConnection.new
|
8
|
+
|
9
|
+
body = ''
|
10
|
+
|
11
|
+
conn.request uri, nil do |response|
|
12
|
+
response.read_body do |part|
|
13
|
+
body << part
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_equal File.read(__FILE__), body
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMechanizeFormImageButton < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_query_value
|
6
|
+
button = Mechanize::Form::ImageButton.new 'name' => 'image_button'
|
7
|
+
|
8
|
+
assert_equal [%w[image_button.x 0], %w[image_button.y 0]],
|
9
|
+
button.query_value
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
class TestMechanizePage < Test::Unit::TestCase
|
7
|
+
|
8
|
+
WINDOWS_1255 = <<-HTML
|
9
|
+
<meta http-equiv="content-type" content="text/html; charset=windows-1255">
|
10
|
+
<title>hi</title>
|
11
|
+
HTML
|
12
|
+
|
13
|
+
BAD = <<-HTML
|
14
|
+
<meta http-equiv="content-type" content="text/html; charset=windows-1255">
|
15
|
+
<title>Bia\xB3ystok</title>
|
16
|
+
HTML
|
17
|
+
BAD.force_encoding Encoding::BINARY if defined? Encoding
|
18
|
+
|
19
|
+
SJIS_TITLE = "\x83\x65\x83\x58\x83\x67"
|
20
|
+
|
21
|
+
SJIS_AFTER_TITLE = <<-HTML
|
22
|
+
<title>#{SJIS_TITLE}</title>
|
23
|
+
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
|
24
|
+
HTML
|
25
|
+
|
26
|
+
SJIS_AFTER_TITLE.force_encoding Encoding::BINARY if defined? Encoding
|
27
|
+
|
28
|
+
SJIS_BAD_AFTER_TITLE = <<-HTML
|
29
|
+
<title>#{SJIS_TITLE}</title>
|
30
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
31
|
+
HTML
|
32
|
+
|
33
|
+
SJIS_BAD_AFTER_TITLE.force_encoding Encoding::BINARY if defined? Encoding
|
34
|
+
|
35
|
+
UTF8_TITLE = 'テスト'
|
36
|
+
UTF8 = <<-HTML
|
37
|
+
<title>#{UTF8_TITLE}</title>
|
38
|
+
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
|
39
|
+
HTML
|
40
|
+
|
41
|
+
def setup
|
42
|
+
@agent = Mechanize.new
|
43
|
+
@uri = URI.parse 'http://example'
|
44
|
+
@res = { 'content-type' => 'text/html' }
|
45
|
+
@body = '<title>hi</title>'
|
46
|
+
end
|
47
|
+
|
48
|
+
def util_page body = @body, res = @res
|
49
|
+
Mechanize::Page.new @uri, res, body, 200, @agent
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_charset
|
53
|
+
charset = util_page.charset 'text/html;charset=UTF-8'
|
54
|
+
|
55
|
+
assert_equal 'UTF-8', charset
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_encoding
|
59
|
+
page = util_page WINDOWS_1255
|
60
|
+
|
61
|
+
assert_equal 'windows-1255', page.encoding
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_encoding_charset_after_title
|
65
|
+
page = util_page SJIS_AFTER_TITLE
|
66
|
+
|
67
|
+
assert_equal [], page.parser.errors
|
68
|
+
|
69
|
+
assert_equal 'Shift_JIS', page.encoding
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_encoding_charset_after_title_bad
|
73
|
+
page = util_page UTF8
|
74
|
+
|
75
|
+
assert_equal [], page.parser.errors
|
76
|
+
|
77
|
+
assert_equal 'UTF-8', page.encoding
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_encoding_charset_after_title_double_bad
|
81
|
+
page = util_page SJIS_BAD_AFTER_TITLE
|
82
|
+
|
83
|
+
assert_equal [], page.parser.errors
|
84
|
+
|
85
|
+
assert_equal 'SHIFT_JIS', page.encoding
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_encoding_equals
|
89
|
+
page = util_page
|
90
|
+
|
91
|
+
page.encoding = 'UTF-8'
|
92
|
+
|
93
|
+
assert_equal 'UTF-8', page.encoding
|
94
|
+
assert_equal 'UTF-8', page.parser.encoding
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_encoding_equals_before_parser
|
98
|
+
# document has a bad encoding information - windows-1255
|
99
|
+
page = util_page BAD
|
100
|
+
|
101
|
+
# encoding is wrong, so user wants to force ISO-8859-2
|
102
|
+
page.encoding = 'ISO-8859-2'
|
103
|
+
|
104
|
+
assert_equal [], page.parser.errors
|
105
|
+
assert_equal 'ISO-8859-2', page.encoding
|
106
|
+
assert_equal 'ISO-8859-2', page.parser.encoding
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_encoding_equals_after_parser
|
110
|
+
# document has a bad encoding information - windows-1255
|
111
|
+
page = util_page BAD
|
112
|
+
page.parser
|
113
|
+
|
114
|
+
# autodetection sets encoding to windows-1255
|
115
|
+
assert_equal 'windows-1255', page.encoding
|
116
|
+
|
117
|
+
# encoding is wrong, so user wants to force ISO-8859-2
|
118
|
+
page.encoding = 'ISO-8859-2'
|
119
|
+
|
120
|
+
assert_equal [], page.parser.errors
|
121
|
+
assert_equal 'ISO-8859-2', page.encoding
|
122
|
+
assert_equal 'ISO-8859-2', page.parser.encoding
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_title
|
126
|
+
page = util_page
|
127
|
+
|
128
|
+
assert_equal('hi', page.title)
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_title_none
|
132
|
+
page = util_page '' # invalid HTML
|
133
|
+
|
134
|
+
assert_equal(nil, page.title)
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_page_decoded_with_charset
|
138
|
+
page = util_page @body, 'content-type' => 'text/html; charset=EUC-JP'
|
139
|
+
|
140
|
+
assert_equal 'EUC-JP', page.encoding
|
141
|
+
assert_equal 'EUC-JP', page.parser.encoding
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_form
|
145
|
+
page = @agent.get("http://localhost/tc_form_action.html")
|
146
|
+
|
147
|
+
form = page.form(:name => 'post_form1')
|
148
|
+
assert form
|
149
|
+
yielded = false
|
150
|
+
|
151
|
+
form = page.form(:name => 'post_form1') { |f|
|
152
|
+
yielded = true
|
153
|
+
assert f
|
154
|
+
assert_equal(form, f)
|
155
|
+
}
|
156
|
+
|
157
|
+
assert yielded
|
158
|
+
|
159
|
+
form_by_action = page.form(:action => '/form_post?a=b&b=c')
|
160
|
+
assert form_by_action
|
161
|
+
assert_equal(form, form_by_action)
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
require 'mechanize/uri_resolver'
|
5
|
+
|
6
|
+
class TestMechanizeURIResolver < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@r = Mechanize::URIResolver.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_resolve_bad_uri
|
13
|
+
e = assert_raises ArgumentError do
|
14
|
+
@r.resolve 'google'
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_equal 'absolute URL needed (not google)', e.message
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_resolve_utf8
|
21
|
+
uri = 'http://example?q=ü'
|
22
|
+
|
23
|
+
resolved = @r.resolve uri
|
24
|
+
|
25
|
+
assert_equal '/?q=%C3%BC', resolved.request_uri
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
data/test/test_multi_select.rb
CHANGED
@@ -3,6 +3,18 @@ require "helper"
|
|
3
3
|
class MultiSelectTest < Test::Unit::TestCase
|
4
4
|
def setup
|
5
5
|
@agent = Mechanize.new
|
6
|
+
@page = @agent.get("http://localhost/form_multi_select.html")
|
7
|
+
@form = @page.forms.first
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_option_with
|
11
|
+
o = @form.field_with(:name => 'list').option_with(:value => '1')
|
12
|
+
assert_equal '1', o.value
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_options_with
|
16
|
+
os = @form.field_with(:name => 'list').options_with(:value => /1|2/)
|
17
|
+
assert_equal ['1', '2'].sort, os.map { |x| x.value }.sort
|
6
18
|
end
|
7
19
|
|
8
20
|
def test_select_none
|
data/test/test_post_form.rb
CHANGED
@@ -15,6 +15,13 @@ class PostForm < Test::Unit::TestCase
|
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_post_form_json
|
19
|
+
page = @agent.post "http://localhost/form_post",
|
20
|
+
'json' => '["""]'
|
21
|
+
|
22
|
+
assert page.links.find { |l| l.text == 'json:["""]' }
|
23
|
+
end
|
24
|
+
|
18
25
|
def test_post_form_multival
|
19
26
|
page = @agent.post("http://localhost/form_post",
|
20
27
|
[ ['gender', 'female'],
|
@@ -14,36 +14,36 @@ class TestRedirectNotGetOrHead < Test::Unit::TestCase
|
|
14
14
|
def test_head_redirect_results_in_head_request
|
15
15
|
page = @agent.head('http://localhost/redirect')
|
16
16
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
17
|
-
assert_equal
|
17
|
+
assert_equal 'HEAD', page.header['X-Request-Method']
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_get_takes_a_verb
|
21
21
|
page = @agent.get(:url => 'http://localhost/redirect', :verb => :head)
|
22
22
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
23
|
-
assert_equal
|
23
|
+
assert_equal 'HEAD', page.header['X-Request-Method']
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_get_redirect_results_in_get_request
|
27
27
|
page = @agent.get('http://localhost/redirect')
|
28
28
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
29
|
-
assert_equal
|
29
|
+
assert_equal 'GET', page.header['X-Request-Method']
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_post_redirect_results_in_get_request
|
33
33
|
page = @agent.post('http://localhost/redirect')
|
34
34
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
35
|
-
assert_equal
|
35
|
+
assert_equal 'GET', page.header['X-Request-Method']
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_put_redirect_results_in_get_request
|
39
39
|
page = @agent.put('http://localhost/redirect', 'foo')
|
40
40
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
41
|
-
assert_equal
|
41
|
+
assert_equal 'GET', page.header['X-Request-Method']
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_delete_redirect_results_in_get_request
|
45
45
|
page = @agent.delete('http://localhost/redirect')
|
46
46
|
assert_equal(page.uri.to_s, 'http://localhost/verb')
|
47
|
-
assert_equal
|
47
|
+
assert_equal 'GET', page.header['X-Request-Method']
|
48
48
|
end
|
49
49
|
end
|
data/test/test_scheme.rb
CHANGED
@@ -30,13 +30,6 @@ class SchemeTest < Test::Unit::TestCase
|
|
30
30
|
assert_kind_of(Mechanize::Page, page)
|
31
31
|
end
|
32
32
|
|
33
|
-
def test_file_scheme_with_embedded_spaces
|
34
|
-
f = File.expand_path(File.join(File.dirname(__FILE__), "htdocs/dir with spaces/foo.html"))
|
35
|
-
page = @agent.get("file://#{f}")
|
36
|
-
assert_equal(File.read(f), page.body)
|
37
|
-
assert_kind_of(Mechanize::Page, page)
|
38
|
-
end
|
39
|
-
|
40
33
|
def test_click_file_link
|
41
34
|
f = File.expand_path(File.join(File.dirname(__FILE__), "htdocs"))
|
42
35
|
page = @agent.get("file://#{f}")
|
data/test/test_verbs.rb
CHANGED
@@ -8,18 +8,18 @@ class VerbsTest < Test::Unit::TestCase
|
|
8
8
|
def test_put
|
9
9
|
page = @agent.put('http://localhost/verb', 'foo')
|
10
10
|
assert_equal 1, @agent.history.length
|
11
|
-
assert_equal
|
11
|
+
assert_equal 'PUT', page.header['X-Request-Method']
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_delete
|
15
15
|
page = @agent.delete('http://localhost/verb', { 'q' => 'foo' })
|
16
16
|
assert_equal 1, @agent.history.length
|
17
|
-
assert_equal
|
17
|
+
assert_equal 'DELETE', page.header['X-Request-Method']
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_head
|
21
21
|
page = @agent.head('http://localhost/verb', { 'q' => 'foo' })
|
22
22
|
assert_equal 0, @agent.history.length
|
23
|
-
assert_equal
|
23
|
+
assert_equal 'HEAD', page.header['X-Request-Method']
|
24
24
|
end
|
25
25
|
end
|
metadata
CHANGED
@@ -1,25 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mechanize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 1923831931
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
+
- pre
|
9
10
|
- 1
|
10
|
-
|
11
|
-
- 20110107104205
|
12
|
-
version: 1.0.1.beta.20110107104205
|
11
|
+
version: 2.0.pre.1
|
13
12
|
platform: ruby
|
14
13
|
authors:
|
14
|
+
- Eric Hodel
|
15
15
|
- Aaron Patterson
|
16
16
|
- Mike Dalessio
|
17
17
|
autorequire:
|
18
18
|
bindir: bin
|
19
|
-
cert_chain:
|
19
|
+
cert_chain:
|
20
|
+
- |
|
21
|
+
-----BEGIN CERTIFICATE-----
|
22
|
+
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
|
23
|
+
YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
|
24
|
+
ZXQwHhcNMDcxMjIxMDIwNDE0WhcNMDgxMjIwMDIwNDE0WjBBMRAwDgYDVQQDDAdk
|
25
|
+
cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
|
26
|
+
FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbgLrGLGIDE76
|
27
|
+
LV/cvxdEzCuYuS3oG9PrSZnuDweySUfdp/so0cDq+j8bqy6OzZSw07gdjwFMSd6J
|
28
|
+
U5ddZCVywn5nnAQ+Ui7jMW54CYt5/H6f2US6U0hQOjJR6cpfiymgxGdfyTiVcvTm
|
29
|
+
Gj/okWrQl0NjYOYBpDi+9PPmaH2RmLJu0dB/NylsDnW5j6yN1BEI8MfJRR+HRKZY
|
30
|
+
mUtgzBwF1V4KIZQ8EuL6I/nHVu07i6IkrpAgxpXUfdJQJi0oZAqXurAV3yTxkFwd
|
31
|
+
g62YrrW26mDe+pZBzR6bpLE+PmXCzz7UxUq3AE0gPHbiMXie3EFE0oxnsU3lIduh
|
32
|
+
sCANiQ8BAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
33
|
+
BBS5k4Z75VSpdM0AclG2UvzFA/VW5DANBgkqhkiG9w0BAQUFAAOCAQEAHagT4lfX
|
34
|
+
kP/hDaiwGct7XPuVGbrOsKRVD59FF5kETBxEc9UQ1clKWngf8JoVuEoKD774dW19
|
35
|
+
bU0GOVWO+J6FMmT/Cp7nuFJ79egMf/gy4gfUfQMuvfcr6DvZUPIs9P/TlK59iMYF
|
36
|
+
DIOQ3DxdF3rMzztNUCizN4taVscEsjCcgW6WkUJnGdqlu3OHWpQxZBJkBTjPCoc6
|
37
|
+
UW6on70SFPmAy/5Cq0OJNGEWBfgD9q7rrs/X8GGwUWqXb85RXnUVi/P8Up75E0ag
|
38
|
+
14jEc90kN+C7oI/AGCBN0j6JnEtYIEJZibjjDJTSMWlUKKkj30kq7hlUC2CepJ4v
|
39
|
+
x52qPcexcYZR7w==
|
40
|
+
-----END CERTIFICATE-----
|
20
41
|
|
21
|
-
date: 2011-
|
22
|
-
default_executable:
|
42
|
+
date: 2011-04-10 00:00:00 Z
|
23
43
|
dependencies:
|
24
44
|
- !ruby/object:Gem::Dependency
|
25
45
|
name: nokogiri
|
@@ -27,20 +47,34 @@ dependencies:
|
|
27
47
|
requirement: &id001 !ruby/object:Gem::Requirement
|
28
48
|
none: false
|
29
49
|
requirements:
|
30
|
-
- -
|
50
|
+
- - ~>
|
31
51
|
- !ruby/object:Gem::Version
|
32
|
-
hash:
|
52
|
+
hash: 7
|
33
53
|
segments:
|
34
54
|
- 1
|
35
|
-
-
|
36
|
-
|
37
|
-
version: 1.2.1
|
55
|
+
- 4
|
56
|
+
version: "1.4"
|
38
57
|
type: :runtime
|
39
58
|
version_requirements: *id001
|
40
59
|
- !ruby/object:Gem::Dependency
|
41
60
|
name: net-http-persistent
|
42
61
|
prerelease: false
|
43
62
|
requirement: &id002 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
hash: 3
|
68
|
+
segments:
|
69
|
+
- 1
|
70
|
+
- 6
|
71
|
+
version: "1.6"
|
72
|
+
type: :runtime
|
73
|
+
version_requirements: *id002
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: net-http-digest_auth
|
76
|
+
prerelease: false
|
77
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
44
78
|
none: false
|
45
79
|
requirements:
|
46
80
|
- - ~>
|
@@ -50,31 +84,40 @@ dependencies:
|
|
50
84
|
- 1
|
51
85
|
- 1
|
52
86
|
version: "1.1"
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 17
|
90
|
+
segments:
|
91
|
+
- 1
|
92
|
+
- 1
|
93
|
+
- 1
|
94
|
+
version: 1.1.1
|
53
95
|
type: :runtime
|
54
|
-
version_requirements: *
|
96
|
+
version_requirements: *id003
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: hoe
|
57
99
|
prerelease: false
|
58
|
-
requirement: &
|
100
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
59
101
|
none: false
|
60
102
|
requirements:
|
61
103
|
- - ">="
|
62
104
|
- !ruby/object:Gem::Version
|
63
|
-
hash:
|
105
|
+
hash: 35
|
64
106
|
segments:
|
65
107
|
- 2
|
66
|
-
-
|
67
|
-
-
|
68
|
-
version: 2.
|
108
|
+
- 9
|
109
|
+
- 4
|
110
|
+
version: 2.9.4
|
69
111
|
type: :development
|
70
|
-
version_requirements: *
|
112
|
+
version_requirements: *id004
|
71
113
|
description: |-
|
72
|
-
The Mechanize library is used for automating interaction with websites.
|
114
|
+
The Mechanize library is used for automating interaction with websites.
|
73
115
|
Mechanize automatically stores and sends cookies, follows redirects,
|
74
116
|
can follow links, and submit forms. Form fields can be populated and
|
75
117
|
submitted. Mechanize also keeps track of the sites that you have visited as
|
76
118
|
a history.
|
77
119
|
email:
|
120
|
+
- drbrain@segment7.net
|
78
121
|
- aaronp@rubyforge.org
|
79
122
|
- mike.dalessio@gmail.com
|
80
123
|
executables: []
|
@@ -104,26 +147,13 @@ files:
|
|
104
147
|
- examples/rubyforge.rb
|
105
148
|
- examples/spider.rb
|
106
149
|
- lib/mechanize.rb
|
107
|
-
- lib/mechanize/chain.rb
|
108
|
-
- lib/mechanize/chain/auth_headers.rb
|
109
|
-
- lib/mechanize/chain/body_decoding_handler.rb
|
110
|
-
- lib/mechanize/chain/connection_resolver.rb
|
111
|
-
- lib/mechanize/chain/custom_headers.rb
|
112
|
-
- lib/mechanize/chain/handler.rb
|
113
|
-
- lib/mechanize/chain/header_resolver.rb
|
114
|
-
- lib/mechanize/chain/parameter_resolver.rb
|
115
|
-
- lib/mechanize/chain/post_connect_hook.rb
|
116
|
-
- lib/mechanize/chain/pre_connect_hook.rb
|
117
|
-
- lib/mechanize/chain/request_resolver.rb
|
118
|
-
- lib/mechanize/chain/response_body_parser.rb
|
119
|
-
- lib/mechanize/chain/response_header_handler.rb
|
120
|
-
- lib/mechanize/chain/response_reader.rb
|
121
|
-
- lib/mechanize/chain/ssl_resolver.rb
|
122
|
-
- lib/mechanize/chain/uri_resolver.rb
|
123
150
|
- lib/mechanize/content_type_error.rb
|
124
151
|
- lib/mechanize/cookie.rb
|
125
152
|
- lib/mechanize/cookie_jar.rb
|
153
|
+
- lib/mechanize/element_matcher.rb
|
126
154
|
- lib/mechanize/file.rb
|
155
|
+
- lib/mechanize/file_connection.rb
|
156
|
+
- lib/mechanize/file_request.rb
|
127
157
|
- lib/mechanize/file_response.rb
|
128
158
|
- lib/mechanize/file_saver.rb
|
129
159
|
- lib/mechanize/form.rb
|
@@ -152,14 +182,8 @@ files:
|
|
152
182
|
- lib/mechanize/redirect_not_get_or_head_error.rb
|
153
183
|
- lib/mechanize/response_code_error.rb
|
154
184
|
- lib/mechanize/unsupported_scheme_error.rb
|
185
|
+
- lib/mechanize/uri_resolver.rb
|
155
186
|
- lib/mechanize/util.rb
|
156
|
-
- test/chain/test_argument_validator.rb
|
157
|
-
- test/chain/test_auth_headers.rb
|
158
|
-
- test/chain/test_custom_headers.rb
|
159
|
-
- test/chain/test_header_resolver.rb
|
160
|
-
- test/chain/test_parameter_resolver.rb
|
161
|
-
- test/chain/test_request_resolver.rb
|
162
|
-
- test/chain/test_response_reader.rb
|
163
187
|
- test/data/htpasswd
|
164
188
|
- test/data/server.crt
|
165
189
|
- test/data/server.csr
|
@@ -169,6 +193,7 @@ files:
|
|
169
193
|
- test/htdocs/alt_text.html
|
170
194
|
- test/htdocs/bad_form_test.html
|
171
195
|
- test/htdocs/button.jpg
|
196
|
+
- test/htdocs/dir with spaces/foo.html
|
172
197
|
- test/htdocs/empty_form.html
|
173
198
|
- test/htdocs/file_upload.html
|
174
199
|
- test/htdocs/find_link.html
|
@@ -189,9 +214,11 @@ files:
|
|
189
214
|
- test/htdocs/link with space.html
|
190
215
|
- test/htdocs/meta_cookie.html
|
191
216
|
- test/htdocs/no_title_test.html
|
217
|
+
- test/htdocs/rails_3_encoding_hack_form_test.html
|
192
218
|
- test/htdocs/relative/tc_relative_links.html
|
193
219
|
- test/htdocs/tc_bad_charset.html
|
194
220
|
- test/htdocs/tc_bad_links.html
|
221
|
+
- test/htdocs/tc_base_images.html
|
195
222
|
- test/htdocs/tc_base_link.html
|
196
223
|
- test/htdocs/tc_blank_form.html
|
197
224
|
- test/htdocs/tc_charset.html
|
@@ -200,6 +227,7 @@ files:
|
|
200
227
|
- test/htdocs/tc_field_precedence.html
|
201
228
|
- test/htdocs/tc_follow_meta.html
|
202
229
|
- test/htdocs/tc_form_action.html
|
230
|
+
- test/htdocs/tc_images.html
|
203
231
|
- test/htdocs/tc_links.html
|
204
232
|
- test/htdocs/tc_meta_in_body.html
|
205
233
|
- test/htdocs/tc_no_attributes.html
|
@@ -209,6 +237,7 @@ files:
|
|
209
237
|
- test/htdocs/tc_relative_links.html
|
210
238
|
- test/htdocs/tc_textarea.html
|
211
239
|
- test/htdocs/test_bad_encoding.html
|
240
|
+
- test/htdocs/test_click.html
|
212
241
|
- test/htdocs/unusual______.html
|
213
242
|
- test/servlets.rb
|
214
243
|
- test/ssl_server.rb
|
@@ -217,8 +246,6 @@ files:
|
|
217
246
|
- test/test_blank_form.rb
|
218
247
|
- test/test_checkboxes.rb
|
219
248
|
- test/test_content_type.rb
|
220
|
-
- test/test_cookie_class.rb
|
221
|
-
- test/test_cookie_jar.rb
|
222
249
|
- test/test_cookies.rb
|
223
250
|
- test/test_encoded_links.rb
|
224
251
|
- test/test_errors.rb
|
@@ -233,19 +260,29 @@ files:
|
|
233
260
|
- test/test_get_headers.rb
|
234
261
|
- test/test_gzipping.rb
|
235
262
|
- test/test_hash_api.rb
|
263
|
+
- test/test_headers.rb
|
236
264
|
- test/test_history.rb
|
237
265
|
- test/test_history_added.rb
|
238
266
|
- test/test_html_unscape_forms.rb
|
239
267
|
- test/test_if_modified_since.rb
|
268
|
+
- test/test_images.rb
|
240
269
|
- test/test_links.rb
|
241
270
|
- test/test_mech.rb
|
242
271
|
- test/test_mech_proxy.rb
|
272
|
+
- test/test_mechanize.rb
|
273
|
+
- test/test_mechanize_cookie.rb
|
274
|
+
- test/test_mechanize_cookie_jar.rb
|
243
275
|
- test/test_mechanize_file.rb
|
276
|
+
- test/test_mechanize_file_request.rb
|
277
|
+
- test/test_mechanize_file_response.rb
|
278
|
+
- test/test_mechanize_form_image_button.rb
|
279
|
+
- test/test_mechanize_page.rb
|
280
|
+
- test/test_mechanize_uri_resolver.rb
|
281
|
+
- test/test_mechanize_util.rb
|
244
282
|
- test/test_meta.rb
|
245
283
|
- test/test_multi_select.rb
|
246
284
|
- test/test_no_attributes.rb
|
247
285
|
- test/test_option.rb
|
248
|
-
- test/test_page.rb
|
249
286
|
- test/test_pluggable_parser.rb
|
250
287
|
- test/test_post_form.rb
|
251
288
|
- test/test_pretty_print.rb
|
@@ -267,10 +304,8 @@ files:
|
|
267
304
|
- test/test_subclass.rb
|
268
305
|
- test/test_textarea.rb
|
269
306
|
- test/test_upload.rb
|
270
|
-
- test/test_util.rb
|
271
307
|
- test/test_verbs.rb
|
272
|
-
-
|
273
|
-
has_rdoc: true
|
308
|
+
- .gemtest
|
274
309
|
homepage: http://mechanize.rubyforge.org
|
275
310
|
licenses: []
|
276
311
|
|
@@ -285,43 +320,34 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
285
320
|
requirements:
|
286
321
|
- - ">="
|
287
322
|
- !ruby/object:Gem::Version
|
288
|
-
hash:
|
323
|
+
hash: 57
|
289
324
|
segments:
|
290
|
-
-
|
291
|
-
|
325
|
+
- 1
|
326
|
+
- 8
|
327
|
+
- 7
|
328
|
+
version: 1.8.7
|
292
329
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
293
330
|
none: false
|
294
331
|
requirements:
|
295
|
-
- - "
|
332
|
+
- - ">="
|
296
333
|
- !ruby/object:Gem::Version
|
297
|
-
hash:
|
334
|
+
hash: 3
|
298
335
|
segments:
|
299
|
-
-
|
300
|
-
|
301
|
-
- 1
|
302
|
-
version: 1.3.1
|
336
|
+
- 0
|
337
|
+
version: "0"
|
303
338
|
requirements: []
|
304
339
|
|
305
340
|
rubyforge_project: mechanize
|
306
|
-
rubygems_version: 1.
|
341
|
+
rubygems_version: 1.7.2
|
307
342
|
signing_key:
|
308
343
|
specification_version: 3
|
309
344
|
summary: The Mechanize library is used for automating interaction with websites
|
310
345
|
test_files:
|
311
|
-
- test/chain/test_argument_validator.rb
|
312
|
-
- test/chain/test_auth_headers.rb
|
313
|
-
- test/chain/test_custom_headers.rb
|
314
|
-
- test/chain/test_header_resolver.rb
|
315
|
-
- test/chain/test_parameter_resolver.rb
|
316
|
-
- test/chain/test_request_resolver.rb
|
317
|
-
- test/chain/test_response_reader.rb
|
318
346
|
- test/test_authenticate.rb
|
319
347
|
- test/test_bad_links.rb
|
320
348
|
- test/test_blank_form.rb
|
321
349
|
- test/test_checkboxes.rb
|
322
350
|
- test/test_content_type.rb
|
323
|
-
- test/test_cookie_class.rb
|
324
|
-
- test/test_cookie_jar.rb
|
325
351
|
- test/test_cookies.rb
|
326
352
|
- test/test_encoded_links.rb
|
327
353
|
- test/test_errors.rb
|
@@ -341,15 +367,24 @@ test_files:
|
|
341
367
|
- test/test_history_added.rb
|
342
368
|
- test/test_html_unscape_forms.rb
|
343
369
|
- test/test_if_modified_since.rb
|
370
|
+
- test/test_images.rb
|
344
371
|
- test/test_links.rb
|
345
372
|
- test/test_mech.rb
|
346
373
|
- test/test_mech_proxy.rb
|
374
|
+
- test/test_mechanize.rb
|
375
|
+
- test/test_mechanize_cookie.rb
|
376
|
+
- test/test_mechanize_cookie_jar.rb
|
347
377
|
- test/test_mechanize_file.rb
|
378
|
+
- test/test_mechanize_file_request.rb
|
379
|
+
- test/test_mechanize_file_response.rb
|
380
|
+
- test/test_mechanize_form_image_button.rb
|
381
|
+
- test/test_mechanize_page.rb
|
382
|
+
- test/test_mechanize_uri_resolver.rb
|
383
|
+
- test/test_mechanize_util.rb
|
348
384
|
- test/test_meta.rb
|
349
385
|
- test/test_multi_select.rb
|
350
386
|
- test/test_no_attributes.rb
|
351
387
|
- test/test_option.rb
|
352
|
-
- test/test_page.rb
|
353
388
|
- test/test_pluggable_parser.rb
|
354
389
|
- test/test_post_form.rb
|
355
390
|
- test/test_pretty_print.rb
|
@@ -371,5 +406,4 @@ test_files:
|
|
371
406
|
- test/test_subclass.rb
|
372
407
|
- test/test_textarea.rb
|
373
408
|
- test/test_upload.rb
|
374
|
-
- test/test_util.rb
|
375
409
|
- test/test_verbs.rb
|