Project

dm-is-slug

0.01
No commit activity in last 3 years
No release in over 3 years
DataMapper plugin that generates unique slugs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.8
~> 0.8.7
~> 1.3

Runtime

 Project Readme

<img src=“https://badge.fury.io/rb/dm-is-slug.png” alt=“Gem Version” /> <img src=“https://gemnasium.com/aq1018/dm-is-slug.png” alt=“Dependency Status” /> <img src=“https://travis-ci.org/aq1018/dm-is-slug.png” /> <img src=“https://codeclimate.com/github/aq1018/dm-is-slug.png” /> <img src=“https://coveralls.io/repos/aq1018/dm-is-slug/badge.png?branch=master” alt=“Coverage Status” />

dm-is-slug¶ ↑

DataMapper plugin for creating and slugs(permalinks).

Installation¶ ↑

> gem install dm-is-slug

Usage¶ ↑

Creating a slug from property¶ ↑

class Post
  include DataMapper::Resource

  property :id, Serial
  property :title, String
  property :content, String

  # here we define that it should have a slug that uses title as the permalink
  # it will generate an extra slug property of String type, with the same size as title
  is :slug, :source => :title
end

Creating a slug from arbitrary methods¶ ↑

class User
  include DataMapper::Resource

  property :id, Serial
  property :email, String
  property :password, String

  # we only want to strip out the domain name
  # and use only the email account name as the permalink
  def slug_for_email
    email.split("@").first
  end

  # here we define that it should have a slug that uses title as the permalink
  # it will generate an extra slug property of String type, with the same size as title
  is :slug, :source => :slug_for_email, :size => 255
end

Scoped slugs¶ ↑

class Post
  include DataMapper::Resource

  property :id, Serial
  property :title, String
  property :content, String
  property :category, String

  # Same as above but slugs will be unique only within their category.
  is :slug, :source => :title, :slug => :category
end

Finding objects by slug¶ ↑

post = Post.first(:slug => "your_slug")

Development¶ ↑

It’s recommended to use bundler in development.

gem install bundler
ADAPTERS='in_memory yaml sqlite postgres mysql' bundle install --without quality

This will install all dependencies so that you could run specs.

bundle exec rake spec ADAPTER=sqlite