Ruby mechanizeのtextareaの扱いでハマった
textarea
を含む編集フォームで、何もいじっていないのに勝手に行頭に改行が追加されていく現象が発生したので調べてみた。
原因としては、
<textarea> hoge </textarea>
みたいなHTMLが帰ってきた場合に、Mechanize::Form::Textarea#value
が返す値として期待していたのは、"hoge"
なんだけど、実際には"\r\nhoge\r\n"
が返ってきたよという話。タチが悪いことにこのままPOSTしたりすると、先頭に改行の入るデータがPOSTされてしまうという。。。
今回は対象HTMLが皆上記のようなtextarea
の書き方だったので、下記の様なモンキーパッチあてて対応した。
混在している場合はどうするのが正解なのかわからない。。。Webブラウザの挙動を見る限り、"タグ直後の改行は無視する"のが鉄板のようなので、下記のコードでいいっぽいけど。
class Mechanize::Form::Textarea < Mechanize::Form::Field def initialize node, value = node['value'] super @value.gsub!(/\r\n/, "\n") if @value[0] && @value[0] == "\n" @value.slice!(0, 1) end end end
APIが無いWebアプリをゴニョゴニョするのは辛いねぇ。。。