Module Kwartz::Defun
In: kwartz/defun.rb

generate compiled code. see defun() method for usage.

Methods

Public Instance methods

[Source]

# File kwartz/defun.rb, line 63
    def build_defun_code(basename, code, lang, properties)
      case lang
      when 'ruby', 'eruby', 'rails', 'erubis', 'pierubis'
        return build_ruby_code(basename, code, properties)
      when 'php'
        return build_php_code(basename, code, properties)
      else
        raise "'#{lang}': not supported language."
      end
    end

[Source]

# File kwartz/defun.rb, line 103
    def build_php_code(basename, php_code, properties)
      basename = basename.gsub(/[^\w]/, '_')
      s = "<?php\nfunction print_view_\#{basename}($context) {\n    explode($context);\n?>\#{php_code}<?php\n}\nfunction expand_view_\#{basename}($context) {\n    ob_start();\n    print_view_\#{basename}($context);\n    $output = ob_get_clean();\n    ob_end_clean();\n    return $output;\n}\n?>\n"
      return s
    end

[Source]

# File kwartz/defun.rb, line 75
    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

[Source]

# File kwartz/defun.rb, line 41
    def compile_into_lang_code(output, lang, properties)
      case lang
      when 'ruby'
        return output
      when 'eruby', 'rails'
        require 'erb'
        trim_mode = properties[:trim_mode] || (lang == 'eruby' ? 1 : '-')
        return ERB.new(output, nil, trim_mode).src
      when 'erubis'
        require 'erubis'
        return Erubis::Eruby.new(nil, properties).convert(output)
      when 'pierubis'
        require 'erubis'
        return Erubis::PI::Eruby.new(nil, properties).convert(output)
      when 'php'
        return output
      else
        raise "'#{lang}': not supported language."
      end
    end

generate compiled code

ex.

  args = %w[-l eruby -p ex.plogic ex.html]
  eruby_src = Kwartz::Main.new(args).execute()
  properties = { :trim_mode=>'>' }
  code = Kwartz::Defun.defun('ex', eruby_src, 'eruby', properties)
  print code

command-line properties:

  --module=name   : module name (default 'View')
  --method=name   : method name (default 'expand_xxx')

[Source]

# File kwartz/defun.rb, line 34
    def defun(basename, output, lang, properties={})
      lang_code = compile_into_lang_code(output, lang, properties)
      s = build_defun_code(basename, lang_code, lang, properties)
      return s
    end

[Validate]