Module: Keynote::Inline
- Defined in:
- lib/keynote/inline.rb
Overview
The Inline
mixin lets you write inline templates as comments inside the
body of a presenter method. You can use any template language supported by
Rails.
Basic usage
After extending the Keynote::Inline
module in your presenter class, you
can generate HTML by calling the erb
method and immediately following it
with a block of comments containing your template:
def link
erb
# <%= link_to user_url(current_user) do %>
# <%= image_tag("image1.jpg") %>
# <%= image_tag("image2.jpg") %>
# <% end %>
end
Calling this method renders the ERB template, including passing the calls
to link_to
, user_url
, current_user
, and image_tag
back to the
presenter object (and then to the view).
Passing variables
There are a couple of different ways to pass local variables into an inline
template. The easiest is to pass the binding
object into the template
method, giving access to all local variables:
def local_binding
x = 1
y = 2
erb binding
# <%= x + y %>
end
You can also pass a hash of variable names and values instead:
def local_binding
erb x: 1, y: 2
# <%= x + y %>
end
The inline
method
If you want to use template languages other than ERB, you have to define methods for them by calling the #inline method on a presenter class:
class MyPresenter < Keynote::Presenter
extend Keynote::Inline
presents :user, :account
inline :haml
end
This defines a #haml
instance method on the MyPresenter
class.
If you want to make inline templates available to all of your presenters, you can add an initializer like this to your application:
class Keynote::Presenter
extend Keynote::Inline
inline :haml, :slim
end
This will add #erb
, #haml
, and #slim
instance methods to all of your
presenters.
Class Method Summary collapse
-
.extended(base) ⇒ Object
Extending
Keynote::Inline
automatically creates anerb
method on the base class.
Instance Method Summary collapse
-
#inline(*formats) ⇒ Object
For each template format given as a parameter, add an instance method that can be called to render an inline template in that format.
Class Method Details
.extended(base) ⇒ Object
Extending Keynote::Inline
automatically creates an erb
method on the
base class.
104 105 106 |
# File 'lib/keynote/inline.rb', line 104 def self.extended(base) base.inline :erb end |
Instance Method Details
#inline(*formats) ⇒ Object
For each template format given as a parameter, add an instance method that can be called to render an inline template in that format. Any file extension supported by Rails is a valid parameter.
92 93 94 95 96 97 98 99 100 |
# File 'lib/keynote/inline.rb', line 92 def inline(*formats) require "action_view/context" Array(formats).each do |format| define_method format do |locals = {}| Renderer.new(self, locals, caller(1)[0], format).render end end end |