Need help with metamagic?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

lassebunk
417 Stars 34 Forks MIT License 126 Commits 7 Opened issues

Description

Simple Ruby on Rails plugin for creating meta tags.

Services available

!
?

Need anything else?

Contributors list

No Data

Build Status

Meta Magic Motherfuckers

Metamagic

Metamagic is a simple Ruby on Rails plugin for creating meta tags. It supports regular meta tags, OpenGraph (Facebook), Twitter Cards, and custom tags.

See the changelog for changes in version 3.0.

Installation

In your Gemfile:

gem 'metamagic'

Then run

bundle install
.

Examples

Basic usage

At the top of your view, e.g. app/views/posts/show.html.erb:


And in app/views/layouts/application.html.erb:

...

This will generate the following:

  My Title
  
  
  ...

Using templates

Templates can be used to insert meta values from your views into your layouts. This is usable for example if you want to add something to your title on all pages, or have some default keywords added to all pages. Templates work with all tag types, including OpenGraph, Twitter, and others.

See below for examples on using templates.

Title templates

Title templates can be used to automatically insert the name of your site into the meta title.

In your template:


In your layout:


This will render the following:

  My Title — My Site
  ...

The default separator is

-
.

If you hadn't set the title in your view, it would just display the site name.

You can also use a proc to enable custom processing:

 { title.include?(site) ? title : "#{title} — #{site}" }
%>

This will insert the site name only if it is not already present in the title.

You could also do this with a view helper. I use this in one of my websites:

module ApplicationHelper
  def meta_title_for(title, site)
    return site if title.blank?
    title.include?(site) ? title : "#{title} — #{site}"
  end
end

The proc is still needed in the layout to ensure the right context for the template:

 { meta_title_for(title, site) }
%>

Keywords template

Keyword templates can be used to add some default keywords to all pages on your site.

In your template:


In your layout:


This will render the following:

  
  ...

Adding templates for other tag types

Templates are supported on all tag types. You can access the values set in the view by replacing colons (

:
) in your meta keys with underscores (
_
), so for example
og:image
can be accessed with
og_image
.

Shortcut helpers

For easy setting of meta tags, you can use the shortcut helpers like this:


This will generate the following:

  My Title
  
  
  ...

Shortcut helpers return the value you send to them, so you can dry up your code by setting the title once in e.g. a

tag, like this:

This is the same as setting the title at the top of your view.

Note: Shortcut helpers will never override methods already present in the view context, so for example if you have a method named

title
, this will not be overridden.

Specifying default meta tag values

It's possible to specify default values to be shown if a view doesn't specify its own values. In your app/views/layouts/application.html.erb:

...

These values are then inserted if a view doesn't set others.

Custom meta tags

For custom meta tags, you can use it like this:


This will generate the following:

  ...
  
  ...

Adding relation links

You can add

 tags like this:

Or using the

rel
shortcut helper:

This will generate the following:

  ...
  
  
  ...

Custom properties

OpenGraph (Facebook)


This will generate the following:

  ...
  
  ...

The above can also be written with the shortcut helper:


Twitter Cards


This will generate the following:

  ...
  
  
  ...

The above can also be written with the shortcut helper:


Other custom properties

You can add custom properties like this:


This will generate the following:

  ...
  
  
  
  
  ...

The above could also be written with the

property
shortcut helper:

Custom tags

You can add custom rendering for tag prefixes you specify.

In config/initializers/metamagic.rb:

Metamagic::Renderer.register_tag_type :custom, ->(key, value) { tag(:custom_tag, first: key, second: value) }

In your view:


This will render the following:

My Title


When you register a new tag type, a shortcut helper is automatically defined. The above could therefore also be written as:


Requirements

  • Rails 3.0 or above
  • Ruby 1.9 or above

Contributing

  1. Fork the project
  2. Create your feature branch (
    git checkout -b my-new-feature
    )
  3. Make your changes, including tests, and make sure the tests pass (run
    rake
    )
  4. Commit your changes (
    git commit -am 'Add new feature'
    )
  5. Push to the branch (
    git push origin my-new-feature
    )
  6. Create new pull request

Contributors

Copyright (c) 2010-2014 Lasse Bunk, released under the MIT license

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.