Глядя на источник, может быть, что Mechanize должен работать так. Это заставляет метод формы в верхнем регистре, когда он выбирает форму; ожидается, что вы будете указывать метод в верхнем регистре, если вы хотите его сопоставить. Вы можете пропинговать механизированных людей и спросить их, должно ли это работать так.
Здесь, в Mechanize.submit, он вынуждает метод формы вводиться в верхнем регистре перед его сравнением:
def submit(form, button=nil, headers={})
...
case form.method.upcase
when 'POST'
...
when 'GET'
...
end
...
end
и здесь снова в Form.initialize, метод принудительно вводится в верхнем регистре:
def initialize(node, mech=nil, page=nil)
...
@method = (node['method'] || 'GET').upcase
Но в page.rb есть код, в котором mechanize сопоставляет форму (или ссылку, базу, фрейм или фрейм) с заданными вами параметрами, передаваемый параметр не обязательно вводится в верхнем регистре, поэтому сопоставление с учетом регистра :
def #{type}s_with(criteria)
criteria = {:name => criteria} if String === criteria
f = #{type}s.find_all do |thing|
criteria.all? { |k,v| v === thing.send(k) }
end
yield f if block_given?
f
end
Ну, это чувствительное к регистру совпадение, если вы передаете строку. Но если вы передадите регулярное выражение, это совпадение с регулярным выражением. Так что вы должны быть в состоянии сделать это:
login_form = page.form_with(:method => /post/i)
и пусть он работает нормально. Но я бы, вероятно, просто передал строку в верхнем регистре, отправил письмо механизаторам по электронной почте и пошел дальше.