module ActionPresenter

Constants

VERSION

Public Class Methods

presenter_options() click to toggle source
# File lib/action_presenter/railtie/action_controller.rb, line 9
def presenter_options
  presenter_name = controller_name.gsub(/\W/, "_").underscore
  @presenter_options ||= ActiveSupport::OrderedOptions.new.merge(
    presenter_name: presenter_name,
    presents: presenter_name.singularize,
  )
end

Public Instance Methods

controller_presenter() click to toggle source

controller presenter

# File lib/action_presenter/railtie/action_view.rb, line 21
def controller_presenter
  return @controller_presenter if @controller_presenter
  presenter_name = controller.presenter_options.presenter_name
  @controller_presenter = presenter(presenter_name).tap do |new_presenter|
    # attempt to auto set record
    presents = new_presenter.presenter_options.presents
    new_presenter.record ||= instance_variable_get("@#{new_presenter.presenter_options.presents}")
  end
end
local_presenter() click to toggle source

local presenter

# File lib/action_presenter/railtie/action_view.rb, line 34
def local_presenter
  @local_presenter || raise(ArgumentError, "local presenter [lp] must be provided")
end
local_presenter=(new_local_presenter) click to toggle source
# File lib/action_presenter/railtie/action_view.rb, line 38
def local_presenter=(new_local_presenter)
  @local_presenter = new_local_presenter.tap do |new_presenter|
    # attempt to auto set record
    new_presenter.record ||= instance_variable_get("@#{new_presenter.presenter_options.presents}")
  end
end
presenter(presenter_name, *params, &block) click to toggle source

dynamic presenter initializer

# File lib/action_presenter/railtie/action_view.rb, line 5
def presenter(presenter_name, *params, &block)
  instance_variable = "@#{presenter_name}_presenter"
  presenter_instance = instance_variable_get(instance_variable)
  # return presenter_instance if already initialized
  return presenter_instance if presenter_instance
  # initialize presenter instance
  presenter_class_name = "#{presenter_name.camelize}Presenter"
  presenter_class = ::ActionPresenter::Base::PRESENTER_CLASSES.find do |presenter_class|
    presenter_class.name == presenter_class_name
  end
  raise ArgumentError, "#{presenter_class_name} is not defined" if !presenter_class
  presenter = presenter_class.new.set(view: self)
  instance_variable_set(instance_variable, presenter)
end
presenter_options() click to toggle source
# File lib/action_presenter/railtie/action_controller.rb, line 4
def presenter_options
  @presenter_options ||= self.class.presenter_options.dup
end