Spec-Zone.ru › Ruby on Rails 4.1

класс AbstractController::Base

Родитель:
Объект
Включенные модули:
ActiveSupport::Configurable

AbstractController::Base — это API низкого уровня. Никто не должен использовать его напрямую, и подклассы (например, ActionController::Base) должны предоставлять собственный метод render, так как отображение означает разные вещи в зависимости от контекста.

Атрибуты

abstract[R]
abstract?[R]

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

abstract!() Показать исходный код

Определить контроллер как абстрактный. Подробнее см. ::internal_methods.

# File actionpack/lib/abstract_controller/base.rb, line 33
def abstract!
  @abstract = true
end
action_methods() Показать исходный код

Список имён методов, которые должны рассматриваться как действия. Это включает все публичные методы экземпляра контроллера, за вычетом внутренних методов (см. internal_methods), а затем добавляются обратно любые внутренние методы, но всё ещё существующие в классе. Наконец, удаляются hidden_actions.

Возвращает

  • Set — набор всех методов, которые следует рассматривать как действия.

# File actionpack/lib/abstract_controller/base.rb, line 77
def action_methods
  @action_methods ||= begin
    # All public instance methods of this class, including ancestors
    methods = (public_instance_methods(true) -
      # Except for public instance methods of Base and its ancestors
      internal_methods +
      # Be sure to include shadowed public instance methods of this class
      public_instance_methods(false)).uniq.map { |x| x.to_s } -
      # And always exclude explicitly hidden actions
      hidden_actions.to_a

    # Clear out AS callback method pollution
    Set.new(methods.reject { |method| method =~ /_one_time_conditions/ })
  end
end
clear_action_methods!() Показать исходный код

Методы ::action_methods кэшируются, и иногда требуется обновить их. clear_action_methods! позволяет сделать это, чтобы в следующий раз, когда вы запустите ::action_methods, они будут пересчитаны.

# File actionpack/lib/abstract_controller/base.rb, line 96
def clear_action_methods!
  @action_methods = nil
end
controller_path() Показать исходный код

Возвращает полное имя контроллера, с нижним подчеркиванием, без окончание Controller. Например, MyApp::MyPostsController вернёт «my_app/my_posts» для controller_path.

Возвращает

  • String

# File actionpack/lib/abstract_controller/base.rb, line 106
def controller_path
  @controller_path ||= name.sub(/Controller$/, '').underscore unless anonymous?
end
hidden_actions() Показать исходный код

Список скрытых действий. По умолчанию пустой массив. Это может быть изменено другими модулями или подклассами для указания конкретных действий как скрытых.

Возвращает

  • Array — массив имён методов, которые не следует рассматривать как действия.

# File actionpack/lib/abstract_controller/base.rb, line 65
def hidden_actions
  []
end
internal_methods() Показать исходный код

Список всех внутренних методов для контроллера. Ищет первый абстрактный суперкласс контроллера и получает список всех публичных методов экземпляра этого абстрактного класса. Публичные методы экземпляра контроллера обычно рассматриваются как методы действия, поэтому методы, объявленные в абстрактных классах, удаляются. (ActionController::Metal и ActionController::Base определены как абстрактные)

# File actionpack/lib/abstract_controller/base.rb, line 52
def internal_methods
  controller = self

  controller = controller.superclass until controller.abstract?
  controller.public_instance_methods(true)
end
method_added(name) Показать исходный код

Обновление кэшированных ::action_methods при добавлении нового метода действия.

Вызывает метод суперкласса
# File actionpack/lib/abstract_controller/base.rb, line 111
def method_added(name)
  super
  clear_action_methods!
end

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

action_methods() Показать исходный код

Делегирует классу' action_methods

# File actionpack/lib/abstract_controller/base.rb, line 145
def action_methods
  self.class.action_methods
end
available_action?(action_name) Показать исходный код

Возвращает true, если метод для действия доступен и может быть обработан, в противном случае false.

Обратите внимание, что action_methods.include?("foo") может возвращать false, а available_action?("foo") возвращает true, потому что этот метод учитывает действия, которые также доступны другими способами, например, неявные отображение.

Параметры

  • action_name — имя действия, которое будет проверено

Возвращает

  • TrueClass, FalseClass

# File actionpack/lib/abstract_controller/base.rb, line 162
def available_action?(action_name)
  _find_action_name(action_name).present?
end
controller_path() Показать исходный код

Делегирует классу' controller_path

# File actionpack/lib/abstract_controller/base.rb, line 140
def controller_path
  self.class.controller_path
end
process(action, *args) Показать исходный код

Вызывает действие, проходя через весь стек диспетчеризации действий.

Фактический метод, который вызывается, определяется с помощью вызова method_for_action. Если ни один метод не может обработать действие, возникает ошибка ActionNotFound.

Возвращает

  • self

# File actionpack/lib/abstract_controller/base.rb, line 127
def process(action, *args)
  @_action_name = action_name = action.to_s

  unless action_name = _find_action_name(action_name)
    raise ActionNotFound, "The action '#{action}' could not be found for #{self.class.name}"
  end

  @_response_body = nil

  process_action(action_name, *args)
end

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

Spec-Zone.ru

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