Why does Ruby Builder::XmlMarkup add inspect tag to xml?
builder, ruby, xml
Solution
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.
Problem
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/> ```