class WWW::Mechanize::Form
def parse
def parse @fields = WWW::Mechanize::List.new @buttons = WWW::Mechanize::List.new @file_uploads = WWW::Mechanize::List.new @radiobuttons = WWW::Mechanize::List.new @checkboxes = WWW::Mechanize::List.new # Find all input tags form_node.search('input').each do |node| type = (node['type'] || 'text').downcase name = node['name'] next if name.nil? && !(type == 'submit' || type =='button') case type when 'radio' @radiobuttons << RadioButton.new(node['name'], node['value'], !!node['checked'], self) when 'checkbox' @checkboxes << CheckBox.new(node['name'], node['value'], !!node['checked'], self) when 'file' @file_uploads << FileUpload.new(node['name'], nil) when 'submit' @buttons << Button.new(node['name'], node['value']) when 'button' @buttons << Button.new(node['name'], node['value']) when 'image' @buttons << ImageButton.new(node['name'], node['value']) else @fields << Field.new(node['name'], node['value'] || '') end end # Find all textarea tags form_node.search('textarea').each do |node| next if node['name'].nil? @fields << Field.new(node['name'], node.inner_text) end # Find all select tags form_node.search('select').each do |node| next if node['name'].nil? if node.has_attribute? 'multiple' @fields << MultiSelectList.new(node['name'], node) else @fields << SelectList.new(node['name'], node) end end # Find all submit button tags # FIXME: what can I do with the reset buttons? form_node.search('button').each do |node| type = (node['type'] || 'submit').downcase next if type == 'reset' @buttons << Button.new(node['name'], node['value']) end end