sluggable_riggs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/sluggable_riggs.rb +41 -0
- metadata +49 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 3d071bdfc88abea0c71dd7da32c7757986a786b7
|
|
4
|
+
data.tar.gz: 59325e6bc4f6f599ee7b0135fefb2c9f9841d731
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4c6379e296ff6e9ac1d60eec28e27d9609b4bc7d357202eb0aabf945cf48bd58abfa544c3c63bac949bd3ba95de6908038b755eb9779037a8d647fab566b0907
|
|
7
|
+
data.tar.gz: ef1575e71191b301cba915eab4aada48d3de312d1f12ad2ff75a8800d79c566cade59ef761b73c9924285b8c6a4c29393f0b467ca8c3aee31198d2e3387e16a1
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Sluggable
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
|
|
4
|
+
included do
|
|
5
|
+
before_save :render_unique_slug!
|
|
6
|
+
class_attribute :slugged_column
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def to_slug(string)
|
|
10
|
+
string.downcase.gsub(/[\W_]/, '-').gsub(/-+/, '-')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def append_suffix(slug)
|
|
14
|
+
if slug.include?('_')
|
|
15
|
+
slug = slug.succ
|
|
16
|
+
else
|
|
17
|
+
slug += '_1'
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def render_unique_slug!
|
|
22
|
+
new_slug = to_slug(self.send(self.class.slugged_column.to_sym))
|
|
23
|
+
duplicate = self.class.find_by slug: new_slug
|
|
24
|
+
while duplicate && duplicate != self
|
|
25
|
+
new_slug = append_suffix(new_slug)
|
|
26
|
+
duplicate = self.class.find_by slug: new_slug
|
|
27
|
+
end
|
|
28
|
+
self.slug = new_slug
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def to_param
|
|
32
|
+
self.slug
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module ClassMethods
|
|
36
|
+
def sluggable_column(column_name)
|
|
37
|
+
self.slugged_column = column_name
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sluggable_riggs
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Aaron Riggs
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: 'Note: You need to specify a "slug" column in the db table for your sluggable
|
|
14
|
+
asset, and then use the "slugged_column" class method, provided in this module,
|
|
15
|
+
and pass into it the column_name you would like to slug (e.g. title, username, etc.).
|
|
16
|
+
This gem will, in short, look at the column that you provide, and inject that attribute
|
|
17
|
+
into various instance methods that will be used to build the slug for your sluggable
|
|
18
|
+
asset.'
|
|
19
|
+
email: riggs.aaron@gmail.com
|
|
20
|
+
executables: []
|
|
21
|
+
extensions: []
|
|
22
|
+
extra_rdoc_files: []
|
|
23
|
+
files:
|
|
24
|
+
- lib/sluggable_riggs.rb
|
|
25
|
+
homepage: https://www.google.com
|
|
26
|
+
licenses: []
|
|
27
|
+
metadata: {}
|
|
28
|
+
post_install_message:
|
|
29
|
+
rdoc_options: []
|
|
30
|
+
require_paths:
|
|
31
|
+
- lib
|
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
requirements: []
|
|
43
|
+
rubyforge_project:
|
|
44
|
+
rubygems_version: 2.4.3
|
|
45
|
+
signing_key:
|
|
46
|
+
specification_version: 4
|
|
47
|
+
summary: Add fairly robust slugging for safely IDing web assetts in a URL-friendly
|
|
48
|
+
manner.
|
|
49
|
+
test_files: []
|