mechanize 0.6.9 → 0.6.10

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.

@@ -1,5 +1,24 @@
1
1
  = Mechanize CHANGELOG
2
2
 
3
+ == 0.6.10
4
+
5
+ * Made digest authentication work with POSTs.
6
+ * Made sure page was HTML before following meta refreshes.
7
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12260&group_id=1453&atid=5709
8
+ * Made sure that URLS with a host and no path would default to '/' for history
9
+ purposes.
10
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12368&group_id=1453&atid=5709
11
+ * Avoiding memory leaks with transact. Thanks Tobias Gruetzmacher!
12
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12057&group_id=1453&atid=5711
13
+ * Fixing a problem with # signs in the file name. Thanks Tobias Gruetzmacher!
14
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12510&group_id=1453&atid=5711
15
+ * Made sure that blank form values are submitted.
16
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12505&group_id=1453&atid=5709
17
+ * Mechanize now respects the base tag. Thanks Stephan Dale.
18
+ http://rubyforge.org/tracker/index.php?func=detail&aid=12468&group_id=1453&atid=5709
19
+ * Aliasing inspect to pretty_inspect. Thanks Eric Promislow.
20
+ http://rubyforge.org/pipermail/mechanize-users/2007-July/000157.html
21
+
3
22
  == 0.6.9
4
23
 
5
24
  * Updating UTF-8 support for urls
@@ -58,6 +58,8 @@ test/htdocs/link with space.html
58
58
  test/htdocs/no_title_test.html
59
59
  test/htdocs/relative/tc_relative_links.html
60
60
  test/htdocs/tc_bad_links.html
61
+ test/htdocs/tc_base_link.html
62
+ test/htdocs/tc_blank_form.html
61
63
  test/htdocs/tc_checkboxes.html
62
64
  test/htdocs/tc_encoded_links.html
63
65
  test/htdocs/tc_follow_meta.html
@@ -69,9 +71,11 @@ test/htdocs/tc_radiobuttons.html
69
71
  test/htdocs/tc_referer.html
70
72
  test/htdocs/tc_relative_links.html
71
73
  test/htdocs/tc_textarea.html
74
+ test/htdocs/unusual______.html
72
75
  test/ssl_server.rb
73
76
  test/tc_authenticate.rb
74
77
  test/tc_bad_links.rb
78
+ test/tc_blank_form.rb
75
79
  test/tc_checkboxes.rb
76
80
  test/tc_cookie_class.rb
77
81
  test/tc_cookie_jar.rb
@@ -64,7 +64,7 @@ class Mechanize
64
64
  ##
65
65
  # The version of Mechanize you are using.
66
66
 
67
- VERSION = '0.6.9'
67
+ VERSION = '0.6.10'
68
68
 
69
69
  ##
70
70
  # User Agent aliases
@@ -322,14 +322,13 @@ class Mechanize
322
322
  end
323
323
  end
324
324
 
325
- if( @auth_hash[uri.to_s] )
326
- raise 'Please provide username and password' unless @user || @password
327
- case @auth_hash[uri.to_s]
325
+ if( @auth_hash[uri.host] )
326
+ case @auth_hash[uri.host]
328
327
  when :basic
329
328
  request.basic_auth(@user, @password)
330
329
  when :digest
331
330
  @digest_response ||= nil
332
- @digest_response = self.gen_auth_header(uri, @digest) if @digest
331
+ @digest_response = self.gen_auth_header(uri,request,@digest) if @digest
333
332
  request.add_field('Authorization', @digest_response) if @digest_response
334
333
  end
335
334
  end
@@ -337,7 +336,7 @@ class Mechanize
337
336
  request
338
337
  end
339
338
 
340
- def gen_auth_header(uri, auth_header, is_IIS = false)
339
+ def gen_auth_header(uri, request, auth_header, is_IIS = false)
341
340
  @@nonce_count += 1
342
341
 
343
342
  user = @digest_user
@@ -349,7 +348,7 @@ class Mechanize
349
348
  $2.gsub(/(\w+)="(.*?)"/) { params[$1] = $2 }
350
349
 
351
350
  a_1 = "#{@user}:#{params['realm']}:#{@password}"
352
- a_2 = "GET:#{uri.path}"
351
+ a_2 = "#{request.method}:#{uri.path}"
353
352
  request_digest = ''
354
353
  request_digest << Digest::MD5.hexdigest(a_1)
