diamond-mechanize 2.1 → 2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. metadata +222 -167
  2. data/Rakefile +0 -49
  3. data/lib/mechanize/content_type_error.rb +0 -13
  4. data/lib/mechanize/cookie.rb +0 -232
  5. data/lib/mechanize/cookie_jar.rb +0 -194
  6. data/lib/mechanize/download.rb +0 -59
  7. data/lib/mechanize/element_matcher.rb +0 -36
  8. data/lib/mechanize/file.rb +0 -65
  9. data/lib/mechanize/file_connection.rb +0 -17
  10. data/lib/mechanize/file_request.rb +0 -26
  11. data/lib/mechanize/file_response.rb +0 -74
  12. data/lib/mechanize/file_saver.rb +0 -39
  13. data/lib/mechanize/form/button.rb +0 -6
  14. data/lib/mechanize/form/check_box.rb +0 -12
  15. data/lib/mechanize/form/field.rb +0 -54
  16. data/lib/mechanize/form/file_upload.rb +0 -21
  17. data/lib/mechanize/form/hidden.rb +0 -3
  18. data/lib/mechanize/form/image_button.rb +0 -19
  19. data/lib/mechanize/form/keygen.rb +0 -34
  20. data/lib/mechanize/form/multi_select_list.rb +0 -94
  21. data/lib/mechanize/form/option.rb +0 -50
  22. data/lib/mechanize/form/radio_button.rb +0 -55
  23. data/lib/mechanize/form/reset.rb +0 -3
  24. data/lib/mechanize/form/select_list.rb +0 -44
  25. data/lib/mechanize/form/submit.rb +0 -3
  26. data/lib/mechanize/form/text.rb +0 -3
  27. data/lib/mechanize/form/textarea.rb +0 -3
  28. data/lib/mechanize/form.rb +0 -543
  29. data/lib/mechanize/headers.rb +0 -23
  30. data/lib/mechanize/history.rb +0 -82
  31. data/lib/mechanize/http/agent.rb +0 -1004
  32. data/lib/mechanize/http/auth_challenge.rb +0 -59
  33. data/lib/mechanize/http/auth_realm.rb +0 -31
  34. data/lib/mechanize/http/content_disposition_parser.rb +0 -188
  35. data/lib/mechanize/http/www_authenticate_parser.rb +0 -155
  36. data/lib/mechanize/http.rb +0 -8
  37. data/lib/mechanize/monkey_patch.rb +0 -16
  38. data/lib/mechanize/page/base.rb +0 -7
  39. data/lib/mechanize/page/frame.rb +0 -27
  40. data/lib/mechanize/page/image.rb +0 -30
  41. data/lib/mechanize/page/label.rb +0 -20
  42. data/lib/mechanize/page/link.rb +0 -98
  43. data/lib/mechanize/page/meta_refresh.rb +0 -68
  44. data/lib/mechanize/page.rb +0 -440
  45. data/lib/mechanize/parser.rb +0 -173
  46. data/lib/mechanize/pluggable_parsers.rb +0 -144
  47. data/lib/mechanize/redirect_limit_reached_error.rb +0 -19
  48. data/lib/mechanize/redirect_not_get_or_head_error.rb +0 -21
  49. data/lib/mechanize/response_code_error.rb +0 -21
  50. data/lib/mechanize/response_read_error.rb +0 -27
  51. data/lib/mechanize/robots_disallowed_error.rb +0 -28
  52. data/lib/mechanize/test_case.rb +0 -663
  53. data/lib/mechanize/unauthorized_error.rb +0 -3
  54. data/lib/mechanize/unsupported_scheme_error.rb +0 -6
  55. data/lib/mechanize/util.rb +0 -101
  56. data/lib/mechanize.rb +0 -1079
  57. data/test/data/htpasswd +0 -1
  58. data/test/data/server.crt +0 -16
  59. data/test/data/server.csr +0 -12
  60. data/test/data/server.key +0 -15
  61. data/test/data/server.pem +0 -15
  62. data/test/htdocs/alt_text.html +0 -10
  63. data/test/htdocs/bad_form_test.html +0 -9
  64. data/test/htdocs/button.jpg +0 -0
  65. data/test/htdocs/canonical_uri.html +0 -9
  66. data/test/htdocs/dir with spaces/foo.html +0 -1
  67. data/test/htdocs/empty_form.html +0 -6
  68. data/test/htdocs/file_upload.html +0 -26
  69. data/test/htdocs/find_link.html +0 -41
  70. data/test/htdocs/form_multi_select.html +0 -16
  71. data/test/htdocs/form_multival.html +0 -37
  72. data/test/htdocs/form_no_action.html +0 -18
  73. data/test/htdocs/form_no_input_name.html +0 -16
  74. data/test/htdocs/form_order_test.html +0 -11
  75. data/test/htdocs/form_select.html +0 -16
  76. data/test/htdocs/form_set_fields.html +0 -14
  77. data/test/htdocs/form_test.html +0 -188
  78. data/test/htdocs/frame_referer_test.html +0 -10
  79. data/test/htdocs/frame_test.html +0 -30
  80. data/test/htdocs/google.html +0 -13
  81. data/test/htdocs/index.html +0 -6
  82. data/test/htdocs/link with space.html +0 -5
  83. data/test/htdocs/meta_cookie.html +0 -11
  84. data/test/htdocs/no_title_test.html +0 -6
  85. data/test/htdocs/noindex.html +0 -9
  86. data/test/htdocs/rails_3_encoding_hack_form_test.html +0 -27
  87. data/test/htdocs/relative/tc_relative_links.html +0 -21
  88. data/test/htdocs/robots.html +0 -8
  89. data/test/htdocs/robots.txt +0 -2
  90. data/test/htdocs/tc_bad_charset.html +0 -9
  91. data/test/htdocs/tc_bad_links.html +0 -5
  92. data/test/htdocs/tc_base_link.html +0 -8
  93. data/test/htdocs/tc_blank_form.html +0 -11
  94. data/test/htdocs/tc_charset.html +0 -6
  95. data/test/htdocs/tc_checkboxes.html +0 -19
  96. data/test/htdocs/tc_encoded_links.html +0 -5
  97. data/test/htdocs/tc_field_precedence.html +0 -11
  98. data/test/htdocs/tc_follow_meta.html +0 -8
  99. data/test/htdocs/tc_form_action.html +0 -48
  100. data/test/htdocs/tc_links.html +0 -19
  101. data/test/htdocs/tc_meta_in_body.html +0 -9
  102. data/test/htdocs/tc_pretty_print.html +0 -17
  103. data/test/htdocs/tc_referer.html +0 -16
  104. data/test/htdocs/tc_relative_links.html +0 -19
  105. data/test/htdocs/tc_textarea.html +0 -23
  106. data/test/htdocs/test_click.html +0 -11
  107. data/test/htdocs/unusual______.html +0 -5
  108. data/test/test_mechanize.rb +0 -1164
  109. data/test/test_mechanize_cookie.rb +0 -451
  110. data/test/test_mechanize_cookie_jar.rb +0 -483
  111. data/test/test_mechanize_download.rb +0 -43
  112. data/test/test_mechanize_file.rb +0 -61
  113. data/test/test_mechanize_file_connection.rb +0 -21
  114. data/test/test_mechanize_file_request.rb +0 -19
  115. data/test/test_mechanize_file_saver.rb +0 -21
  116. data/test/test_mechanize_form.rb +0 -875
  117. data/test/test_mechanize_form_check_box.rb +0 -38
  118. data/test/test_mechanize_form_encoding.rb +0 -114
  119. data/test/test_mechanize_form_field.rb +0 -63
  120. data/test/test_mechanize_form_file_upload.rb +0 -20
  121. data/test/test_mechanize_form_image_button.rb +0 -12
  122. data/test/test_mechanize_form_keygen.rb +0 -32
  123. data/test/test_mechanize_form_multi_select_list.rb +0 -84
  124. data/test/test_mechanize_form_option.rb +0 -55
  125. data/test/test_mechanize_form_radio_button.rb +0 -78
  126. data/test/test_mechanize_form_select_list.rb +0 -76
  127. data/test/test_mechanize_form_textarea.rb +0 -52
  128. data/test/test_mechanize_headers.rb +0 -35
  129. data/test/test_mechanize_history.rb +0 -103
  130. data/test/test_mechanize_http_agent.rb +0 -1225
  131. data/test/test_mechanize_http_auth_challenge.rb +0 -39
  132. data/test/test_mechanize_http_auth_realm.rb +0 -49
  133. data/test/test_mechanize_http_content_disposition_parser.rb +0 -118
  134. data/test/test_mechanize_http_www_authenticate_parser.rb +0 -146
  135. data/test/test_mechanize_link.rb +0 -80
  136. data/test/test_mechanize_page.rb +0 -118
  137. data/test/test_mechanize_page_encoding.rb +0 -182
  138. data/test/test_mechanize_page_frame.rb +0 -16
  139. data/test/test_mechanize_page_link.rb +0 -390
  140. data/test/test_mechanize_page_meta_refresh.rb +0 -127
  141. data/test/test_mechanize_parser.rb +0 -289
  142. data/test/test_mechanize_pluggable_parser.rb +0 -52
  143. data/test/test_mechanize_redirect_limit_reached_error.rb +0 -24
  144. data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -14
  145. data/test/test_mechanize_subclass.rb +0 -22
  146. data/test/test_mechanize_util.rb +0 -103
  147. data/test/test_multi_select.rb +0 -119
