Skip to content

Instantly share code, notes, and snippets.

@tlux
Last active December 19, 2015 15:18
Show Gist options
  • Select an option

  • Save tlux/5974944 to your computer and use it in GitHub Desktop.

Select an option

Save tlux/5974944 to your computer and use it in GitHub Desktop.
Presenter
class HamlPresenter < Presenter
include Haml::Helpers
def initialize(locals = {})
super
init_haml_helpers
end
end
class Presenter
attr_accessor :object, :template
def initialize(object, template)
@object = object
@template = template
end
def self.presents(name)
define_method name do
@object
end
end
def inspect
"#<#{self.class.name} #{locals.map { |key, value| "#{key}: #{value}" }}>"
end
def method_missing(method_name, *args, &block)
if template and template.respond_to?(method_name)
template.send(method_name, *args, &block)
else
super
end
end
def respond_to_missing?(method_name, include_private = false)
(template and template.respond_to?(method_name)) or super
end
end
module PresenterHelper
def present(object, klass = nil)
klass ||= "#{object.class}Presenter".constantize
presenter = klass.new(object, self)
if block_given?
yield presenter
presenter
else
presenter.render
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment