「method_missing」を使用してタグをフォーマットしようとしています。必要な結果を以下に示します。
<foo>\n
<bar>\n
<ab/>\n
</bar>\n
</foo>\n
実行中のインデックスが必要だと思いますが、どこに配置するのが最適か、それが最善のアプローチかどうかは不明です。インデントを追加するにはどうすればよいですか?
def method_missing(meth, *args, &block)
if args.length > 0
my_other_method(args)
else
my_method(meth.to_s, &block)
end
end
def my_other_method(args)
"<#{args}/>"
end
def my_method(meth)
s = "<#{meth}>\n"
s << "#{_indentation}"
s << yield.to_s << "\n"
s << "#{_indentation}"
s << "</#{meth}>\n"
end
def _indentation
("--" * _level.to_i) # dashes added to more easily infer spacing
end
def _level
caller.rindex {|val| val.scan('my_method')} / 3
end
p foo{bar{baz(:a => "b"){}}}
私はこの間違った出力を取得します(余分な \n の原因は不明です)
<foo>\n
--<bar>\n
----<ab>\n
----</bar>\n
\n
--</foo>\n