@@ -1,36 +0,0 @@
1
- module Mechanize::ElementMatcher
2
-
3
- def elements_with singular, plural = "#{singular}s"
4
- class_eval <<-CODE
5
- def #{plural}_with criteria = {}
6
- criteria = if String === criteria then
7
- {:name => criteria}
8
- else
9
- criteria.map do |k, v|
10
- k = :dom_id if k.to_sym == :id
11
- k = :dom_class if k.to_sym == :class
12
- [k, v]
13
- end
14
- end
15
-
16
- f = #{plural}.find_all do |thing|
17
- criteria.all? do |k,v|
18
- v === thing.send(k)
19
- end
20
- end
21
- yield f if block_given?
22
- f
23
- end
24
-
25
- def #{singular}_with criteria = {}
26
- f = #{plural}_with(criteria).first
27
- yield f if block_given?
28
- f
29
- end
30
-
31
- alias :#{singular} :#{singular}_with
32
- CODE
33
- end
34
-
35
- end
36
-
@@ -1,65 +0,0 @@
1
- ##
2
- # This is the base class for the Pluggable Parsers. If Mechanize cannot find
3
- # an appropriate class to use for the content type, this class will be used.
4
- # For example, if you download an image/jpeg, Mechanize will not know how to
5
- # parse it, so this class will be instantiated.
6
- #
7
- # This is a good class to use as the base class for building your own
8
- # pluggable parsers.
9
- #
10
- # == Example
11
- #
12
- # require 'mechanize'
13
- #
14
- # agent = Mechanize.new
15
- # agent.get('http://example.com/foo.jpg').class #=> Mechanize::File
16
-
17
- class Mechanize::File
18
-
19
- include Mechanize::Parser
20
-
21
- ##
22
- # The HTTP response body, the raw file contents
23
-
24
- attr_accessor :body
25
-
26
- ##
27
- # The filename for this file based on the content-disposition of the
28
- # response or the basename of the URL
29
-
30
- attr_accessor :filename
31
-
32
- alias content body
33
-
34
- ##
35
- # Creates a new file retrieved from the given +uri+ and +response+ object.
36
- # The +body+ is the HTTP response body and +code+ is the HTTP status.
37
-
38
- def initialize uri = nil, response = nil, body = nil, code = nil
39
- @uri = uri
40
- @body = body
41
- @code = code
42
-
43
- @full_path = false unless defined? @full_path
44
-
45
- fill_header response
46
- extract_filename
47
-
48
- yield self if block_given?
49
- end
50
-
51
- ##
52
- # Use this method to save the content of this object to +filename+
53
-
54
- def save filename = nil
55
- filename = find_free_name filename
56
-
57
- open filename, 'wb' do |f|
58
- f.write body
59
- end
60
- end
61
-
62
- alias save_as save
63
-
64
- end
65
-
@@ -1,17 +0,0 @@
1
- ##
2
- # Wrapper to make a file URI work like an http URI
3
-
4
- class Mechanize::FileConnection
5
-
6
- @instance = nil
7
-
8
- def self.new *a
9
- @instance ||= super
10
- end
11
-
12
- def request uri, request
13
- yield Mechanize::FileResponse.new Mechanize::Util.uri_unescape uri.path
14
- end
15
-
16
- end
17
-
@@ -1,26 +0,0 @@
1
- ##
2
- # A wrapper for a file URI that makes a request that works like a
3
- # Net::HTTPRequest
4
-
5
- class Mechanize::FileRequest
6
-
7
- attr_accessor :uri
8
-
9
- def initialize uri
10
- @uri = uri
11
- end
12
-
13
- def add_field *a
14
- end
15
-
16
- alias []= add_field
17
-
18
- def path
19
- @uri.path
20
- end
21
-
22
- def each_header
23
- end
24
-
25
- end
26
-
@@ -1,74 +0,0 @@
1
- ##
2
- # Fake response for dealing with file:/// requests
3
-
4
- class Mechanize::FileResponse
5
- def initialize(file_path)
6
- @file_path = file_path
7
- end
8
-
9
- def read_body
10
- raise Mechanize::ResponseCodeError, self unless File.exist? @file_path
11
-
12
- if directory?
13
- yield dir_body
14
- else
15
- open @file_path, 'rb' do |io|
16
- yield io.read
17
- end
18
- end
19
- end
20
-
21
- def code
22
- File.exist?(@file_path) ? 200 : 404
23
- end
24
-
25
- def content_length
26
- return dir_body.length if directory?
27
- File.exist?(@file_path) ? File.stat(@file_path).size : 0
28
- end
29
-
30
- def each_header; end
31
-
32
- def [](key)
33
- return nil unless key.downcase == 'content-type'
34
- return 'text/html' if directory?
35
- return 'text/html' if ['.html', '.xhtml'].any? { |extn|
36
- @file_path =~ /#{extn}$/
37
- }
38
- nil
39
- end
40
-
41
- def each
42
- end
43
-
44
- def get_fields(key)
45
- []
46
- end
47
-
48
- def http_version
49
- '0'
50
- end
51
-
52
- def message
53
- File.exist?(@file_path) ? 'OK' : 'Not Found'
54
- end
55
-
56
- private
57
-
58
- def dir_body
59
- body = %w[<html><body>]
60
- body.concat Dir[File.join(@file_path, '*')].map { |f|
61
- "<a href=\"file://#{f}\">#{File.basename(f)}</a>"
62
- }
63
- body << %w[</body></html>]
64
-
65
- body = body.join "\n"
66
- body.force_encoding Encoding::BINARY if body.respond_to? :force_encoding
67
- body
68
- end
69
-
70
- def directory?
71
- File.directory?(@file_path)
72
- end
73
- end
74
-
@@ -1,39 +0,0 @@
1
- ##
2
- # This is a pluggable parser that automatically saves every file it
3
- # encounters. It saves the files as a tree, reflecting the host and file
4
- # path.
5
- #
6
- # == Example
7
- #
8
- # This example saves all .pdf files
9
- #
10
- # require 'mechanize'
11
- #
12
- # agent = Mechanize.new
13
- # agent.pluggable_parser.pdf = Mechanize::FileSaver
14
- # agent.get('http://example.com/foo.pdf')
15
- #
16
- # Dir['example.com/*'] # => foo.pdf
17
-
18
- class Mechanize::FileSaver < Mechanize::Download
19
-
20
- attr_reader :filename
21
-
22
- def initialize uri = nil, response = nil, body_io = nil, code = nil
23
- @full_path = true
24
-
25
- super
26
-
27
- save @filename
28
- end
29
-
30
- ##
31
- # The save_as alias is provided for backwards compatibility with mechanize
32
- # 2.0. It will be removed in mechanize 3.
33
- #--
34
- # TODO remove in mechanize 3
35
-
36
- alias save_as save
37
-
38
- end
39
-
@@ -1,6 +0,0 @@
1
- ##
2
- # A Submit button in a Form
3
-
4
- class Mechanize::Form::Button < Mechanize::Form::Field
5
- end
6
-
@@ -1,12 +0,0 @@
1
- ##
2
- # This class represents a check box found in a Form. To activate the CheckBox
3
- # in the Form, set the checked method to true.
4
-
5
- class Mechanize::Form::CheckBox < Mechanize::Form::RadioButton
6
-
7
- def query_value
8
- [[@name, @value || "on"]]
9
- end
10
-
11
- end
12
-
@@ -1,54 +0,0 @@
1
- ##
2
- # This class represents a field in a form. It handles the following input
3
- # tags found in a form:
4
- #
5
- # * text
6
- # * password
7
- # * hidden
8
- # * int
9
- # * textarea
10
- # * keygen
11
- #
12
- # To set the value of a field, just use the value method:
13
- #
14
- # field.value = "foo"
15
-
16
- class Mechanize::Form::Field
17
- attr_accessor :name, :value, :node, :type
18
-
19
- def initialize node, value = node['value']
20
- @node = node
21
- @name = Mechanize::Util.html_unescape(node['name'])
22
- @value = if value.is_a? String
23
- Mechanize::Util.html_unescape(value)
24
- else
25
- value
26
- end
27
-
28
- @type = node['type']
29
- end
30
-
31
- def query_value
32
- [[@name, @value || '']]
33
- end
34
-
35
- def <=> other
36
- return 0 if self == other
37
- return 1 if Hash === node
38
- return -1 if Hash === other.node
39
- node <=> other.node
40
- end
41
-
42
- # This method is a shortcut to get field's DOM id.
43
- # Common usage: form.field_with(:dom_id => "foo")
44
- def dom_id
45
- node['id']
46
- end
47
-
48
- # This method is a shortcut to get field's DOM id.
49
- # Common usage: form.field_with(:dom_class => "foo")
50
- def dom_class
51
- node['class']
52
- end
53
- end
54
-
@@ -1,21 +0,0 @@
1
- # This class represents a file upload field found in a form. To use this
2
- # class, set FileUpload#file_data= to the data of the file you want to upload
3
- # and FileUpload#mime_type= to the appropriate mime type of the file.
4
- #
5
- # See the example in EXAMPLES
6
-
7
- class Mechanize::Form::FileUpload < Mechanize::Form::Field
8
- attr_accessor :file_name # File name
9
- attr_accessor :mime_type # Mime Type (Optional)
10
-
11
- alias :file_data :value
12
- alias :file_data= :value=
13
-
14
- def initialize node, file_name
15
- @file_name = Mechanize::Util.html_unescape(file_name)
16
- @file_data = nil
17
- @node = node
18
- super(node, @file_data)
19
- end
20
- end
21
-
@@ -1,3 +0,0 @@
1
- class Mechanize::Form::Hidden < Mechanize::Form::Field
2
- end
3
-
@@ -1,19 +0,0 @@
1
- ##
2
- # This class represents an image button in a form. Use the x and y methods to
3
- # set the x and y positions for where the mouse "clicked".
4
-
5
- class Mechanize::Form::ImageButton < Mechanize::Form::Button
6
- attr_accessor :x, :y
7
-
8
- def initialize *args
9
- @x = nil
10
- @y = nil
11
- super
12
- end
13
-
14
- def query_value
15
- [["#{@name}.x", (@x || 0).to_s],
16
- ["#{@name}.y", (@y || 0).to_s]]
17
- end
18
- end
19
-
@@ -1,34 +0,0 @@
1
- ##
2
- # This class represents a keygen (public / private key generator) found in a
3
- # Form. The field will automatically generate a key pair and compute its own
4
- # value to match the challenge. Call key to access the public/private key
5
- # pair.
6
-
7
- class Mechanize::Form::Keygen < Mechanize::Form::Field
8
- # The challenge for this <keygen>.
9
- attr_reader :challenge
10
-
11
- # The key associated with this <keygen> tag.
12
- attr_reader :key
13
-
14
- def initialize(node, value = nil)
15
- super
16
- @challenge = node['challenge']
17
-
18
- @spki = OpenSSL::Netscape::SPKI.new
19
- @spki.challenge = @challenge
20
-
21
- @key = nil
22
- generate_key if value.nil? || value.empty?
23
- end
24
-
25
- # Generates a key pair and sets the field's value.
26
- def generate_key(key_size = 2048)
27
- # Spec at http://dev.w3.org/html5/spec/Overview.html#the-keygen-element
28
- @key = OpenSSL::PKey::RSA.new key_size
29
- @spki.public_key = @key.public_key
30
- @spki.sign @key, OpenSSL::Digest::MD5.new
31
- self.value = @spki.to_pem
32
- end
33
- end
34
-
@@ -1,94 +0,0 @@
1
- ##
2
- # This class represents a select list where multiple values can be selected.
3
- # MultiSelectList#value= accepts an array, and those values are used as
4
- # values for the select list. For example, to select multiple values,
5
- # simply do this:
6
- #
7
- # list.value = ['one', 'two']
8
- #
9
- # Single values are still supported, so these two are the same:
10
- #
11
- # list.value = ['one']
12
- # list.value = 'one'
13
-
14
- class Mechanize::Form::MultiSelectList < Mechanize::Form::Field
15
-
16
- extend Mechanize::ElementMatcher
17
-
18
- attr_accessor :options
19
-
20
- def initialize node
21
- value = []
22
- @options = []
23
-
24
- # parse
25
- node.search('option').each do |n|
26
- @options << Mechanize::Form::Option.new(n, self)
27
- end
28
-
29
- super node, value
30
- end
31
-
32
- ##
33
- # :method: option_with
34
- #
35
- # Find one option on this select list with +criteria+
36
- #
37
- # Example:
38
- #
39
- # select_list.option_with(:value => '1').value = 'foo'
40
-
41
- ##
42
- # :method: options_with
43
- #
44
- # Find all options on this select list with +criteria+
45
- #
46
- # Example:
47
- #
48
- # select_list.options_with(:value => /1|2/).each do |field|
49
- # field.value = '20'
50
- # end
51
-
52
- elements_with :option
53
-
54
- def query_value
55
- value ? value.map { |v| [name, v] } : ''
56
- end
57
-
58
- # Select no options
59
- def select_none
60
- @value = []
61
- options.each { |o| o.untick }
62
- end
63
-
64
- # Select all options
65
- def select_all
66
- @value = []
67
- options.each { |o| o.tick }
68
- end
69
-
70
- # Get a list of all selected options
71
- def selected_options
72
- @options.find_all { |o| o.selected? }
73
- end
74
-
75
- def value=(values)
76
- select_none
77
- [values].flatten.each do |value|
78
- option = options.find { |o| o.value == value }
79
- if option.nil?
80
- @value.push(value)
81
- else
82
- option.select
83
- end
84
- end
85
- end
86
-
87
- def value
88
- value = []
89
- value.concat @value
90
- value.concat selected_options.map { |o| o.value }
91
- value
92
- end
93
-
94
- end