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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/sluggable_riggs.rb +41 -0
  3. metadata +49 -0
@@ -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: []