# File lib/kwartz/helper/rails.rb, line 131 def render(template, assigns) ## reverse engineering #$stderr.puts "*** debug: render() called." #$stderr.puts "*** debug: RAILS_ENV=#{RAILS_ENV.inspect}" #$stderr.puts "*** debug: self.class=#{self.class}" #$stderr.puts "*** debug: @view.class=#{@view.class}" #$stderr.puts "*** debug: self.__id__=#{self.__id__.inspect}" #$stderr.puts "*** debug: @view.class.methods=#{(@view.class.methods - Class.methods).sort.inspect}" #$stderr.puts "*** debug: @view.controller.class.methods=#{(@view.controller.class.methods - Class.methods).sort.inspect}" # #$stderr.puts "*** debug: instance_variables=#{instance_variables.inspect}" #=> [@views] #c = @view.controller #$stderr.puts "*** debug: @view.controller.instance_variables=#{c.instance_variables.inspect}" #$stderr.puts "*** debug: @view.controller.action_name=#{c.action_name.inspect}" #$stderr.puts "*** debug: @view.controller.render_layout_basename=#{c.render_layout_basename.inspect}" #$stderr.puts "*** debug: @view.controller.render_template_basename=#{c.render_template_basename.inspect}" #require 'pp' #c = @view.controller #$stderr.puts "*** debug: @view.controller.instance_variable_get('@template')=" #PP.pp(c.instance_variable_get('@template'), $stderr) #$stderr.puts "*** debug: @view.controller.methods=" #PP.pp((c.methods - Object.new.methods).sort, $stderr) #$stderr.puts "*** debug: @view.controller.class.methods=" #PP.pp((c.class.methods - Class.methods).sort, $stderr) ## return if @content_for_layout is set template_ = @view.controller.instance_variable_get("@template") content_for_layout_ = template_.instance_variable_get("@content_for_layout") return content_for_layout_ if content_for_layout_ ## template basename and layout basename c = @view.controller template_root = c.template_root # or c.class.template_root #template_basename = "#{template_root}/#{c.controller_name}/#{c.action_name}" #layout_basename = "#{template_root}/layouts/#{c.controller_name}" template_basename = "#{template_root}/#{c.render_template_basename}" layout_basename = "#{template_root}/#{c.render_layout_basename}" ## check timestamps convert_flag = true cache_filename = template_basename + '.cache' if use_cache? && test(?f, cache_filename) filenames = [ template_basename + @@pdata_suffix, template_basename + @@plogic_suffix, layout_basename + @@pdata_suffix, layout_basename + @@plogic_suffix, ] mtime = File.mtime(cache_filename) convert_flag = filenames.any? { |filename| result = test(?f, filename) && File.mtime(filename) > mtime } end ## convert templates into ruby code, or get cached object logger = @view.controller.logger msgstr = "template='#{template_basename}#{@@pdata_suffix}'" if logger logname = "*** #{self.class.name}" if logger if convert_flag logger.info "#{logname}: convert template file: #{msgstr}" if logger ruby_code = convert(template, template_basename, layout_basename) File.open(cache_filename, 'w') { |f| f.write(ruby_code) } # write cache proc_obj = self.class.add_cache(ruby_code, cache_filename) elsif (proc_obj = self.class.get_cache(cache_filename)).nil? logger.info "#{logname}: read cache file: #{msgstr}" if logger ruby_code = File.read(cache_filename) proc_obj = self.class.add_cache(ruby_code, cache_filename) else logger.info "#{logname}: reuse cached proc object: #{msgstr}" if logger end ## use @view as context object @view.__send__(:evaluate_assigns) #or @view.instance_eval("evaluate_assigns()") context = @view ## evaluate ruby code with context object if assigns && !assigns.empty? #return _evaluate_string(ruby_code, context, assigns) return evaluate_proc(proc_obj, context, assigns) else #return context.instance_eval(ruby_code) return context.instance_eval(&proc_obj) end end