355
354
  request_digest << ':' << params['nonce']
@@ -367,6 +366,7 @@ class Mechanize
367
366
  header << "qop=#{params['qop']}, "
368
367
  end
369
368
  header << "uri=\"#{uri.path}\", "
369
+ header << "algorithm=MD5, "
370
370
  header << "nonce=\"#{params['nonce']}\", "
371
371
  header << "nc=#{'%08x' % @@nonce_count}, "
372
372
  header << "cnonce=\"#{CNONCE}\", "
@@ -385,18 +385,24 @@ class Mechanize
385
385
 
386
386
  url = URI.parse(
387
387
  Util.html_unescape(
388
- url.split(/%[0-9A-Fa-f]{2}/).zip(
389
- url.scan(/%[0-9A-Fa-f]{2}/)
388
+ url.split(/%[0-9A-Fa-f]{2}|#/).zip(
389
+ url.scan(/%[0-9A-Fa-f]{2}|#/)
390
390
  ).map { |x,y|
391
391
  "#{URI.escape(x)}#{y}"
392
- }.join('').gsub(/%23/, '#')
392
+ }.join('')
393
393
  )
394
394
  )
395
395
  end
396
396
 
397
+ url.path = '/' if url.path.length == 0
398
+
397
399
  # construct an absolute uri
398
400
  if url.relative?
399
401
  raise 'no history. please specify an absolute URL' unless cur_page.uri
402
+ base = cur_page.respond_to?(:bases) ? cur_page.bases.last : nil
403
+ url = ((base && base.uri && base.uri.absolute?) ?
404
+ base.uri :
405
+ cur_page.uri) + url
400
406
  url = cur_page.uri + url
401
407
  # Strip initial "/.." bits from the path
402
408
  url.path.sub!(/^(\/\.\.)+(?=\/)/, '')
@@ -576,7 +582,8 @@ class Mechanize
576
582
 
577
583
  res_klass = Net::HTTPResponse::CODE_TO_OBJ[page.code.to_s]
578
584
 
579
- if follow_meta_refresh && (redirect = page.meta.first)
585
+ if follow_meta_refresh && page.respond_to?(:meta) &&
586
+ (redirect = page.meta.first)
580
587
  return redirect.click
581
588
  end
582
589
 
@@ -594,14 +601,19 @@ class Mechanize
594
601
  @history.push(page, from_uri)
595
602
  return page
596
603
  elsif res_klass <= Net::HTTPUnauthorized
604
+ raise ResponseCodeError.new(page) unless @user || @password
605
+ raise ResponseCodeError.new(page) if @auth_hash.has_key?(uri.host)
597
606
  if response['www-authenticate'] =~ /Digest/i
598
- @auth_hash[uri.to_s] = :digest
607
+ @auth_hash[uri.host] = :digest
599
608
  @digest = response['www-authenticate']
600
- return fetch_page(uri, fetch_request(uri), cur_page, request_data)
601
609
  else
602
- @auth_hash[uri.to_s] = :basic
603
- return fetch_page(uri, fetch_request(uri), cur_page, request_data)
610
+ @auth_hash[uri.host] = :basic
604
611
  end
612
+ return fetch_page( uri,
613
+ fetch_request(uri, request.method.downcase.to_sym),
614
+ cur_page,
615
+ request_data
616
+ )
605
617
  end
606
618
 
607
619
  raise ResponseCodeError.new(page), "Unhandled response", caller
@@ -620,7 +632,7 @@ class Mechanize
620
632
  end
621
633
 
622
634
  def add_to_history(page)
623
- @history.push(page)
635
+ @history.push(page, to_absolute_uri(page.uri))
624
636
  end
625
637
 
626
638
  # :stopdoc:
@@ -48,7 +48,6 @@ module WWW
48
48
  query = []
49
49
 
50
50
  fields().each do |f|
51
- next unless f.value
52
51
  query.push(*f.query_value)
53
52
  end
54
53
 
@@ -129,7 +129,7 @@ module WWW
129
129
  end
130
130
 
131
131
  def query_value
132
- value.collect { |v| [name, v] }
132
+ value ? value.collect { |v| [name, v] } : ''
133
133
  end
134
134
 
135
135
  # Select no options
@@ -10,6 +10,11 @@ module WWW
10
10
  @history_index = {}
11
11
  end
12
12
 
13
+ def initialize_copy(orig)
14
+ super
15
+ @history_index = orig.instance_variable_get(:@history_index).dup
16
+ end
17
+
13
18
  def push(page, uri = nil)
14
19
  super(page)
15
20
  @history_index[(uri ? uri : page.uri).to_s] = page
@@ -40,6 +40,9 @@ module WWW
40
40
  }
