Mustdown Build Status Code Climate Coverage Status

Mustdown provides helpers to ease the use of markdown, mustache and both of them.

Installation

Add the gem to your Gemfile :

gem 'mustdown'

Then call bundle install to install it for your application.

Usage in Rails

markdown

This will render the given text through Markdown.

<%= markdown "# Hello World" %>

Output:

<h1>Hello World</h1>

mustache

The mustache helper renders a mustache template with the given binding object.

<%= mustache "Hello {{name}}", name: 'John' %>

Output:

Hello John

mustdown

This helper is more complex since it provides the two previous helpers in one.

<%= mustdown "# {{title}}", title: 'Hello World' %>

Output:

<h1>Hello World</h1>

Usage outside of Rails

If you're not using Rails, it's possible to use the Mustdown module directly.

markdown

This will render the given text through Markdown.

Mustdown.markdown("# Hello World")
# => "<h1>Hello World</h1>"

mustache

The mustache method renders a mustache template with the given binding object.

Mustdown.mustache("Hello {{name}}", name: 'John')
# => "Hello John"

mustdown

This method is more complex since it provides the two previous methods in one.

Mustdown.mustdown("# {{title}}", title: 'Hello World')
# => "<h1>Hello World</h1>"

Mustdown configuration

You can generate a default initializer by calling:

bundle exec rails generate mustdown:install

The markdown configuration is provided by Redcarpet. All Redcarpet options are available.

Overriding the configuration from the view

The markdown and mustdown helpers accept additional parameters for markdown configuration. The settings you pass are merged with the default ones and take precedence.

<%= markdown "**Hello World**", { autolink: false }, { hard_wrap: true} %>

Using with I18n

A very useful technique is to use templates from I18n.

Let's take an example. Given the following models in your app:

Company(name) -> Project(title,url)

Define the following in config/locales/en.yml:

en:
  companies:
    show:
      text: |
        # {{name}}

        {{name}} is a great company ! Here are some of their projects:

        {{#projects}}
        * [{{title}}]({{url}})
        {{/projects}}

Now we can use it in our show template (located in app/views/companies/show.html.erb):

<%= mustdown t('.text'), @company %>

Output:

<h1>Github</h1>

<p>Github is a great company ! Here are some of their projects:</p>

<ul>
  <li><a href="https://github.com/github/hubot">Hubot</a></li>
  <li><a href="https://github.com/github/gollum">Gollum</a></li>
</ul>

Usage as a helper

ActionMailer

It is possible to use Mustdown when composing your emails but to do so you need to reference it as a helper

class MyAwesomeMailer < ActionMailer::Base
  helper :'mustdown/mustdown'

  # ...
end

Cells

If you try to use Mustdown with Cells, you need to add it as a helper like this:

class HomeListingsCell < Cell::Rails
  helper :'mustdown/mustdown'

  # ...
end