# 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