Skip to content

Instantly share code, notes, and snippets.

@sevos
Created October 8, 2011 22:44
Show Gist options
  • Save sevos/1273006 to your computer and use it in GitHub Desktop.
Save sevos/1273006 to your computer and use it in GitHub Desktop.
class ApplicationHelper
def present(object, klass = "#{object.class}Presenter".constantize)
presenter = klass.new(object, self)
yield presenter if block_given?
presenter
end
end
class BasePresenter
def initialize(object, template)
@object = object
@template = template
end
private
def self.inherited(klass)
name = klass.name.match(/(\w+)Presenter/).captures.first.underscore
define_method(name) { @object }
end
def method_missing(*args, &block)
@template.send(*args, &block)
end
end
- if @stock.present?
- present @stock do |stock|
#stock
%h1= t('stock.title', name: stock.name)
%p= t('stock.value', value: stock.value)
= stock.history_chart
class StockPresenter < BasePresenter
delegate :name, :to => :stock
def value
stock.value ? number_to_currency(stock.value) : t('unknown')
end
def history_chart(size = :big)
render 'stocks/history_chart', stock: stock, size: size
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment