
Security News
Follow-up and Clarification on Recent Malicious Ruby Gems Campaign
A clarification on our recent research investigating 60 malicious Ruby gems.
Easily define <meta>
and <link>
tags. I18n support for descriptions,
keywords and titles.
gem install page_meta
Or add the following line to your project's Gemfile:
gem "page_meta"
Your controller and views have an object called page_meta
. You can use it to
define meta tags and links. By default, it will include the encoding, language
and viewport meta tags.
<meta charset="utf-8" />
<meta name="language" content="en" />
<meta itemprop="language" content="en" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
You can use I18n to define titles, descriptions and keywords. These values will
be inferred from the controller and action names. For an action
SiteController#index
you'll need the following translation scope:
en:
page_meta:
title_base: "%{value} • MyApp"
site:
index:
title: "Welcome to MyApp"
Previously, you could also use the page_meta.{titles,description,keywords}
scopes, but this is now deprecated in favor of the above.
---
en:
page_meta:
titles:
base: "%{value} • MyApp"
site:
index: "Welcome to MyApp"
The title without the base
context can be accessed through
page_meta.title.simple
.
<%= page_meta.title %> // Welcome to MyApp • MyApp
<%= page_meta.title.simple %> // Welcome to MyApp
Sometimes you need to render some dynamic value. In this case, you can use the I18n placeholders.
---
en:
page_meta:
title_base: "%{title} • MyCompany"
workshops:
show:
title: "%{name}"
You can then set dynamic values using the PageMeta::Base#[]=
.
class WorkshopsController < ApplicationController
def show
@workshop = Workshop.find_by_permalink!(params[:permalink])
page_meta[:name] = @workshop.name
end
end
Some actions are aliased, so you don't have to duplicate the translations:
create
points to new
update
points to edit
destroy
points to remove
The same concept is applied to descriptions and keywords.
---
en:
page_meta:
base_title: "%{value} • MyApp"
site:
show:
title: "Show"
description: MyApp is the best way of doing something.
keywords: "myapp, thing, other thing"
You can define the base url.
page_meta.base "https://example.com/"
To define other meta tags, you have to use PageMeta::Base#tag
like the
following:
class Workshops Controller < ApplicationController
def show
@workshop = Workshop.find_by_permalink(params[:permalink])
page_meta.tag :description, @workshop.description
page_meta.tag :keywords, @workshop.tags
end
end
[!TIP]
The meta tag's content can also be any object that responds to the method
call
. This way you can lazy evaluate the content.
You can define default meta/link tags in a before_action
:
class ApplicationController < ActionController::Base
before_action :set_default_meta
private
def set_default_meta
page_meta.tag :dns_prefetch_control, "http://example.com"
page_meta.tag :robots, "index, follow"
page_meta.tag :copyright, "Example Inc."
end
end
Finally, you can define meta tags for Facebook and Twitter:
# Meta tags for Facebook
page_meta.tag :og, {
image: helpers.asset_url("fb.png"),
image_type: "image/png",
image_width: 800,
image_height: 600,
description: @workshop.description,
title: @workshop.name,
url: workshop_url(@workshop)
}
# Meta tags for Twitter
page_meta.tag :twitter, {
card: "summary_large_image",
title: @workshop.name,
description: @workshop.description,
site: "@howto",
creator: "@fnando",
image: helpers.asset_url(@workshop.cover_image)
}
To define link tags, you have to use PageMeta::Base#link
like the following:
page_meta.link :canonical, href: article_url(article)
page_meta.link :last, href: article_url(articles.last)
page_meta.link :first, href: article_url(articles.first)
The hash can be any of the link tag's attributes. The following example defines the Safari 9 Pinned Tab icon:
page_meta.link :mask_icon, color: "#4078c0", href: helpers.asset_url("mask_icon.svg")
To render all tags, just do something like this:
<!DOCTYPE html>
<html lang="en">
<head>
<%= page_meta %>
</head>
<body>
<%= yield %>
</body>
</html>
You may want to render title and description on your page. In this case, you may use something like this:
<h1><%= page_meta.title.simple %></h1>
<p><%= page_meta.description.simple %></p>
If your description contains HTML, you can use
page_meta.description(html: true).simple
instead. It will use Rails'
html_safe
helpers to safely retrieve the translation, just like regular Rails
would do.
Please read Rails docs
for more info.
You can use PageMeta::Base#delete
to remove meta tags. All matching tags will
be removed.
page_meta.delete(:description)
For more details about how to contribute, please read https://github.com/fnando/page_meta/blob/main/CONTRIBUTING.md.
The gem is available as open source under the terms of the MIT License. A copy of the license can be found at https://github.com/fnando/page_meta/blob/main/LICENSE.md.
Everyone interacting in the page_meta project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
FAQs
Unknown package
We found that page_meta demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.
Security News
ESLint now supports parallel linting with a new --concurrency flag, delivering major speed gains and closing a 10-year-old feature request.
Research
/Security News
A malicious Go module posing as an SSH brute forcer exfiltrates stolen credentials to a Telegram bot controlled by a Russian-speaking threat actor.