I'm trying out Builder::XMLMarkup to build some xml and it keeps adding an empty element to my xml.
Why does it do this and how do I stop it?
xml = Builder::XmlMarkup.new
=> <inspect/>
If you still want to see the output:
xml = Builder::XmlMarkup.new; xml.target!
Builder implements a version of method_missing
that adds tags given by the name of the method call.
Assuming you are playing in irb (or rails' console), irb's default behaviour when you evaluate an expression (such as Builder::XmlMarkup.new
) is to call inspect
on it, in order to generate a string to show to you. In the case of builder, inspect
isn't the usual ruby inspect
method - it falls through to method_missing
and adds the tag.
This will only happen when playing with ruby interactively. You can do stuff like
xml = Builder::XmlMarkup.new; false
Here the result of the expression is false
so irb calls inspect
on that and leaves your builder object alone.
It can be awkward to keep doing this continually. If you do
xml = Builder::XmlMarkup.new; false
def xml.inspect; target!; end
then xml
will still be a builder object that display its content when inspected by irb. You won't be able to create tags called inspect
(other than by using tag!
) but that is usually a minor inconvenience.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With