41
41
  }
42
42
  end
43
+ if RUBY_VERSION > '1.8.2'
44
+ alias :inspect :pretty_inspect
45
+ end
43
46
  end
44
47
 
45
48
  class Link
@@ -49,6 +52,9 @@ module WWW
49
52
  q.breakable; q.pp href
50
53
  }
51
54
  end
55
+ if RUBY_VERSION > '1.8.2'
56
+ alias :inspect :pretty_inspect
57
+ end
52
58
  end
53
59
 
54
60
  class Form
@@ -19,7 +19,7 @@ module WWW
19
19
  extend Forwardable
20
20
 
21
21
  attr_reader :parser, :title, :watch_for_set
22
- attr_reader :frames, :iframes, :links, :forms, :meta, :watches
22
+ attr_reader :frames, :iframes, :links, :forms, :meta, :watches, :bases
23
23
  attr_accessor :mech
24
24
 
25
25
  alias :root :parser
@@ -69,6 +69,7 @@ module WWW
69
69
  @meta = WWW::Mechanize::List.new
70
70
  @frames = WWW::Mechanize::List.new
71
71
  @iframes = WWW::Mechanize::List.new
72
+ @bases = WWW::Mechanize::List.new
72
73
  @watches = {}
73
74
 
74
75
  # Set the title
@@ -76,6 +77,11 @@ module WWW
76
77
  (@parser/'title').text
77
78
  end
78
79
 
80
+ # Find all 'base' tags
81
+ (@parser/'base').each do |node|
82
+ @bases << Base.new(node, @mech, self)
83
+ end
84
+
79
85
  # Find all the form tags
80
86
  (@parser/'form').each do |html_form|
81
87
  form = Form.new(html_form, @mech, self)
@@ -67,5 +67,11 @@ module WWW
67
67
  @href = node['src']
68
68
  end
69
69
  end
70
+
71
+ # This class encapsulates a Base tag. Mechanize treats base tags just like
72
+ # 'a' tags. Base objects will contain links, but most likely will have
73
+ # no text.
74
+ class Base < Link
75
+ end
70
76
  end
71
77
  end
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <base href="http://localhost/">
4
+ </head>
5
+ <body>
6
+ <a href="index.html">test</a>
7
+ </body>
8
+ </html>
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <body>
3
+ <form name="test" method="post">
4
+ <input type="hidden" name="hidden_blank" value=''/>
5
+ <input type="hidden" name="hidden_noval"/>
6
+ <input type="text" name="visible_blank" value=''/>
7
+ <input type="text" name="visible_noval"/>
8
+ <input type="submit"/>
9
+ </form>
10
+ </body>
11
+ </html>
@@ -11,5 +11,6 @@
11
11
  <a href="link%20with%20space.html">encoded space</a>
12
12
  <a href="link with space.html">not encoded space</a>
13
13
  <!-- End escaped bug -->
14
+ <a href="unusual&&%3F%3F%23%23.html">unusual characters</a>
14
15
  </body>
15
16
  </html>
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <body>
3
+ This is a webpage that has a very unusual name.
4
+ </body>
5
+ </html>
@@ -13,14 +13,23 @@ class BasicAuthTest < Test::Unit::TestCase
13
13
  end
14
14
 
15
15
  def test_auth_success
16
- @agent.basic_auth('mech', 'password')
17
- page = @agent.get("http://localhost:#{PORT}/htpasswd_auth")
16
+ @agent.basic_auth('user', 'pass')
17
+ page = @agent.get("http://localhost/basic_auth")
18
18
  assert_equal('You are authenticated', page.body)
19
19
  end
20
20
 
21
+ def test_auth_bad_user_pass
22
+ @agent.basic_auth('aaron', 'aaron')
23
+ begin
24
+ page = @agent.get("http://localhost/basic_auth")
25
+ rescue WWW::Mechanize::ResponseCodeError => e
26
+ assert_equal("401", e.response_code)
27
+ end
28
+ end
29
+
21
30
  def test_auth_failure
22
31
  begin
