Skip to content

Instantly share code, notes, and snippets.

@dissolved
Created October 22, 2013 20:05
Show Gist options
  • Save dissolved/7107197 to your computer and use it in GitHub Desktop.
Save dissolved/7107197 to your computer and use it in GitHub Desktop.
Wrapping a collection of objects in a Presenter more transparently. Expanding on ideas distributed by Jim Gay (http://clean-ruby.com/).
<ul>
<% agenda.sessions.each do |session| %>
<li>
<h3><%= session.title %></h3>
<p><%= session.other_view_method %></p>
</li>
<% end %>
</ul>
class ResultsPresenter < ::Presenter
def sessions
Enumerator.new do |yielder|
presenter = AgendaBuilder::SessionPresenter.new(nil, view)
results.sessions.each do |session|
presenter.session = session
yielder << presenter
end
end
end
end
<ul>
<% agenda.each_session do |session| %>
<li>
<h3><%= session.title %></h3>
<p><%= session.other_view_method %></p>
</li>
<% end %>
</ul>
class ResultsPresenter < ::Presenter
def each_session(&block)
presenter = AgendaBuilder::SessionPresenter.new(nil, view)
sessions.each do |session|
presenter.session = session
block.call(presenter)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment