Hi David, >I've got some ESI variables in a template, and am trying to assign >their values to Ruby variables. Strangely, it seems to work and not >work at the same time. Why mixing them anyway? > <esi:vars> > <% state = "$(GEO{'region_code'})" %> > <% city = "$(GEO{'city'})" %> > > State: <%= state %><br/> # CT > City: <%= city %><br/> # NEWHAVEN <% # becomes: %> State: $(GEO{'region_code'}) City: $(GEO{'city'}) <% # so the ESI processor replaces them after ERB %> > Massaged city: <%= CITIES[state][city] %> # Uses the literal EIS strings <% # becomes: %> Massaged city: <%= CITIES["$(GEO{'region_code'})"]["$(GEO{'city'})"] # => "KEYING LITERAL ESI STRINGS" %> <% # so the ESI processor replaces ... nothing. %> > </esi:vars> >So, strange as it sounds, the variables seem to be differently bound >depending on which line is being evaluated. So far I've not been able >to puzzle through the sequence of events in such a way as to come up >with a way to inject the state and city values into a call to the >CITIES hash. I'd be interested in any ideas or solutions people might >have. You can: process the template with the ESI proc before it's evaluated by erb or drop erb and define your mapping as ESI variables by writing a script that writes the complete mapping into an esi:include'd file or drop ESI and expose the GEO server variables to erb... or define class ESIlabeth < Struct.new(:name, :words) def initialize(name, *words) super name, words.flatten end def [](word) self.class.new name, words + [ word ] end def to_s ugh = words.map { |word| "[#{ word.inspect }]" }.join %Q'<% #{ name }#{ ugh } %>' end # or implement to_s in a way it resolves the http vars and then # accesses the real CITIES storage. end CITIES = ESIlabeth.new 'CITIES' # puts CITIES["$(GEO{'region_code'})"]["$(GEO{'city'})"] # => CITIES["$(GEO{'region_code'})"]["$(GEO{'city'})"] and parse it again after ESI did its stuff... :) or implement your own ESI processor and embed it into ruby, ... It's a matter of the problems environment. Hope I could help. best Florian -- Florian Aßmann Fork Unstable Media
-- 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@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.