superslug 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4bb95a3918571a903c9a509d9c946b210574a044
4
+ data.tar.gz: ab49423eea4705981fe6f92b3313c6101449b417
5
+ SHA512:
6
+ metadata.gz: 42be65db36d8de0dd0f295172faa5c5663ffd37ce4fbd32cd5f210e9792c6992c83a0a1e0515423dcb2dfd6a8644c0f7e01ecfd664e3d98510f8ff7b64fc2a93
7
+ data.tar.gz: ca55bbda8233c591f3367886019d06e85e68e7977596fd8b1da9a0e6cfe90708334f28a34dca92cd76ae93d4c9bd8bde4c3af08bf55f30454ccc7d8b3078e21f
@@ -0,0 +1,4 @@
1
+ require 'superslug/version'
2
+ require 'superslug/superslug'
3
+ module SuperSlug
4
+ end
@@ -0,0 +1,59 @@
1
+ module SuperSlug
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ after_save :sluggify_slug
6
+
7
+ def self.find(input)
8
+ if input.class == Array
9
+ super
10
+ else
11
+ input.to_i.to_s == input.to_s ? super : find_by_slug(input)
12
+ end
13
+ end
14
+ end
15
+
16
+ def sluggify_slug
17
+ if slug.blank?
18
+ update_column(:slug, create_slug)
19
+ else
20
+ new_slug = slug.gsub(/[^a-zA-Z0-9 \-]/, "") # remove all bad characters
21
+ new_slug.gsub!(/\ /, "-") # replace spaces with underscores
22
+ new_slug.gsub!(/\-+/, "-") # replace repeating underscores
23
+ update_column(:slug, new_slug) unless slug == new_slug
24
+ end
25
+ end
26
+
27
+ def create_slug
28
+ slug = self.title.downcase.gsub(/\&/, ' and ') # & -> and
29
+ slug.gsub!(/[^a-zA-Z0-9 \-]/, "") # remove all bad characters
30
+ slug.gsub!(/\ /, "-") # replace spaces with underscores
31
+ slug.gsub!(/\-+/, "-") # replace repeating underscores
32
+
33
+ dups = self.class.name.constantize.where(:slug => slug)
34
+ if dups.count == 1 and dups.first != self
35
+ if self.try(:idx)
36
+ slug = "#{slug}-#{self.idx}"
37
+ else
38
+ slug = "#{slug}-#{self.id}"
39
+ end
40
+ end
41
+ slug
42
+ end
43
+
44
+ def make_slug_unique(slug)
45
+ dups = self.class.name.constantize.where(:slug => slug)
46
+ if dups.count == 1 and dups.first != self
47
+ if self.try(:idx)
48
+ slug = "#{slug}-#{self.idx}"
49
+ else
50
+ slug = "#{slug}-#{self.id}"
51
+ end
52
+ end
53
+ slug
54
+ end
55
+
56
+ def to_param
57
+ slug
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module SuperSlug
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,13 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'superslug/version'
4
+ Gem::Specification.new do |s|
5
+ s.name = 'superslug'
6
+ s.version = SuperSlug::VERSION
7
+ s.summary = "Slugs, yo!"
8
+ s.description = "A simple gem to autocreate slugs"
9
+ s.authors = ['Warren Harrison','Sean Davis']
10
+ s.email = ['warren@hungry-media.com','scdavis41@gmail.com']
11
+ s.files = `git ls-files -z`.split("\x0")
12
+ s.license = 'MIT'
13
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: superslug
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Warren Harrison
8
+ - Sean Davis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-04-02 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A simple gem to autocreate slugs
15
+ email:
16
+ - warren@hungry-media.com
17
+ - scdavis41@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/superslug.rb
23
+ - lib/superslug/superslug.rb
24
+ - lib/superslug/version.rb
25
+ - superslug.gemspec
26
+ homepage:
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.2.0
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Slugs, yo!
50
+ test_files: []