acts_as_permalink 0.3.1 → 0.3.2
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.
- data/lib/acts_as_permalink.rb +10 -10
- data/lib/acts_as_permalink/version.rb +1 -1
- metadata +16 -16
data/lib/acts_as_permalink.rb
CHANGED
@@ -9,15 +9,15 @@ module Acts #:nodoc:
|
|
9
9
|
module ClassMethods
|
10
10
|
def acts_as_permalink(options={})
|
11
11
|
# Read and scrub option for the column which will save the permalink
|
12
|
-
@permalink_column_name
|
12
|
+
self.base_class.instance_variable_set('@permalink_column_name', options[:to].try(:to_sym) || :permalink)
|
13
13
|
|
14
14
|
# Read and scrub the option for the column or function which will generate the permalink
|
15
|
-
@permalink_source
|
15
|
+
self.base_class.instance_variable_set('@permalink_source', (options[:from].try(:to_sym) || :title))
|
16
16
|
|
17
17
|
# Read and validate the maximum length of the permalink
|
18
18
|
max_length = options[:max_length].to_i rescue 0
|
19
19
|
max_length = 60 unless max_length && max_length > 0
|
20
|
-
@permalink_length
|
20
|
+
self.base_class.instance_variable_set('@permalink_length', max_length)
|
21
21
|
|
22
22
|
if Rails.version >= "3"
|
23
23
|
before_validation :update_permalink, :on => :create
|
@@ -36,26 +36,26 @@ module Acts #:nodoc:
|
|
36
36
|
def generate_permalink_for(obj)
|
37
37
|
|
38
38
|
# Find the source for the permalink
|
39
|
-
text = obj.send(obj.class.instance_variable_get('@permalink_source'))
|
39
|
+
text = obj.send(obj.class.base_class.instance_variable_get('@permalink_source'))
|
40
40
|
|
41
41
|
# If it is blank then generate a random link
|
42
42
|
if text.blank?
|
43
|
-
text = obj.class.to_s.downcase + rand(10000).to_s
|
43
|
+
text = obj.class.base_class.to_s.downcase + rand(10000).to_s
|
44
44
|
|
45
45
|
# If it is not blank, scrub
|
46
46
|
else
|
47
47
|
text = text.downcase.strip # make the string lowercase and scrub white space on either side
|
48
48
|
text = text.gsub(/[^a-z0-9\w]/, "_") # make any character that is not nupermic or alphabetic into an underscore
|
49
49
|
text = text.sub(/_+$/, "").sub(/^_+/, "") # remove underscores on either end, caused by non-simplified characters
|
50
|
-
text = text[0...obj.class.instance_variable_get('@permalink_length')] # trim to length
|
50
|
+
text = text[0...obj.class.base_class.instance_variable_get('@permalink_length')] # trim to length
|
51
51
|
end
|
52
52
|
|
53
53
|
# Attempt to find the object by the permalink
|
54
|
-
if obj.class.base_class.send("find_by_#{obj.class.instance_variable_get('@permalink_column_name')}", text)
|
54
|
+
if obj.class.base_class.send("find_by_#{obj.class.base_class.instance_variable_get('@permalink_column_name')}", text)
|
55
55
|
num = 1
|
56
56
|
|
57
57
|
# If we find the object we know there is a collision, so just add a number to the end until there is no collision
|
58
|
-
while obj.class.base_class.send("find_by_#{obj.class.instance_variable_get('@permalink_column_name')}", text + num.to_s)
|
58
|
+
while obj.class.base_class.send("find_by_#{obj.class.base_class.instance_variable_get('@permalink_column_name')}", text + num.to_s)
|
59
59
|
num += 1
|
60
60
|
end
|
61
61
|
|
@@ -72,12 +72,12 @@ module Acts #:nodoc:
|
|
72
72
|
|
73
73
|
# Override this method so that find searches by permalink and not by id
|
74
74
|
def to_param
|
75
|
-
self.send(self.class.instance_variable_get('@permalink_column_name'))
|
75
|
+
self.send(self.class.base_class.instance_variable_get('@permalink_column_name'))
|
76
76
|
end
|
77
77
|
|
78
78
|
# Generate the permalink and assign it directly via callback
|
79
79
|
def update_permalink
|
80
|
-
self.send("#{self.class.instance_variable_get('@permalink_column_name')}=", self.class.generate_permalink_for(self))
|
80
|
+
self.send("#{self.class.base_class.instance_variable_get('@permalink_column_name')}=", self.class.base_class.generate_permalink_for(self))
|
81
81
|
true
|
82
82
|
end
|
83
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_permalink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &77716780 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *77716780
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &77716190 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *77716190
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &77715150 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *77715150
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &77714480 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *77714480
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sqlite3
|
60
|
-
requirement: &
|
60
|
+
requirement: &77713840 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *77713840
|
69
69
|
description: Manages permalink columns in active record models. Strips special charactes
|
70
70
|
and spaces, creates before validation, assures uniqueness. That kind of thing.
|
71
71
|
email:
|
@@ -74,8 +74,8 @@ executables: []
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- lib/acts_as_permalink/version.rb
|
78
77
|
- lib/acts_as_permalink.rb
|
78
|
+
- lib/acts_as_permalink/version.rb
|
79
79
|
- MIT-LICENSE
|
80
80
|
- Rakefile
|
81
81
|
- README.markdown
|
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
93
|
version: '0'
|
94
94
|
segments:
|
95
95
|
- 0
|
96
|
-
hash: -
|
96
|
+
hash: -562493517
|
97
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
99
99
|
requirements:
|
@@ -102,10 +102,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
version: '0'
|
103
103
|
segments:
|
104
104
|
- 0
|
105
|
-
hash: -
|
105
|
+
hash: -562493517
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.8.
|
108
|
+
rubygems_version: 1.8.15
|
109
109
|
signing_key:
|
110
110
|
specification_version: 3
|
111
111
|
summary: Automatically manage permalink fields for ActiveRecord models in Rails.
|