has_unique_slug 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +28 -7
- data/lib/has_unique_slug/version.rb +1 -1
- data/lib/has_unique_slug.rb +1 -1
- metadata +3 -3
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
#
|
1
|
+
# Has Unique Slug
|
2
2
|
Generates a unique slug for use as a drop-in replacement for ids Ruby on Rails Active Record
|
3
3
|
|
4
4
|
## Install
|
5
5
|
|
6
|
-
Add `gem has_unique_slug` to your Gemfile and run `bundle install` to get it installed.
|
6
|
+
Add `gem 'has_unique_slug'` to your Gemfile and run `bundle install` to get it installed.
|
7
|
+
|
8
|
+
Tested and working on Rails 3.1.x
|
7
9
|
|
8
10
|
## Usage
|
9
11
|
|
@@ -14,18 +16,22 @@ Assume you have a Post model that has a title and slug column, you can use the f
|
|
14
16
|
end
|
15
17
|
|
16
18
|
|
17
|
-
A unique slug will be generated automatically on creation.
|
18
|
-
If the generated slug is not unique, a number is added onto the end to
|
19
|
-
|
20
|
-
|
19
|
+
A unique slug will be generated automatically on creation by calling parameterize on title.
|
20
|
+
If the generated slug is not unique, a number is added onto the end to ensure uniqueness. The series starts at 2 and increments up by one until a unique slug is found.
|
21
|
+
If a slug is already specified, this slug will be used however the above rules still apply for incrementing the slug until a unique one is found.
|
22
|
+
Ex. Post 1 has title "Sample Post" which would then generate slug "sample-post"
|
23
|
+
Post 2 has also has title "Sample Post" which then would generate slug "sample-post-2"
|
21
24
|
|
22
25
|
You can specify which column to use to generate the slug and which column to use to store the slug. Below is the default:
|
23
26
|
|
24
27
|
class Post < ActiveRecord::Base
|
28
|
+
# the column slug will store the slug, title.parameterize will be called to build the slug
|
25
29
|
has_unique_slug :slug, :title
|
26
30
|
end
|
27
31
|
|
28
|
-
|
32
|
+
The entire argument list is `has_unique_slug(slug_column, title_column, options, &block)` however there are no options you can pass in at this time.
|
33
|
+
|
34
|
+
If only 1 argument is given, use that column to store the slug:
|
29
35
|
|
30
36
|
class Post < ActiveRecord::Base
|
31
37
|
has_unique_slug :permalink # Uses the permalink column to store the slug
|
@@ -38,6 +44,21 @@ Optionally, a block can be provided to generate the slug:
|
|
38
44
|
end
|
39
45
|
Note the space: parameterize will be called on the result of the block to ensure the slug is url friendly.
|
40
46
|
|
47
|
+
You do not have to modify your controller to get this to work:
|
48
|
+
|
49
|
+
class PostsController < ApplicationController
|
50
|
+
|
51
|
+
# ...
|
52
|
+
|
53
|
+
def show
|
54
|
+
@post = Post.find params[:id]
|
55
|
+
# you may still use find_by_id to find a record by the database id if need be
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
Then you may use all your standard url helpers as normal.
|
60
|
+
Ex. If a `post` has a title "Sample Post" and a slug "sample-post", the helper `post_path(post)` will create /posts/sample-post
|
61
|
+
|
41
62
|
## TODO:
|
42
63
|
|
43
64
|
- Would like to write some tests.
|
data/lib/has_unique_slug.rb
CHANGED
@@ -25,7 +25,7 @@ module HasUniqueSlug
|
|
25
25
|
before_save do |record|
|
26
26
|
|
27
27
|
# Add a slug if slug doesn't exist
|
28
|
-
slug_prefix = record[slug_column].blank? ? build_slug(record, subject_column, &block) : record[slug_column]
|
28
|
+
slug_prefix = record[slug_column].blank? ? build_slug(record, subject_column, &block) : record[slug_column].parameterize
|
29
29
|
|
30
30
|
# Ensure the current slug is unique in the database, if not, make it unqiue
|
31
31
|
test_slug, i = slug_prefix, 1
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_unique_slug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brendan Stennett
|