friendly_id 4.0.0.beta12 → 4.0.0.beta13
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/README.md +2 -2
- data/WhatsNew.md +1 -1
- data/gemfiles/Gemfile.rails-3.1.rb +2 -2
- data/lib/friendly_id.rb +2 -1
- data/lib/friendly_id/i18n.rb +1 -1
- data/lib/friendly_id/slugged.rb +3 -2
- data/test/helper.rb +1 -1
- data/test/i18n_test.rb +20 -2
- data/test/slugged_test.rb +31 -0
- metadata +23 -23
data/README.md
CHANGED
@@ -43,7 +43,7 @@ The current docs can always be found
|
|
43
43
|
|
44
44
|
cd my_app
|
45
45
|
|
46
|
-
gem "friendly_id", "~> 4.0.0.
|
46
|
+
gem "friendly_id", "~> 4.0.0.beta12"
|
47
47
|
|
48
48
|
rails generate scaffold user name:string slug:string
|
49
49
|
|
@@ -67,7 +67,7 @@ The current docs can always be found
|
|
67
67
|
# If you're adding FriendlyId to an existing app and need
|
68
68
|
# to generate slugs for existing users, do this from the
|
69
69
|
# console, runner, or add a Rake task:
|
70
|
-
User.
|
70
|
+
User.find_each(&:save)
|
71
71
|
|
72
72
|
|
73
73
|
## Benchmarks
|
data/WhatsNew.md
CHANGED
@@ -13,8 +13,8 @@ platform :ruby do
|
|
13
13
|
gem "sqlite3", "~> 1.3.4"
|
14
14
|
end
|
15
15
|
|
16
|
-
gem "activerecord", "~> 3.1.
|
16
|
+
gem "activerecord", "~> 3.1.1"
|
17
17
|
gem "minitest", "~> 2.4.0"
|
18
18
|
gem "mocha", "~> 0.9.12"
|
19
|
-
gem "railties", "~> 3.1.
|
19
|
+
gem "railties", "~> 3.1.1"
|
20
20
|
gem "rake"
|
data/lib/friendly_id.rb
CHANGED
@@ -81,7 +81,7 @@ In general, use slugs by default unless you know for sure you don't need them.
|
|
81
81
|
module FriendlyId
|
82
82
|
|
83
83
|
# The current version.
|
84
|
-
VERSION = "4.0.0.
|
84
|
+
VERSION = "4.0.0.beta13"
|
85
85
|
|
86
86
|
@mutex = Mutex.new
|
87
87
|
|
@@ -114,6 +114,7 @@ module FriendlyId
|
|
114
114
|
#
|
115
115
|
# For examples of this, see the source for {Scoped.included}.
|
116
116
|
def self.extended(model_class)
|
117
|
+
return if model_class.respond_to? :friendly_id
|
117
118
|
class << model_class
|
118
119
|
alias relation_without_friendly_id relation
|
119
120
|
end
|
data/lib/friendly_id/i18n.rb
CHANGED
data/lib/friendly_id/slugged.rb
CHANGED
@@ -196,14 +196,15 @@ This functionality was in fact taken from earlier versions of FriendlyId.
|
|
196
196
|
# slugs to be generated once, and then never updated.
|
197
197
|
def should_generate_new_friendly_id?
|
198
198
|
return true if new_record?
|
199
|
-
slug_base = send
|
199
|
+
slug_base = normalize_friendly_id send(friendly_id_config.base)
|
200
200
|
separator = Regexp.escape friendly_id_config.sequence_separator
|
201
201
|
slug_base != current_friendly_id.try(:sub, /#{separator}[\d]*\z/, '')
|
202
202
|
end
|
203
203
|
|
204
204
|
# Sets the slug.
|
205
|
+
# FIXME: This method sucks and the logic is pretty dubious.
|
205
206
|
def set_slug(normalized_slug = nil)
|
206
|
-
if should_generate_new_friendly_id?
|
207
|
+
if normalized_slug || should_generate_new_friendly_id?
|
207
208
|
normalized_slug ||= normalize_friendly_id send(friendly_id_config.base)
|
208
209
|
generator = friendly_id_config.slug_generator_class.new self, normalized_slug
|
209
210
|
send "#{friendly_id_config.slug_column}=", generator.generate
|
data/test/helper.rb
CHANGED
data/test/i18n_test.rb
CHANGED
@@ -53,7 +53,7 @@ class I18nTest < MiniTest::Unit::TestCase
|
|
53
53
|
journalist = Journalist.create!(:name => "John Smith")
|
54
54
|
journalist.set_friendly_id("Juan Fulano", :es)
|
55
55
|
journalist.save!
|
56
|
-
assert_equal "
|
56
|
+
assert_equal "juan-fulano", journalist.slug_es
|
57
57
|
I18n.with_locale(:es) do
|
58
58
|
assert_equal "juan-fulano", journalist.to_param
|
59
59
|
end
|
@@ -75,6 +75,24 @@ class I18nTest < MiniTest::Unit::TestCase
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
class RegressionTest < MiniTest::Unit::TestCase
|
79
|
+
include FriendlyId::Test
|
80
|
+
|
81
|
+
test "should not overwrite slugs on update_attributes" do
|
82
|
+
transaction do
|
83
|
+
journalist = Journalist.create!(:name => "John Smith")
|
84
|
+
journalist.set_friendly_id("Juan Fulano", :es)
|
85
|
+
journalist.save!
|
86
|
+
assert_equal "john-smith", journalist.to_param
|
87
|
+
journalist.update_attributes :name => "Johnny Smith"
|
88
|
+
assert_equal "johnny-smith", journalist.to_param
|
89
|
+
I18n.with_locale(:es) do
|
90
|
+
assert_equal "juan-fulano", journalist.to_param
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
78
96
|
class ConfigurationTest < MiniTest::Unit::TestCase
|
79
97
|
test "should add locale to slug column for a non-default locale" do
|
80
98
|
I18n.with_locale :es do
|
@@ -98,4 +116,4 @@ class I18nTest < MiniTest::Unit::TestCase
|
|
98
116
|
end
|
99
117
|
end
|
100
118
|
end
|
101
|
-
end
|
119
|
+
end
|
data/test/slugged_test.rb
CHANGED
@@ -28,6 +28,37 @@ class SluggedTest < MiniTest::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
test "should allow validations on the slug" do
|
32
|
+
model_class = Class.new(ActiveRecord::Base) do
|
33
|
+
self.table_name = "articles"
|
34
|
+
extend FriendlyId
|
35
|
+
friendly_id :name, :use => :slugged
|
36
|
+
validates_length_of :slug, :maximum => 1
|
37
|
+
def self.name
|
38
|
+
"Article"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
instance = model_class.new :name => "hello"
|
42
|
+
refute instance.valid?
|
43
|
+
end
|
44
|
+
|
45
|
+
test "should not break validates_uniqueness_of" do
|
46
|
+
model_class = Class.new(ActiveRecord::Base) do
|
47
|
+
self.table_name = "articles"
|
48
|
+
extend FriendlyId
|
49
|
+
friendly_id :name, :use => :slugged
|
50
|
+
validates_uniqueness_of :name
|
51
|
+
def self.name
|
52
|
+
"Article"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
instance = model_class.create :name => "hello"
|
56
|
+
instance2 = model_class.create :name => "hello"
|
57
|
+
assert instance.valid?
|
58
|
+
refute instance2.valid?
|
59
|
+
end
|
60
|
+
|
61
|
+
|
31
62
|
end
|
32
63
|
|
33
64
|
class SlugGeneratorTest < MiniTest::Unit::TestCase
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta13
|
5
5
|
prerelease: 6
|
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: 2011-
|
12
|
+
date: 2011-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: &
|
16
|
+
requirement: &70219708818280 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.1.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70219708818280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &70219708817420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.1.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70219708817420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3
|
38
|
-
requirement: &
|
38
|
+
requirement: &70219708816820 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.3.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70219708816820
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: minitest
|
49
|
-
requirement: &
|
49
|
+
requirement: &70219708815960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.4.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70219708815960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mocha
|
60
|
-
requirement: &
|
60
|
+
requirement: &70219708804840 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.12
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70219708804840
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: ffaker
|
71
|
-
requirement: &
|
71
|
+
requirement: &70219708804320 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.8.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70219708804320
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: maruku
|
82
|
-
requirement: &
|
82
|
+
requirement: &70219708803840 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 0.6.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70219708803840
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &70219708803380 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.7.2
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70219708803380
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: i18n
|
104
|
-
requirement: &
|
104
|
+
requirement: &70219708802920 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.6.0
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70219708802920
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: simplecov
|
115
|
-
requirement: &
|
115
|
+
requirement: &70219708802520 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70219708802520
|
124
124
|
description: ! 'FriendlyId is the "Swiss Army bulldozer" of slugging and permalink
|
125
125
|
plugins for
|
126
126
|
|
@@ -210,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
210
|
version: 1.3.1
|
211
211
|
requirements: []
|
212
212
|
rubyforge_project: friendly_id
|
213
|
-
rubygems_version: 1.8.
|
213
|
+
rubygems_version: 1.8.5
|
214
214
|
signing_key:
|
215
215
|
specification_version: 3
|
216
216
|
summary: A comprehensive slugging and pretty-URL plugin.
|