slugged 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -0
- data/lib/slugged/active_record_methods.rb +23 -8
- data/lib/slugged/version.rb +2 -2
- data/slugged.gemspec +4 -2
- data/test/editable_test.rb +51 -0
- metadata +7 -5
data/README.md
CHANGED
@@ -65,6 +65,7 @@ is\_sluggable accepts the source method name as a symbol, and an optional has of
|
|
65
65
|
* _:slug\_column_ - the column in which to store the slug. Defaults to _:cached\_slug_
|
66
66
|
* _:to\_param_ - if true (by default), overrides to_param to use the slug
|
67
67
|
* _:use\_cache_ - uses Slugged.cache if available to cache any lookups e.g. in memcache.
|
68
|
+
* _:editable_ - if true (false is the default), allow the users to edit _cached\_slug_ column.
|
68
69
|
|
69
70
|
Once installed, it provides the following methods:
|
70
71
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Slugged
|
2
2
|
module ActiveRecordMethods
|
3
|
-
AR_CLASS_ATTRIBUTE_NAMES = %w(cached_slug_column slug_source slug_convertor_proc default_uuid_slug use_slug_history sync_slugs slug_scope use_slug_cache use_slug_to_param).map(&:to_sym)
|
3
|
+
AR_CLASS_ATTRIBUTE_NAMES = %w(cached_slug_column slug_source slug_convertor_proc default_uuid_slug use_slug_history sync_slugs slug_scope use_slug_cache use_slug_to_param editable).map(&:to_sym)
|
4
4
|
|
5
5
|
def is_sluggable(source = :name, options = {})
|
6
6
|
options.symbolize_keys!
|
@@ -25,10 +25,9 @@ module Slugged
|
|
25
25
|
cached_value = send cached_slug_column
|
26
26
|
cached_value.present? ? cached_value : id.to_s
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def generate_slug
|
30
|
-
slug_value = send(self.slug_source)
|
31
|
-
slug_value = self.slug_convertor_proc.call(slug_value) if slug_value.present?
|
30
|
+
slug_value = self.class.slug_value_for(send(self.slug_source))
|
32
31
|
if slug_value.present?
|
33
32
|
scope = self.class.other_than(self).slug_scope_relation(self)
|
34
33
|
slug_value = Slugged.next_value(scope, slug_value)
|
@@ -39,6 +38,10 @@ module Slugged
|
|
39
38
|
write_attribute self.cached_slug_column, nil
|
40
39
|
end
|
41
40
|
end
|
41
|
+
|
42
|
+
def convert_cached_slug
|
43
|
+
write_attribute self.cached_slug_column, self.class.slug_value_for(send(self.cached_slug_column))
|
44
|
+
end
|
42
45
|
|
43
46
|
def generate_slug!
|
44
47
|
generate_slug
|
@@ -46,11 +49,19 @@ module Slugged
|
|
46
49
|
end
|
47
50
|
|
48
51
|
def autogenerate_slug
|
49
|
-
|
52
|
+
if should_convert_cached_slug?
|
53
|
+
convert_cached_slug
|
54
|
+
else
|
55
|
+
generate_slug if should_generate_slug?
|
56
|
+
end
|
50
57
|
end
|
51
|
-
|
58
|
+
|
59
|
+
def should_convert_cached_slug?
|
60
|
+
send(:"#{self.cached_slug_column}_changed?") && !send(self.cached_slug_column).blank? && self.editable?
|
61
|
+
end
|
62
|
+
|
52
63
|
def should_generate_slug?
|
53
|
-
send(self.cached_slug_column).blank? || (self.sync_slugs && send(:"#{self.slug_source}_changed?"))
|
64
|
+
send(self.cached_slug_column).blank? || (self.sync_slugs && send(:"#{self.slug_source}_changed?")) && !should_convert_cached_slug?
|
54
65
|
end
|
55
66
|
|
56
67
|
def has_better_slug?
|
@@ -77,6 +88,10 @@ module Slugged
|
|
77
88
|
has_slug_scope? ? where(slug_scope => record.send(slug_scope)) : scoped
|
78
89
|
end
|
79
90
|
|
91
|
+
def slug_value_for(value)
|
92
|
+
value.present? ? self.slug_convertor_proc.call(value) : value
|
93
|
+
end
|
94
|
+
|
80
95
|
protected
|
81
96
|
|
82
97
|
def has_slug_scope?
|
@@ -92,6 +107,7 @@ module Slugged
|
|
92
107
|
self.use_slug_cache = !!options.fetch(:use_cache, true)
|
93
108
|
self.use_slug_to_param = !!options.fetch(:to_param, true)
|
94
109
|
self.use_slug_history = !!options.fetch(:history, Slugged::Slug.usable?)
|
110
|
+
self.editable = !!options.fetch(:editable, false)
|
95
111
|
end
|
96
112
|
|
97
113
|
def set_slug_convertor(convertor)
|
@@ -107,7 +123,6 @@ module Slugged
|
|
107
123
|
end
|
108
124
|
end
|
109
125
|
end
|
110
|
-
|
111
126
|
end
|
112
127
|
end
|
113
128
|
end
|
data/lib/slugged/version.rb
CHANGED
data/slugged.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{slugged}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Darcy Laycock"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-01}
|
13
13
|
s.description = %q{Super simple slugs for ActiveRecord 3.0 and higher, with support for slug history}
|
14
14
|
s.email = %q{sutto@sutto.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
"metrics/.gitignore",
|
43
43
|
"slugged.gemspec",
|
44
44
|
"test/caching_test.rb",
|
45
|
+
"test/editable_test.rb",
|
45
46
|
"test/helper.rb",
|
46
47
|
"test/is_sluggable_test.rb",
|
47
48
|
"test/model_definitions.rb",
|
@@ -55,6 +56,7 @@ Gem::Specification.new do |s|
|
|
55
56
|
s.summary = %q{Super simple slugs for ActiveRecord 3.0 and higher, with support for slug history}
|
56
57
|
s.test_files = [
|
57
58
|
"test/caching_test.rb",
|
59
|
+
"test/editable_test.rb",
|
58
60
|
"test/helper.rb",
|
59
61
|
"test/is_sluggable_test.rb",
|
60
62
|
"test/model_definitions.rb",
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'digest/md5'
|
3
|
+
|
4
|
+
class EditableTest < Test::Unit::TestCase
|
5
|
+
with_tables :slugs, :users do
|
6
|
+
context 'with the editable option' do
|
7
|
+
|
8
|
+
setup { setup_slugs! :editable => true }
|
9
|
+
|
10
|
+
should 'correctly sluggify a value when cached_slug is blank on create' do
|
11
|
+
user = User.create(:name => "Bob")
|
12
|
+
assert_equal "bob", user.cached_slug
|
13
|
+
end
|
14
|
+
|
15
|
+
should 'not sluggify a value when cached_slug is not blank on create' do
|
16
|
+
user = User.create(:name => "Bob", :cached_slug => "Mob")
|
17
|
+
assert_equal "mob", user.cached_slug
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'sluggify a value when cached_slug is not changed && name is changed on update' do
|
21
|
+
user = User.create(:name => "Bob")
|
22
|
+
user.update_attributes(:name => "Noob")
|
23
|
+
assert_equal "noob", user.cached_slug
|
24
|
+
end
|
25
|
+
|
26
|
+
should 'not sluggify a value when cached_slug is changed && name is changed on update' do
|
27
|
+
user = User.create(:name => "Bob")
|
28
|
+
user.update_attributes(:name => "Rob", :cached_slug => "noob")
|
29
|
+
assert_equal "noob", user.cached_slug
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'sluggify a value when cached_slug set blank on update' do
|
33
|
+
user = User.create(:name => "Bob")
|
34
|
+
assert_equal "bob", user.cached_slug
|
35
|
+
user.update_attributes(:cached_slug => '')
|
36
|
+
assert_equal "bob", user.cached_slug
|
37
|
+
end
|
38
|
+
|
39
|
+
should 'sluggify a value when cached_slug set blank && name changed on update' do
|
40
|
+
user = User.create(:name => "Bob")
|
41
|
+
user.update_attributes(:name => "Rob", :cached_slug => '')
|
42
|
+
assert_equal "rob", user.cached_slug
|
43
|
+
end
|
44
|
+
|
45
|
+
should 'parameterize a value of a cached_slug' do
|
46
|
+
user = User.create(:name => "Bob", :cached_slug => "f**ck")
|
47
|
+
assert_equal user.cached_slug, User.slug_value_for("f**ck")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slugged
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Darcy Laycock
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-01 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- metrics/.gitignore
|
128
128
|
- slugged.gemspec
|
129
129
|
- test/caching_test.rb
|
130
|
+
- test/editable_test.rb
|
130
131
|
- test/helper.rb
|
131
132
|
- test/is_sluggable_test.rb
|
132
133
|
- test/model_definitions.rb
|
@@ -168,6 +169,7 @@ specification_version: 3
|
|
168
169
|
summary: Super simple slugs for ActiveRecord 3.0 and higher, with support for slug history
|
169
170
|
test_files:
|
170
171
|
- test/caching_test.rb
|
172
|
+
- test/editable_test.rb
|
171
173
|
- test/helper.rb
|
172
174
|
- test/is_sluggable_test.rb
|
173
175
|
- test/model_definitions.rb
|