okay, I saw them. Now what?
More cogently, my associates upgraded to:
ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux]
Now my favorite methods just die, with this irrelevant error:
NoMethodError: missing attribute: `output` in <td id width>
/usr/local/lib/ruby/1.8/rexml/element.rb:684:in `write'
So what's the modern equivalent of REXML::Element.write? Nothing fancy,
just
pretty-print some XML so its legible?
on 16.01.2008 22:45
on 16.01.2008 23:24
Phlip wrote: > > So what's the modern equivalent of REXML::Element.write? Nothing fancy, > just pretty-print some XML so its legible? That's a bug. It will be fixed in the next release of REXML, which hopefully will be folded into subsequent releases of Ruby: http://www.germane-software.com/projects/rexml/ticket/128 Meanwhile try something like the following: require 'rexml/document' foo = REXML::Document.new("<foo/>") bar = REXML::Formatters::Default.new out = String.new bar.write(foo, out) puts out - Sam Ruby
on 17.01.2008 00:26
> Meanwhile try something like the following: Thanks but... > require 'rexml/document' > foo = REXML::Document.new("<foo/>") > bar = REXML::Formatters::Default.new Now my Ruby 1.8.6-111 can't get around this: uninitialized constant REXML::Formatters The source drop just contains: /usr/lib/lib/ruby/1.8/rexml$ ls formatter* default.rb pretty.rb transitive.rb No formatters.rb to anchor them, so I can't just require 'rexml/formatters'. And http://www.google.com/codesearch doesn't show any such thing waiting in the wings...
on 17.01.2008 01:14
Phlip wrote: > uninitialized constant REXML::Formatters > > The source drop just contains: > > /usr/lib/lib/ruby/1.8/rexml$ ls formatter* > default.rb pretty.rb transitive.rb > > No formatters.rb to anchor them, so I can't just require > 'rexml/formatters'. And http://www.google.com/codesearch doesn't show > any such thing waiting in the wings... I guess I'll let Sean take it from here, other than to note that .to_s on an element still works... - Sam Ruby
on 17.01.2008 02:28
> I guess I'll let Sean take it from here, other than to note that .to_s > on an element still works... I understand you only mean that's a workaround - it is indeed already deployed. But the complete rationale is useful here. The goal of indent_xml() is to pretty-print tested XHTML so we can rapidly read it. It could have come from a human (icky formatting), or from some HTML generator (even ickier formatting!). And because HTML is not space-sensitive, the best solution is to format it as beautifully as possible, to help you see its structure and attributes. assert_xpath needs all this in its diagnostics, so you can rapidly see why an XPath was not found.
on 18.01.2008 17:17
On Wednesday 16 January 2008, Phlip wrote: > > I guess I'll let Sean take it from here, other than to note that > > .to_s on an element still works... > > I understand you only mean that's a workaround - it is indeed already > deployed. But the complete rationale is useful here. Your rationale, or mine? write() was deprecated because a large number of tickets were about pretty-printing: how it didn't do what people thought it would do, how it could be improved, and (as much as anything else) how the hell to use it. The API was confusing and was only getting worse with age, and any attempt to make the formatting more "logical" for one person generated any number of complaints by other people. The worst part, for me, was that formatting was adding significant bloat to the code. Ultimately, the right thing to do was to rip it out of the nodal classes and create its own infrastructure. However, write() should still work; it *should* just call a default formatter to do the work. That it doesn't is a bug. As far as the missing Formatters class goes, any problems with REXML in the Ruby repository are my fault; ironically, Ruby moving to Subversion introduced some trouble on my end, as I had to start working with a new tool (svk) which (a) I discovered that I didn't like very much, and (b) my lack of knowledge about inevitably led to usage errors on my part. Consequently, it looks like the Formatters class didn't make it into the Ruby repository. All of this should be fixed, assuming I don't make any more mistakes (don't hold your breath on that) with the next minor revision release this weekend. Sam has been doing a huge amount of work with the repository, and I'm creating a point release just to propegate his fixes. Hopefully, this will resolve your issues, and you should still be able to use to_s() and write(). In case I haven't been clear, for simple, dumb dumping of XML, with no promises about formatting, in the future you should use to_s(). This is the convenience method. If you want control about how the XML is formatted, then use the Formatter API which -- I freely admit -- is poorly (if at all) documented. > The goal of indent_xml() is to pretty-print tested XHTML so we can > rapidly read it. It could have come from a human (icky formatting), One benefit of the new Formatter API is that it is now vastly more easy to write your own formatters. > or from some HTML generator (even ickier formatting!). And because > HTML is not space-sensitive, the best solution is to format it as > beautifully as possible, to help you see its structure and > attributes. > > assert_xpath needs all this in its diagnostics, so you can rapidly > see why an XPath was not found. -- --- SER Confidentiality Notice This e-mail (including any attachments) is intended only for the recipients named above. It may contain confidential or privileged information and should not be read, copied or otherwise used by any other person. If you are not a named recipient, please notify the sender of that fact and delete the e-mail from your system.
on 18.01.2008 17:29
On Friday 18 January 2008, Sean E. Russell wrote: > Confidentiality Notice > This e-mail (including any attachments) is intended only for the > recipients named above. It may contain confidential or privileged > information and should not be read, copied or otherwise used by any > other person. If you are not a named recipient, please notify the > sender of that fact and delete the e-mail from your system. Sorry about that. If I'm not careful about my SMTP host, my company attaches this idiotic and utterly useless crap at the bottom.
on 19.01.2008 20:35
On Wednesday 16 January 2008, Phlip wrote: > The source drop just contains: > > /usr/lib/lib/ruby/1.8/rexml$ ls formatter* > default.rb pretty.rb transitive.rb > > No formatters.rb to anchor them, so I can't just require Formatters is a package, not a class, so you need: > > require 'rexml/document' require 'rexml/formatters/default' > > foo = REXML::Document.new("<foo/>") > > bar = REXML::Formatters::Default.new Sorry I didn't catch this earlier.