mechanize:Mechanize::Form#fields_with, #fields

以下のような HTML で

<html>
<head>
<title>form test</title>
</head>
<body>

<form method="get" action="cgi/foo00.cgi" name="form1">
  <input type="text" name="text1" />
  <input type="hidden" name="hidden1" />
  <textarea name="textarea1" rows="4" cols="40">foo</textarea>
</form>

</body>
</html>
>> require 'mechanize'
=> true
>> agent = Mechanize.new
=> #<Mechanize:0xb747f538 ...
>> page = agent.get('http://127.0.0.1:8080/test10_form.html')
=> #<Mechanize::Page
 {url #<URI::HTTP:0xb747bc80 URL:http://127.0.0.1:8080/test10_form.html>}
 {meta}
 {title "form test"}
 {iframes}
 {frames}
 {links}
 {forms
  #<Mechanize::Form
   {name "form1"}
   {method "GET"}
   {action "cgi/foo00.cgi"}
   {fields
    #<Mechanize::Form::Text:0xb74730d0
     @name="text1",
     @node=
      #(Element:0x..fdba3993a {
        name = "input",
        attributes = [
          #(Attr:0x..fdba37f40 { name = "type", value = "text" }),
          #(Attr:0x..fdba37f36 { name = "name", value = "text1" })]
        }),
     @value="">
    #<Mechanize::Form::Hidden:0xb7472f04
     @name="hidden1",
     @node=
      #(Element:0x..fdba398ea {
        name = "input",
        attributes = [
          #(Attr:0x..fdba36a5a { name = "type", value = "hidden" }),
          #(Attr:0x..fdba36a50 { name = "name", value = "hidden1" })]
        }),
     @value="">
    #<Mechanize::Form::Field:0xb7472798
     @name="textarea1",
     @node=
      #(Element:0x..fdba39408 {
        name = "textarea",
        attributes = [
          #(Attr:0x..fdba355a6 { name = "name", value = "textarea1" }),
          #(Attr:0x..fdba3559c { name = "rows", value = "4" }),
          #(Attr:0x..fdba35592 { name = "cols", value = "40" })],
        children = [ #(Text "foo")]
        }),
     @value="foo">}
   {radiobuttons}
   {checkboxes}
   {file_uploads}
   {buttons}>}>

>> f = page.form('form1')
=> #<Mechanize::Form
 {name "form1"}
 {method "GET"}
 {action "cgi/foo00.cgi"}
 {fields
  #<Mechanize::Form::Text:0xb74730d0
   @name="text1",
   @node=
    #(Element:0x..fdba3993a {
      name = "input",
      attributes = [
        #(Attr:0x..fdba37f40 { name = "type", value = "text" }),
        #(Attr:0x..fdba37f36 { name = "name", value = "text1" })]
      }),
   @value="">
  #<Mechanize::Form::Hidden:0xb7472f04
   @name="hidden1",
   @node=
    #(Element:0x..fdba398ea {
      name = "input",
      attributes = [
        #(Attr:0x..fdba36a5a { name = "type", value = "hidden" }),
        #(Attr:0x..fdba36a50 { name = "name", value = "hidden1" })]
      }),
   @value="">
  #<Mechanize::Form::Field:0xb7472798
   @name="textarea1",
   @node=
    #(Element:0x..fdba39408 {
      name = "textarea",
      attributes = [
        #(Attr:0x..fdba355a6 { name = "name", value = "textarea1" }),
        #(Attr:0x..fdba3559c { name = "rows", value = "4" }),
        #(Attr:0x..fdba35592 { name = "cols", value = "40" })],
      children = [ #(Text "foo")]
      }),
   @value="foo">}
 {radiobuttons}
 {checkboxes}
 {file_uploads}
 {buttons}>

>> f.fields_with
=> [#<Mechanize::Form::Text:0xb74730d0 @name="text1", @value="", @node=#<Nokogiri::XML::Element:0x..fdba3993a name="input" attributes=[#<Nokogiri::XML::Attr:0x..fdba37f40 name="type" value="text">, #<Nokogiri::XML::Attr:0x..fdba37f36 name="name" value="text1">]>>, #<Mechanize::Form::Hidden:0xb7472f04 @name="hidden1", @value="", @node=#<Nokogiri::XML::Element:0x..fdba398ea name="input" attributes=[#<Nokogiri::XML::Attr:0x..fdba36a5a name="type" value="hidden">, #<Nokogiri::XML::Attr:0x..fdba36a50 name="name" value="hidden1">]>>, #<Mechanize::Form::Field:0xb7472798 @name="textarea1", @value="foo", @node=#<Nokogiri::XML::Element:0x..fdba39408 name="textarea" attributes=[#<Nokogiri::XML::Attr:0x..fdba355a6 name="name" value="textarea1">, #<Nokogiri::XML::Attr:0x..fdba3559c name="rows" value="4">, #<Nokogiri::XML::Attr:0x..fdba35592 name="cols" value="40">] children=[#<Nokogiri::XML::Text:0x..fdba343f4 "foo">]>>]
>> f.fields_with.size
=> 3
>> f.fields
=> [#<Mechanize::Form::Text:0xb74730d0 @name="text1", @value="", @node=#<Nokogiri::XML::Element:0x..fdba3993a name="input" attributes=[#<Nokogiri::XML::Attr:0x..fdba37f40 name="type" value="text">, #<Nokogiri::XML::Attr:0x..fdba37f36 name="name" value="text1">]>>, #<Mechanize::Form::Hidden:0xb7472f04 @name="hidden1", @value="", @node=#<Nokogiri::XML::Element:0x..fdba398ea name="input" attributes=[#<Nokogiri::XML::Attr:0x..fdba36a5a name="type" value="hidden">, #<Nokogiri::XML::Attr:0x..fdba36a50 name="name" value="hidden1">]>>, #<Mechanize::Form::Field:0xb7472798 @name="textarea1", @value="foo", @node=#<Nokogiri::XML::Element:0x..fdba39408 name="textarea" attributes=[#<Nokogiri::XML::Attr:0x..fdba355a6 name="name" value="textarea1">, #<Nokogiri::XML::Attr:0x..fdba3559c name="rows" value="4">, #<Nokogiri::XML::Attr:0x..fdba35592 name="cols" value="40">] children=[#<Nokogiri::XML::Text:0x..fdba343f4 "foo">]>>]
>> f.fields.size
=> 3

複数形の _with の場合は、「attr_reader :fields, :buttons, :file_uploads, :radiobuttons, :checkboxes」があるので _with の alias ではないらしい〜(なので引数は取れないはず)