23
- page = @agent.get("http://localhost:#{PORT}/htpasswd_auth")
32
+ page = @agent.get("http://localhost/basic_auth")
24
33
  rescue WWW::Mechanize::ResponseCodeError => e
25
34
  assert_equal("401", e.response_code)
26
35
  end
@@ -0,0 +1,23 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ require 'test/unit'
4
+ require 'rubygems'
5
+ require 'mechanize'
6
+ require 'test_includes'
7
+
8
+ class BlankFormTest < Test::Unit::TestCase
9
+ include TestMethods
10
+
11
+ def setup
12
+ @agent = WWW::Mechanize.new
13
+ end
14
+
15
+ def test_blank_form_query_string
16
+ page = @agent.get('http://localhost/tc_blank_form.html')
17
+ form = page.forms.first
18
+ query = form.build_query
19
+ assert(query.length > 0)
20
+ assert query.all? { |x| x[1] == '' }
21
+ end
22
+ end
23
+
@@ -22,4 +22,11 @@ class FollowMetaTest < Test::Unit::TestCase
22
22
  assert_equal('http://localhost/index.html', page.uri.to_s)
23
23
  assert_equal(3, @agent.history.length)
24
24
  end
25
+
26
+ def test_follow_meta_on_302
27
+ @agent.follow_meta_refresh = true
28
+ assert_nothing_raised {
29
+ @agent.get("http://localhost/response_code?code=302&ct=test/xml")
30
+ }
31
+ end
25
32
  end
@@ -113,6 +113,30 @@ class TestHistory < Test::Unit::TestCase
113
113
  end
114
114
  end
115
115
 
116
+ def test_no_slash
117
+ page = @agent.get('http://localhost')
118
+
119
+ node = Struct.new(:href, :inner_text).new('http://localhost/', 'blah')
120
+ link = WWW::Mechanize::Link.new(node, nil, nil)
121
+ assert(@agent.visited?(link))
122
+
123
+ node = Struct.new(:href, :inner_text).new('http://localhost', 'blah')
124
+ link = WWW::Mechanize::Link.new(node, nil, nil)
125
+ assert(@agent.visited?(link))
126
+ end
127
+
128
+ def test_with_slash
129
+ page = @agent.get('http://localhost/')
130
+
131
+ node = Struct.new(:href, :inner_text).new('http://localhost/', 'blah')
132
+ link = WWW::Mechanize::Link.new(node, nil, nil)
133
+ assert(@agent.visited?(link))
134
+
135
+ node = Struct.new(:href, :inner_text).new('http://localhost', 'blah')
136
+ link = WWW::Mechanize::Link.new(node, nil, nil)
137
+ assert(@agent.visited?(link))
138
+ end
139
+
116
140
  def test_clear
117
141
  page = nil
118
142
  20.times { @history.push(page = @agent.get('http://localhost/index.html')) }
@@ -12,6 +12,12 @@ class LinksMechTest < Test::Unit::TestCase
12
12
  @agent = WWW::Mechanize.new
13
13
  end
14
14
 
15
+ def test_base
16
+ page = @agent.get("http://google.com/tc_base_link.html")
17
+ page = page.links.first.click
18
+ assert @agent.visited?("http://localhost/index.html")
19
+ end
20
+
15
21
  def test_find_meta
16
22
  page = @agent.get("http://localhost:#{PORT}/find_link.html")
17
23
  assert_equal(2, page.meta.length)
@@ -88,4 +94,10 @@ class LinksMechTest < Test::Unit::TestCase
88
94
  link = page.links.text('not encoded space').first
89
95
  page = @agent.click link
90
96
  end
97
+
98
+ def test_link_with_unusual_characters
99
+ page = @agent.get("http://localhost:#{PORT}/tc_links.html")
100
+ link = page.links.text('unusual characters').first
101
+ assert_nothing_raised { @agent.click link }
102
+ end
91
103
  end
@@ -1,7 +1,9 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
2
  $:.unshift File.join(File.dirname(__FILE__), "..", "test")
3
3
 
4
+ require 'tc_authenticate'
4
5
  require 'tc_bad_links'
6
+ require 'tc_blank_form'
5
7
  require 'tc_checkboxes'
6
8
  require 'tc_cookie_class'
7
9
  require 'tc_cookie_jar'
