Module: Gretel::ViewHelpers

Defined in:
lib/gretel/view_helpers.rb

Instance Method Summary collapse

Instance Method Details

Sets the current breadcrumb to be rendered elsewhere. Put it somewhere in the view, preferably in the top, before you render any breadcrumbs HTML:

<% breadcrumb :category, @category %>

If you pass an instance of an object that responds to model_name (like an ActiveRecord model instance), the breadcrumb can be automatically inferred, so a shortcut for the above would be:

<% breadcrumb @category %>

12
13
14
15
16
17
# File 'lib/gretel/view_helpers.rb', line 12

def breadcrumb(key = nil, *args)
  if key.nil? || key.is_a?(Hash)
    raise ArgumentError, "The `breadcrumb` method was called with #{key.inspect} as the key. This method is used to set the breadcrumb. Maybe you meant to call the `breadcrumbs` method (with an 's' in the end) which is used to render the breadcrumbs?"
  end
  @_gretel_renderer = Gretel::Renderer.new(self, key, *args)
end

Renders the breadcrumbs HTML, for example in your layout. See the readme for default options.

<%= breadcrumbs pretext: "You are here: " %>

If you supply a block, it will yield an array with the breadcrumb links so you can build the breadcrumbs HTML manually:

<% breadcrumbs do |links| %>
  <% if links.any? %>
    You are here:
    <% links.each do |link| %>
      <%= link_to link.text, link.url %> (<%= link.key %>)
    <% end %>
  <% end %>
<% end %>

49
50
51
# File 'lib/gretel/view_helpers.rb', line 49

def breadcrumbs(options = {})
  gretel_renderer.render(options)
end

#parent_breadcrumb(options = {}, &block) ⇒ Object

Returns or yields parent breadcrumb (second-to-last in the trail) if it is present.

<% parent_breadcrumb do |link| %>
  <%= link_to link.text, link.url %> (<%= link.key %>)
<% end %>

58
59
60
61
62
63
64
# File 'lib/gretel/view_helpers.rb', line 58

def parent_breadcrumb(options = {}, &block)
  if block_given?
    gretel_renderer.yield_parent_breadcrumb(options, &block)
  else
    gretel_renderer.parent_breadcrumb(options)
  end
end

#with_breadcrumb(key, *args, &block) ⇒ Object

Yields a block where inside the block you have a different breadcrumb than outside.

<% breadcrumb :about %>

<%= breadcrumbs # shows the :about breadcrumb %>

<% with_breadcrumb :product, Product.first do %>
  <%= breadcrumbs # shows the :product breadcrumb %>
<% end %>

<%= breadcrumbs # shows the :about breadcrumb %>

30
31
32
33
34
35
# File 'lib/gretel/view_helpers.rb', line 30

def with_breadcrumb(key, *args, &block)
  original_renderer = @_gretel_renderer
  @_gretel_renderer = Gretel::Renderer.new(self, key, *args)
  yield
  @_gretel_renderer = original_renderer
end