跳至内容 跳至搜索
方法
A
D
N

常量

METHOD_CACHES = Hash.new { |h, k| h[k] = Module.new }
 

类公共方法

new(namespace)

# File activesupport/lib/active_support/code_generator.rb, line 8
def initialize(namespace)
  @cache = METHOD_CACHES[namespace]
  @sources = []
  @methods = {}
  @canonical_methods = {}
end

实例公共方法

apply(owner, path, line)

# File activesupport/lib/active_support/code_generator.rb, line 28
def apply(owner, path, line)
  unless @sources.empty?
    @cache.module_eval("# frozen_string_literal: true\n" + @sources.join(";"), path, line)
  end
  @canonical_methods.clear

  @methods.each do |as, canonical_name|
    owner.define_method(as, @cache.instance_method(canonical_name))
  end
end

define_cached_method(canonical_name, as: nil)

# File activesupport/lib/active_support/code_generator.rb, line 15
def define_cached_method(canonical_name, as: nil)
  canonical_name = canonical_name.to_sym
  as = (as || canonical_name).to_sym

  @methods.fetch(as) do
    unless @cache.method_defined?(canonical_name) || @canonical_methods[canonical_name]
      yield @sources
    end
    @canonical_methods[canonical_name] = true
    @methods[as] = canonical_name
  end
end