class Presenter::Base

Public Class Methods

map(params) click to toggle source
# File lib/presenter.rb, line 25
def self.map(params)
  params.each { |p| setup_attribute(p) }
end
use(*presenters) click to toggle source
# File lib/presenter.rb, line 29
def self.use(*presenters)
  params = presenters.each_with_object({}) do |id, p|
    p[id] = id
  end

  map params
end

Private Class Methods

def_attribute_reader(attribute, presenter_method) click to toggle source
# File lib/presenter.rb, line 57
def self.def_attribute_reader(attribute, presenter_method)
  define_method(attribute) do
    presenter = send(presenter_method)
    presenter.value = __getobj__.send(attribute)
    presenter.output
  end
end
def_presenter_accessor(presenter, method) click to toggle source
# File lib/presenter.rb, line 48
def self.def_presenter_accessor(presenter, method)
  attr_writer method

  define_method(method) do
    instance_variable_get(:"@#{method}") ||
      self.class.find_presenter(presenter)
  end
end
find_presenter(presenter) click to toggle source
# File lib/presenter.rb, line 65
def self.find_presenter(presenter)
  return presenter.new if presenter.is_a?(Class)

  base_class = presenter.to_s.capitalize.camelize
  Object.const_get("Presenter::#{base_class}").new
end
setup_attribute(params) click to toggle source
# File lib/presenter.rb, line 39
def self.setup_attribute(params)
  attribute, presenter = params
  presenter_name = presenter.is_a?(Class) ? presenter.__name__ : presenter
  method = "#{presenter_name}_presenter"

  def_presenter_accessor(presenter, method)
  def_attribute_reader(attribute, method)
end