dm-is-slug icon indicating copy to clipboard operation
dm-is-slug copied to clipboard

makes permalinks easy for datamapper objects

{Gem Version}[http://badge.fury.io/rb/dm-is-slug] {Dependency Status}[https://gemnasium.com/aq1018/dm-is-slug] {}[https://travis-ci.org/aq1018/dm-is-slug] {}[https://codeclimate.com/github/aq1018/dm-is-slug] {Coverage Status}[https://coveralls.io/r/aq1018/dm-is-slug?branch=master]

= 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