Is Rails 3.1 Edge a violation of XmlMarkup :: Builder?

There are several examples on the Internet (e.g. http://techoctave.com/c7/posts/32-create-an-rss-feed-in-rails ) that show how to create a good RSS feed using Builder. The canonical template looks something like this:

xml.instruct! :xml, :version => "1.0" xml.rss :version => "2.0" do xml.channel do xml.title "Your Blog Title" xml.description "A blog about software and chocolate" xml.link posts_url for post in @posts xml.item do xml.title post.title xml.description post.content xml.pubDate post.posted_at.to_s(:rfc822) xml.link post_url(post) xml.guid post_url(post) end end end 

This works fine in Rails 3.0.7. In Rails 3.1 Edge, every command seems to produce ...

 Rendered home/index.rss.builder (25.2ms) Completed 500 Internal Server Error in 875ms ActionView::Template::Error (wrong number of arguments (1 for 0)): 1: xml.instruct!(:xml, :encoding => "UTF-8") 2: 3: xml.rss :version => "2.0" do 4: xml.channel do app/views/home/index.rss.builder:1:in `_app_views_home_index_rss_builder___2123990471_2215695900' app/controllers/home_controller.rb:17:in `index' app/controllers/home_controller.rb:11:in `index' 
+6
source share
2 answers

Rails 3.1.0.rc1 also broke for me with this error, but only when using Ruby 1.8.7 - is it a problem with .instruct!

As a workaround, you can monkeypatch xchar.rb with the following (as suggested by the author of this post http://lists.alioth.debian.org/pipermail/pkg-ruby-extras-maintainers/2010-June/005411.html ):

 --- /home/prahal/xmlbase.rb.orig 2010-06-03 11:18:38.000000000 +0200 +++ /home/prahal/xmlbase.rb.new 2010-06-03 11:18:53.000000000 +0200 @@ -131,7 +131,11 @@ end else def _escape(text) - text.to_xs((@encoding != 'utf-8' or $KCODE != 'UTF8')) + begin + text.to_xs((@encoding != 'utf-8' or $KCODE != 'UTF8')) + rescue + text.to_xs() + end end end 
+6
source

You will also get this error if you have both Builder 3.0 and fast_xs 0.8.0 installed (note that hpricot also binds fast_xs 0.8.0)

You can get around this with the following monkey patch in application.rb :

 class String alias_method :orig_fast_xs, :fast_xs def fast_xs(ignore) orig_fast_xs end end 
+3
source

Source: https://habr.com/ru/post/887752/


All Articles