Spec-Zone.ru › Ruby on Rails 6.0

класс ActionView::Template

Родитель:
Объект

Action View Шаблон

Атрибуты

format[Ч]
handler[Ч]
identifier[Ч]
locals[Ч]
original_encoding[Ч]
updated_at[Ч]
variable[Ч]
variant[Ч]
virtual_path[Ч]

Публичные методы класса

finalize_compiled_template_methods() Показать исходный код
# File actionview/lib/action_view/template.rb, line 14
def self.finalize_compiled_template_methods
  ActiveSupport::Deprecation.warn "ActionView::Template.finalize_compiled_template_methods is deprecated and has no effect"
end
finalize_compiled_template_methods=(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 18
def self.finalize_compiled_template_methods=(_)
  ActiveSupport::Deprecation.warn "ActionView::Template.finalize_compiled_template_methods= is deprecated and has no effect"
end
new(source, identifier, handler, format: nil, variant: nil, locals: nil, virtual_path: nil, updated_at: nil) Показать исходный код
# File actionview/lib/action_view/template.rb, line 130
def initialize(source, identifier, handler, format: nil, variant: nil, locals: nil, virtual_path: nil, updated_at: nil)
  unless locals
    ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a locals parameter"
    locals = []
  end

  @source            = source
  @identifier        = identifier
  @handler           = handler
  @compiled          = false
  @locals            = locals
  @virtual_path      = virtual_path

  @variable = if @virtual_path
    base = @virtual_path[-1] == "/" ? "" : ::File.basename(@virtual_path)
    base =~ /\A_?(.*?)(?:\.\w+)*\z/
    $1.to_sym
  end

  if updated_at
    ActiveSupport::Deprecation.warn "ActionView::Template#updated_at is deprecated"
    @updated_at        = updated_at
  else
    @updated_at        = Time.now
  end
  @format            = format
  @variant           = variant
  @compile_mutex     = Mutex.new
end

Публичные методы экземпляра

encode!() Показать исходный код
# File actionview/lib/action_view/template.rb, line 217
def encode!
  source = self.source

  return source unless source.encoding == Encoding::BINARY

  # Look for # encoding: *. If we find one, we'll encode the
  # String in that encoding, otherwise, we'll use the
  # default external encoding.
  if source.sub!(/\A#{ENCODING_FLAG}/, "")
    encoding = magic_encoding = $1
  else
    encoding = Encoding.default_external
  end

  # Tag the source with the default external encoding
  # or the encoding specified in the file
  source.force_encoding(encoding)

  # If the user didn't specify an encoding, and the handler
  # handles encodings, we simply pass the String as is to
  # the handler (with the default_external tag)
  if !magic_encoding && @handler.respond_to?(:handles_encoding?) && @handler.handles_encoding?
    source
  # Otherwise, if the String is valid in the encoding,
  # encode immediately to default_internal. This means
  # that if a handler doesn't handle encodings, it will
  # always get Strings in the default_internal
  elsif source.valid_encoding?
    source.encode!
  # Otherwise, since the String is invalid in the encoding
  # specified, raise an exception
  else
    raise WrongEncodingError.new(source, encoding)
  end
end

Этот метод отвечает за правильную установку кодировки источника. До этого момента мы предполагаем, что источник — это данные в формате BINARY. Если нет дополнительной информации, мы предполагаем, что кодировка совпадает с Encoding.default_external.

Пользователь также может указать кодировку через комментарий в первой строке шаблона (# encoding: ИМЯ-КОДИРОВКИ). Это будет работать с любым движком шаблонов, так как мы обрабатываем комментарий кодировки перед передачей источника движку шаблонов, оставляя на его месте пустую строку.

formats() Показать исходный код
# File actionview/lib/action_view/template.rb, line 165
def formats; Array(format); end
formats=(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 164
def formats=(_); end
inspect() Показать исходный код
# File actionview/lib/action_view/template.rb, line 199
def inspect
  "#<#{self.class.name} #{short_identifier} locals=#{@locals.inspect}>"
end
local_assigns() Показать исходный код
# File actionview/lib/action_view/template.rb, line 114
eager_autoload do
  autoload :Error
  autoload :RawFile
  autoload :Handlers
  autoload :HTML
  autoload :Inline
  autoload :Sources
  autoload :Text
  autoload :Types
end

Возвращает хеш с определенными локальными переменными.

Предположим, такой рендеринг вложенного шаблона:

<%= render "shared/header", { headline: "Welcome", person: person } %>

Вы можете использовать local_assigns во вложенных шаблонах для доступа к локальным переменным:

local_assigns[:headline] # => "Welcome"
locals=(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 163
def locals=(_); end
refresh(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 168
def refresh(_); self; end
render(view, locals, buffer = ActionView::OutputBuffer.new, &block) Показать исходный код
# File actionview/lib/action_view/template.rb, line 182
def render(view, locals, buffer = ActionView::OutputBuffer.new, &block)
  instrument_render_template do
    compile!(view)
    view._run(method_name, self, locals, buffer, &block)
  end
rescue => e
  handle_render_error(view, e)
end

Отобразить шаблон. Если шаблон еще не был скомпилирован, это делается непосредственно перед рендерингом.

Этот метод проинструментирован как «!render_template.action_view». Заметьте, что мы используем восклицательный знак в этом инструментировании, потому что вы не хотите использовать его в производстве. Он медленный только если за ним наблюдают.

short_identifier() Показать исходный код
# File actionview/lib/action_view/template.rb, line 195
def short_identifier
  @short_identifier ||= defined?(Rails.root) ? identifier.sub("#{Rails.root}/", "") : identifier
end
source() Показать исходный код
# File actionview/lib/action_view/template.rb, line 203
def source
  @source.to_s
end
supports_streaming?() Показать исходный код
# File actionview/lib/action_view/template.rb, line 172
def supports_streaming?
  handler.respond_to?(:supports_streaming?) && handler.supports_streaming?
end

Возвращает, поддерживает ли обработчик потоковую передачу. Если да, при запуске рендеринга может быть передан буфер потоковой передачи.

type() Показать исходный код
# File actionview/lib/action_view/template.rb, line 191
def type
  @type ||= Types[format]
end
variants() Показать исходный код
# File actionview/lib/action_view/template.rb, line 167
def variants; [variant]; end
variants=(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 166
def variants=(_); end
virtual_path=(_) Показать исходный код
# File actionview/lib/action_view/template.rb, line 162
def virtual_path=(_); end

© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API