@@ -19,6 +19,7 @@ class Net::HTTP
19
19
  SERVLETS = {
20
20
  '/gzip' => GzipServlet,
21
21
  '/form_post' => FormTest,
22
+ '/basic_auth' => BasicAuthServlet,
22
23
  '/form post' => FormTest,
23
24
  '/response_code' => ResponseCodeTest,
24
25
  '/bad_content_type' => BadContentTypeTest,
@@ -40,7 +41,7 @@ class Net::HTTP
40
41
 
41
42
  def request(request, *data, &block)
42
43
  url = URI.parse(request.path)
43
- path = url.path.gsub('%20', ' ')
44
+ path = URI.unescape(url.path)
44
45
 
45
46
  path = '/index.html' if path == '/'
46
47
 
@@ -57,7 +58,7 @@ class Net::HTTP
57
58
  end
58
59
  SERVLETS[path].new({}).send("do_#{request.method}", request, res)
59
60
  else
60
- filename = "htdocs#{path}"
61
+ filename = "htdocs#{path.gsub(/[^\/\\.\w_\s]/, '_')}"
61
62
  unless PAGE_CACHE[filename]
62
63
  File.open("#{BASE_DIR}/#{filename}", 'rb') { |file|
63
64
  PAGE_CACHE[filename] = file.read
@@ -79,7 +80,7 @@ class Net::HTTP
79
80
  end
80
81
 
81
82
  class Net::HTTPRequest
82
- attr_accessor :query, :body, :cookies
83
+ attr_accessor :query, :body, :cookies, :user
83
84
  end
84
85
 
85
86
  class Response
@@ -3,6 +3,27 @@ require 'logger'
3
3
  require 'date'
4
4
  require 'zlib'
5
5
  require 'stringio'
6
+ require 'base64'
7
+
8
+ class BasicAuthServlet < WEBrick::HTTPServlet::AbstractServlet
9
+ def do_GET(req,res)
10
+ htpd = WEBrick::HTTPAuth::Htpasswd.new('dot.htpasswd')
11
+ htpd.set_passwd('Blah', 'user', 'pass')
12
+ authenticator = WEBrick::HTTPAuth::BasicAuth.new({
13
+ :UserDB => htpd,
14
+ :Realm => 'Blah',
15
+ :Logger => Logger.new(nil)
16
+ }
17
+ )
18
+ begin
19
+ authenticator.authenticate(req,res)
20
+ res.body = 'You are authenticated'
21
+ rescue WEBrick::HTTPStatus::Unauthorized => ex
22
+ res.status = 401
23
+ end
24
+ FileUtils.rm('dot.htpasswd')
25
+ end
26
+ end
6
27
 
7
28
  class HeaderServlet < WEBrick::HTTPServlet::AbstractServlet
8
29
  def do_GET(req, res)
@@ -90,7 +111,7 @@ end
90
111
 
91
112
  class ResponseCodeTest < WEBrick::HTTPServlet::AbstractServlet
92
113
  def do_GET(req, res)
93
- res['Content-Type'] = "text/html"
114
+ res['Content-Type'] = req.query['ct'] || "text/html"
94
115
  if req.query['code']
95
116
  code = req.query['code'].to_i
96
117
  case code
metadata CHANGED
@@ -1,192 +1,193 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: mechanize
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.6.9
7
- date: 2007-06-24 00:00:00 -07:00
6
+ version: 0.6.10
7
+ date: 2007-07-26 00:00:00 -07:00
8
8
  summary: Mechanize provides automated web-browsing
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: aaronp@rubyforge.org
12
12
  homepage: http://mechanize.rubyforge.org/
13
13
  rubyforge_project: mechanize
14
- description: "The Mechanize library is used for automating interaction with websites.
15
- Mechanize automatically stores and sends cookies, follows redirects, can follow
16
- links, and submit forms. Form fields can be populated and submitted. Mechanize
17
- also keeps track of the sites that you have visited as a history."
14
+ description: The Mechanize library is used for automating interaction with websites. Mechanize automatically stores and sends cookies, follows redirects, can follow links, and submit forms. Form fields can be populated and submitted. Mechanize also keeps track of the sites that you have visited as a history.
18
15
  autorequire:
19
16
  default_executable:
20
17
  bindir: bin
21
18
  has_rdoc: true
22
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
23
20
  requirements:
24
- -
25
- - ">"
26
- - !ruby/object:Gem::Version
27
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
28
24
  version:
29
25
  platform: ruby
30
26
  signing_key:
31
27
  cert_chain:
32
28
  post_install_message:
33
29
  authors:
34
- - Aaron Patterson
30
+ - Aaron Patterson
35
31
  files:
36
- - CHANGELOG.txt
37
- - EXAMPLES.txt
38
- - GUIDE.txt
39
- - LICENSE.txt
40
- - Manifest.txt
41
- - NOTES.txt
42
- - README.txt
43
- - Rakefile
44
- - eg/flickr_upload.rb
45
- - eg/mech-dump.rb
46
- - eg/proxy_req.rb
47
- - eg/rubyforge.rb
48
- - eg/spider.rb
49
- - lib/mechanize.rb
50
- - lib/mechanize/cookie.rb
51
- - lib/mechanize/errors.rb
52
- - lib/mechanize/form.rb
53
- - lib/mechanize/form_elements.rb
54
- - lib/mechanize/history.rb
55
- - lib/mechanize/inspect.rb
56
- - lib/mechanize/list.rb
57
- - lib/mechanize/monkey_patch.rb
58
- - lib/mechanize/net-overrides/net/http.rb
59
- - lib/mechanize/net-overrides/net/https.rb
60
- - lib/mechanize/net-overrides/net/protocol.rb
61
- - lib/mechanize/page.rb
62
- - lib/mechanize/page_elements.rb
63
- - lib/mechanize/parsers/rexml_page.rb
64
- - lib/mechanize/pluggable_parsers.rb
65
- - lib/mechanize/rexml.rb
66
- - setup.rb
67
- - test/data/htpasswd
68
- - test/data/server.crt
69
- - test/data/server.csr
70
- - test/data/server.key
71
- - test/data/server.pem
72
- - test/htdocs/alt_text.html
73
- - test/htdocs/bad_form_test.html
74
- - test/htdocs/button.jpg
75
- - test/htdocs/empty_form.html
76
- - test/htdocs/file_upload.html
77
- - test/htdocs/find_link.html
78
- - test/htdocs/form_multi_select.html
79
- - test/htdocs/form_multival.html
80
- - test/htdocs/form_no_action.html
81
- - test/htdocs/form_no_input_name.html
82
- - test/htdocs/form_select.html
83
- - test/htdocs/form_select_all.html
84
- - test/htdocs/form_select_none.html
85
- - test/htdocs/form_select_noopts.html
86
- - test/htdocs/form_set_fields.html
87
- - test/htdocs/form_test.html
88
- - test/htdocs/frame_test.html
89
- - test/htdocs/google.html
90
- - test/htdocs/iframe_test.html
91
- - test/htdocs/index.html
92
- - test/htdocs/link with space.html
93
- - test/htdocs/no_title_test.html
94
- - test/htdocs/relative/tc_relative_links.html
95
- - test/htdocs/tc_bad_links.html
96
- - test/htdocs/tc_checkboxes.html
97
- - test/htdocs/tc_encoded_links.html
98
- - test/htdocs/tc_follow_meta.html
99
- - test/htdocs/tc_form_action.html
100
- - test/htdocs/tc_links.html
101
- - test/htdocs/tc_no_attributes.html
102
- - test/htdocs/tc_pretty_print.html
103
- - test/htdocs/tc_radiobuttons.html
104
- - test/htdocs/tc_referer.html
105
- - test/htdocs/tc_relative_links.html
106
- - test/htdocs/tc_textarea.html
107
- - test/ssl_server.rb
108
- - test/tc_authenticate.rb
109
- - test/tc_bad_links.rb
110
- - test/tc_checkboxes.rb
111
- - test/tc_cookie_class.rb
112
- - test/tc_cookie_jar.rb
113
- - test/tc_cookies.rb
114
- - test/tc_encoded_links.rb
115
- - test/tc_errors.rb
116
- - test/tc_follow_meta.rb
117
- - test/tc_form_action.rb
118
- - test/tc_form_as_hash.rb
119
- - test/tc_form_button.rb
120
- - test/tc_form_no_inputname.rb
121
- - test/tc_forms.rb
122
- - test/tc_frames.rb
123
- - test/tc_gzipping.rb
124
- - test/tc_history.rb
125
- - test/tc_html_unscape_forms.rb
126
- - test/tc_if_modified_since.rb
127
- - test/tc_keep_alive.rb
128
- - test/tc_links.rb
129
- - test/tc_mech.rb
130
- - test/tc_multi_select.rb
131
- - test/tc_no_attributes.rb
132
- - test/tc_page.rb
133
- - test/tc_pluggable_parser.rb
134
- - test/tc_post_form.rb
135
- - test/tc_pretty_print.rb
136
- - test/tc_proxy.rb
137
- - test/tc_radiobutton.rb
138
- - test/tc_referer.rb
139
- - test/tc_relative_links.rb
140
- - test/tc_response_code.rb
141
- - test/tc_save_file.rb
142
- - test/tc_select.rb
143
- - test/tc_select_all.rb
144
- - test/tc_select_none.rb
145
- - test/tc_select_noopts.rb
146
- - test/tc_set_fields.rb
147
- - test/tc_ssl_server.rb
148
- - test/tc_subclass.rb
149
- - test/tc_textarea.rb
150
- - test/tc_upload.rb
151
- - test/tc_watches.rb
152
- - test/test_all.rb
153
- - test/test_includes.rb
154
- - test/test_mechanize_file.rb
155
- - test/test_servlets.rb
32
+ - CHANGELOG.txt
33
+ - EXAMPLES.txt
34
+ - GUIDE.txt
35
+ - LICENSE.txt
36
+ - Manifest.txt
37
+ - NOTES.txt
38
+ - README.txt
39
+ - Rakefile
40
+ - eg/flickr_upload.rb
41
+ - eg/mech-dump.rb
42
+ - eg/proxy_req.rb
43
+ - eg/rubyforge.rb
44
+ - eg/spider.rb
45
+ - lib/mechanize.rb
46
+ - lib/mechanize/cookie.rb
47
+ - lib/mechanize/errors.rb
48
+ - lib/mechanize/form.rb
49
+ - lib/mechanize/form_elements.rb
50
+ - lib/mechanize/history.rb
51
+ - lib/mechanize/inspect.rb
52
+ - lib/mechanize/list.rb
53
+ - lib/mechanize/monkey_patch.rb
54
+ - lib/mechanize/net-overrides/net/http.rb
55
+ - lib/mechanize/net-overrides/net/https.rb
56
+ - lib/mechanize/net-overrides/net/protocol.rb
57
+ - lib/mechanize/page.rb
58
+ - lib/mechanize/page_elements.rb
59
+ - lib/mechanize/parsers/rexml_page.rb
60
+ - lib/mechanize/pluggable_parsers.rb
61
+ - lib/mechanize/rexml.rb
62
+ - setup.rb
63
+ - test/data/htpasswd
64
+ - test/data/server.crt
65
+ - test/data/server.csr
66
+ - test/data/server.key
67
+ - test/data/server.pem
68
+ - test/htdocs/alt_text.html
69
+ - test/htdocs/bad_form_test.html
70
+ - test/htdocs/button.jpg
71
+ - test/htdocs/empty_form.html
72
+ - test/htdocs/file_upload.html
73
+ - test/htdocs/find_link.html
74
+ - test/htdocs/form_multi_select.html
75
+ - test/htdocs/form_multival.html
76
+ - test/htdocs/form_no_action.html
77
+ - test/htdocs/form_no_input_name.html
78
+ - test/htdocs/form_select.html
79
+ - test/htdocs/form_select_all.html
80
+ - test/htdocs/form_select_none.html
81
+ - test/htdocs/form_select_noopts.html
82
+ - test/htdocs/form_set_fields.html
83
+ - test/htdocs/form_test.html
84
+ - test/htdocs/frame_test.html
85
+ - test/htdocs/google.html
86
+ - test/htdocs/iframe_test.html
87
+ - test/htdocs/index.html
88
+ - test/htdocs/link with space.html
89
+ - test/htdocs/no_title_test.html
90
+ - test/htdocs/relative/tc_relative_links.html
91
+ - test/htdocs/tc_bad_links.html
92
+ - test/htdocs/tc_base_link.html
93
+ - test/htdocs/tc_blank_form.html
94
+ - test/htdocs/tc_checkboxes.html
95
+ - test/htdocs/tc_encoded_links.html
96
+ - test/htdocs/tc_follow_meta.html
97
+ - test/htdocs/tc_form_action.html
98
+ - test/htdocs/tc_links.html
99
+ - test/htdocs/tc_no_attributes.html
100
+ - test/htdocs/tc_pretty_print.html
101
+ - test/htdocs/tc_radiobuttons.html
102
+ - test/htdocs/tc_referer.html
103
+ - test/htdocs/tc_relative_links.html
104
+ - test/htdocs/tc_textarea.html
105
+ - test/htdocs/unusual______.html
106
+ - test/ssl_server.rb
107
+ - test/tc_authenticate.rb
108
+ - test/tc_bad_links.rb
109
+ - test/tc_blank_form.rb
110
+ - test/tc_checkboxes.rb
111
+ - test/tc_cookie_class.rb
112
+ - test/tc_cookie_jar.rb
113
+ - test/tc_cookies.rb
114
+ - test/tc_encoded_links.rb
115
+ - test/tc_errors.rb
116
+ - test/tc_follow_meta.rb
117
+ - test/tc_form_action.rb
118
+ - test/tc_form_as_hash.rb
119
+ - test/tc_form_button.rb
120
+ - test/tc_form_no_inputname.rb
121
+ - test/tc_forms.rb
122
+ - test/tc_frames.rb
123
+ - test/tc_gzipping.rb
124
+ - test/tc_history.rb
125
+ - test/tc_html_unscape_forms.rb
126
+ - test/tc_if_modified_since.rb
127
+ - test/tc_keep_alive.rb
128
+ - test/tc_links.rb
129
+ - test/tc_mech.rb
130
+ - test/tc_multi_select.rb
131
+ - test/tc_no_attributes.rb
132
+ - test/tc_page.rb
133
+ - test/tc_pluggable_parser.rb
134
+ - test/tc_post_form.rb
135
+ - test/tc_pretty_print.rb
136
+ - test/tc_proxy.rb
137
+ - test/tc_radiobutton.rb
138
+ - test/tc_referer.rb
139
+ - test/tc_relative_links.rb
140
+ - test/tc_response_code.rb
141
+ - test/tc_save_file.rb
142
+ - test/tc_select.rb
143
+ - test/tc_select_all.rb
144
+ - test/tc_select_none.rb
145
+ - test/tc_select_noopts.rb
146
+ - test/tc_set_fields.rb
147
+ - test/tc_ssl_server.rb
148
+ - test/tc_subclass.rb
149
+ - test/tc_textarea.rb
150
+ - test/tc_upload.rb
151
+ - test/tc_watches.rb
152
+ - test/test_all.rb
153
+ - test/test_includes.rb
154
+ - test/test_mechanize_file.rb
155
+ - test/test_servlets.rb
156
156
  test_files:
157
- - test/test_all.rb
157
+ - test/test_all.rb
158
158
  rdoc_options:
159
- - "--main"
160
- - README.txt
159
+ - --main
160
+ - README.txt
161
161
  extra_rdoc_files:
162
- - CHANGELOG.txt
163
- - EXAMPLES.txt
164
- - GUIDE.txt
165
- - LICENSE.txt
166
- - Manifest.txt
167
- - NOTES.txt
168
- - README.txt
162
+ - CHANGELOG.txt
163
+ - EXAMPLES.txt
164
+ - GUIDE.txt
165
+ - LICENSE.txt
166
+ - Manifest.txt
167
+ - NOTES.txt
168
+ - README.txt
169
169
  executables: []
170
+
170
171
  extensions: []
172
+
171
173
  requirements: []
174
+
172
175
  dependencies:
173
- - !ruby/object:Gem::Dependency
174
- name: hpricot
175
- version_requirement:
176
- version_requirements: !ruby/object:Gem::Version::Requirement
177
- requirements:
178
- -
179
- - ">="
180
- - !ruby/object:Gem::Version
181
- version: 0.5.0
182
- version:
183
- - !ruby/object:Gem::Dependency
184
- name: hoe
185
- version_requirement:
186
- version_requirements: !ruby/object:Gem::Version::Requirement
187
- requirements:
188
- -
189
- - ">="
190
- - !ruby/object:Gem::Version
191
- version: 1.2.1
192
- version:
176
+ - !ruby/object:Gem::Dependency
177
+ name: hpricot
178
+ version_requirement:
179
+ version_requirements: !ruby/object:Gem::Version::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: 0.5.0
184
+ version:
185
+ - !ruby/object:Gem::Dependency
186
+ name: hoe
187
+ version_requirement:
188
+ version_requirements: !ruby/object:Gem::Version::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 1.2.2
193
+ version: