Hamlのビューでbyebugしたいのに、xss_mods.rbで止まってしまう

haml

こんにちは。たなか(@tanaka_ricecake)です。

相変わらずFatFreeCRMに振り回されてる日々です。

このGemは標準でビューにHamlを利用しているので、Hamlビギナーには結構扱いにくい感じになってたりします(学習しろよって話ですがね!)

先日、以下のような症状を解決できたのでシェアしておきます。

症状

html.hamlでbyebugを仕込んでも、xss_mods.rbに飛んで該当のビューで止まらない!

_show.html.hamlみたいなファイルにbyebugを仕込みます。

= byebug

関連記事→ [Rails] Hamlの中でbyebugを使う

 

もちろんbyebugを仕込んだ_show.html.hamlで止まってほしいのですが、ターミナルで確認すると…

[16, 25] in /usr/local/bundle/gems/haml-5.0.4/lib/haml/helpers/xss_mods.rb
   16:       end
   17:
   18:       # Don't escape text that's already safe,
   19:       # output is always HTML safe
   20:       def html_escape_with_haml_xss(text)
=> 21:         str = text.to_s
   22:         return text if str.html_safe?
   23:         Haml::Util.html_safe(html_escape_without_haml_xss(str))
   24:       end
   25:

haml/helpers/xss_mods.rb の中身で止まってしまっています。どこだよここは!!!

解決方法

“n” (ステップ実行)で一つずつ処理を進める

いままでbyebugは、[command + d] で処理を抜けてましたが、これを”n”でステップしながら進めます。

2、3と処理を進めていくと……

[3, 12] in /home/app/app/views/accounts/_sidebar_show.html.haml
    3: - pipeline = @account.opportunities.pipeline.map(&:weighted_amount).compact.sum
    4:
    5: .panel#summary
    6:   %h4= h(@account.name)
    7:   = byebug
=>  8:   - if @account.website
    9:     %div
   10:       %b= link_to(truncate(@account.website, length: 30), @account.website.to_url, :"data-popup" => true, title: t(:open_in_window, @account.website))

ちゃんとhtml.hamlで止まるようになりました! よかった!

これでデバッグできそうです!

まとめ

段階を踏もう。

xss_mods.rbってのはhamlが持つhelpersファイルの一つで、ビューの読みこみの際に処理が通るみたいでした。

こういった処理を抜けて最終的にhtml.hamlに到達するので、ステップ実行で一つずつ進めてやればよいとのこと。

 

ってことでHamlのビューでbyebugできるようになりました。

なにかにつけて躓きがちなHaml。今の所嫌いだな。

関連記事

[Rails] Hamlの中でbyebugを使う

 

コメントを残す

メールアドレスが公開されることはありません。