rails 소스 ActionView (계속)

조심 하지 않 아 이곳 을 보 았 다.

module ActionView
  class Base
    include Helpers, Partials, ::ERB::Util

    attr_reader :helpers

    class ProxyModule < Module
      def initialize(receiver)
        @receiver = receiver
      end

      def include(*args)
        super(*args)
        @receiver.extend(*args)
      end
    end

    def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc:
      @assigns = assigns_for_first_render
      @assigns_added = nil
      @controller = controller
      @helpers = ProxyModule.new(self)
      self.view_paths = view_paths

      @_first_render = nil
      @_current_render = nil
    end

  end
end

Base 에 ProxyModule < Module, 그리고 initialize 방법 에서 @ helpers = ProxyModule. new (self) 를 호출 합 니 다. 실제로 모든 Base 의 인 스 턴 스 extend 는 Basem include 의 module 입 니 다.

class CGI < SimpleDelegator
  # escape url encode
  def CGI::escape(str)
    str.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&.unpack("C")[0]) }
  end

  # unescape url encoded
  def CGI::unescape(str)
    str.gsub(/\+/, ' ').gsub(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }
  end

  # escape HTML
  def CGI::escapeHTML(str)
    str.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
  end
end

module ActionView
  module Helpers
    module JavaScriptHelper
      JS_ESCAPE_MAP = {
        '\\'    => '\\\\',
        '</'    => '<\/',
        "\r
" => '
', "
" => '
', "\r" => '
', '"' => '\\"', "'" => "\\'" } # Escape carrier returns and single and double quotes for JavaScript segments. def escape_javascript(javascript) if javascript javascript.gsub(/(\\|<\/|\r
|[
\r"'])/) { JS_ESCAPE_MAP[$1] } else '' end end end end end

좋은 웹페이지 즐겨찾기