Let me give you the background. I am using rxml for a lot of my views
for a rails project. I also noticed that there is a lot of the XML
being dynamically generated on data that doesn''t change that often. I
worked on trying to cache the xml fragment that I needed but came to
the quick realization that cache only handle ERB/RHTML files. Needless
to say, I have spent some time creating an XML fragment cache for rxml
files.
A slight problem with it though.
Let me present the code. It is derived directly from the cache and
cache_erb_fragment routines.
<code>module ActionView
module Helpers
module CacheHelper
def cache_xml(xml, name ={}, &block)
@controller.cache_xml_fragment(block, xml, name)
end
end
end
end
module ActionController
module Caching
module Fragments
def cache_xml_fragment(block, xml, name = {}, options = nil)
unless perform_caching then block.call; return end
if cache = read_fragment(name, options)
xml << cache
else
buffer = ''''
xml_builder = Builder::XmlMarkup.new(:target=>buffer)
block.call(xml_builder)
write_fragment(name,buffer, options)
xml << buffer
end
end
end
end
end</code>
To use the cache_xml you pass the current xml object and the
''name'' of
the fragment. This is a simplified example (w/o the dynamic loading of
data) but the problem that occurs still happens.
<code>directors = [''George Lukas'',''Steven
Speilberg'',''Michael Bay'']
xml.instruct!
xml.directors do
directors.each do |name|
cache_xml(xml,:action=>''director'',:name=>name) do
xml.director :name=>name
end
end
end</code>
On the initial load of the RXML file I can indeed see that each cache
fragment is being created with a ''Cached fragment'' line on my
dev
log.
This is the rendering of the initial XML:
<code><directors>
<director name="George Lukas"/>
</directors></code>
This is the expected output
<code><directors>
<director name="George Lukas"/>
<director name="Steven Speilberg"/>
<director name="Michael Bay"/>
</directors></code>
On a second request of the XML, everything renders correctly, but I am
trying to figure out why it doesn''t happen on the initial request.
I believe the problem occurs with the block call within
cache_xml_fragment, but I have no idea what is causing the problem.
If you have any questions please feel free to ask.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---