query: tag:monk

monk-glue-0.0.1
に含まれている Monk::Glue::Reloaderには微妙な
バグがあり、developmentモードでソースコードを更新したときに
自動リロードが上手くかからない事があるようです。

Rack::Reloaderの問題かと思っていたのですが、
調べてみると Monk::Glue::Reloader の処理に問題があることがわかりました。

reload!メソッドを以下のように修正したところ正常に動作することが確認できました。

ruby>>
def reload!
expanded_loaded_features = $LOADED_FEATURES.map do |path|
File.expand_path(path)
end
hash = Hash[expanded_loaded_features.zip($LOADED_FEATURES)]
deletes = []
files.each do |file|
if path = hash[File.expand_path(file)]
$LOADED_FEATURES.delete(path)
end
end
<<--

$LOADED_FEATURESに絶対パスと相対パスが混在していることがあるようで、
その場合にうまく処理できていないようでした。

$LOADED_FEATURESは全て絶対パスで保持するようにしたほうが良い気がします。

posted by genki genki on Fri 22 Apr 2011 at 15:27 with 0 comments

答え

"!=", "!==" を使う

詳細

文字列のHTMLエスケープはRailsやRack::Utilによって
hヘルパメソッドとして提供されており、
ユーザはエスケープ処理を「hの有無」によって調整します。

|caption=例: hamlでのHTMLエスケープ
|
|コード,結果
|
|= link_to(...),<a href=...
|=h link_to(...),&lt;a href=...

自動エスケープモード

上記のようなユーザ駆動のエスケープ処理では100%の安全性を保証できないため、
hamlでは「デフォルトでエスケープする」というオプションが存在します。

ruby>>
Haml::Template.options[:escape_html] = true
<<--

これにより常時エスケープされるようになるのですが、
今度はh の逆とも言うべき「エスケープしない」方法が必要になります。
これがずっとわからなくて困っていたのですが、
「ドキュメントを見る」という手段を思い出して解決しました。
"!=" を使えばよいようです。

|caption=例: escape_html: true
|
|コード,結果
|
|!= link_to(...),<a href=...
|= link_to(...),&lt;a href=...
|=h link_to(...),&amp;lt;a href=...

posted by maiha maiha on Mon 8 Feb 2010 at 07:55 with 2 comments