def build_ruby_code(basename, ruby_code, properties)
basename = basename.gsub(/[^\w]/, '_')
module_name = properties.key?(:module) ? properties[:module] : 'View'
method_verb = properties[:verb] || 'expand'
method_name = properties[:method] || "#{method_verb}_#{basename}"
s = ''
s << "module #{module_name}\n" if module_name
s << "\n"
s << " (@@proc_table ||= {})['#{basename}'] = proc do\n"
s << ruby_code << (!ruby_code.empty? && ruby_code[-1] != ?\n ? "\n" : '')
s << " end#proc\n"
s << "\n"
s << " module_function\n" if module_name
s << " def #{method_name}(context={})\n"
s << " if context.is_a?(Hash)\n"
s << " hash = context\n"
s << " context = Object.new\n"
s << " hash.each { |key, val| context.instance_variable_set(\"@\#{key}\", val) }\n"
s << " end\n"
s << " proc_obj = @@proc_table['#{basename}']\n"
s << " context.instance_eval(&proc_obj)\n"
s << " end\n"
s << "\n"
s << "end\n" if module_name
return s
end