Sha256: f232001709f689c47ac367d1d8ee38c03c9647e9292057dcef99dc077ebfbceb

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

# class UberPresenter::PresenterFactory
class UberPresenter::Base
  extend Memoist

  # Доступ к объекту контроллера
  attr_reader :controller
  delegate :params, :action_name, :controller_name, to: :controller

  class << self
    # Создаем экземпляр презенера, уникальный для объекта controller
    #
    # @param [Object] controller
    # @param [Object] args Набор аргументов для презентора
    # @return [Object] Экземпляр презентера
    #
    def new(controller, *args)
      storage = storage_from(controller)
      (instance = storage[self.name]).present? ? instance : (storage[self.name] = super(*args)).tap { |inst| inst.instance_variable_set(:@controller, controller) }
    end

    # Получаем хранилище презенторов из контроллера controller
    #
    # @param [Object] controller
    # @return [Hash]
    #
    def storage_from(controller)
      controller.instance_variable_set(:@presenters, {}) unless controller.instance_variable_names.include?('@presenters')
      controller.instance_variable_get(:@presenters)
    end
  end

  # Получаем хранилище презенторов
  #
  # @return [Hash]
  #
  def presenters
    @presenters.present? ? @presenters : self.class.storage_from(controller)
  end

  def inspect
    "#<#{self.class.name}:#{self.object_id} @controller=#<#{controller.class.name}:#{controller.object_id}>>"
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
uber_presenter-0.1.2 lib/uber_presenter/base.rb
uber_presenter-0.1.1 lib/uber_presenter/base.rb
uber_presenter-0.1.0 lib/uber_presenter/base.rb
uber_presenter-0.0.2 lib/uber_presenter/base.rb