friendly_id 4.1.0.beta.1 → 5.0.0.alpha.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.
- checksums.yaml +7 -0
- data/.travis.yml +7 -12
- data/Changelog.md +4 -0
- data/Gemfile +2 -2
- data/Guide.rdoc +34 -63
- data/README.md +116 -60
- data/Rakefile +5 -1
- data/WhatsNew.md +2 -94
- data/friendly_id.gemspec +10 -20
- data/gemfiles/Gemfile.rails-4.0.rb +19 -0
- data/lib/friendly_id.rb +11 -6
- data/lib/friendly_id/.gitattributes +1 -0
- data/lib/friendly_id/base.rb +6 -65
- data/lib/friendly_id/candidates.rb +41 -0
- data/lib/friendly_id/configuration.rb +10 -6
- data/lib/friendly_id/history.rb +22 -60
- data/lib/friendly_id/object_utils.rb +1 -1
- data/lib/friendly_id/scoped.rb +40 -34
- data/lib/friendly_id/scopes.rb +28 -0
- data/lib/friendly_id/simple_i18n.rb +13 -3
- data/lib/friendly_id/slug.rb +0 -1
- data/lib/friendly_id/slug_generator.rb +9 -68
- data/lib/friendly_id/slugged.rb +22 -34
- data/lib/friendly_id/version.rb +3 -0
- data/lib/generators/friendly_id_generator.rb +5 -4
- data/test/helper.rb +1 -1
- data/test/history_test.rb +63 -56
- data/test/object_utils_test.rb +0 -1
- data/test/schema.rb +1 -10
- data/test/shared.rb +27 -23
- data/test/simple_i18n_test.rb +3 -2
- data/test/slugged_test.rb +17 -48
- data/test/sti_test.rb +2 -2
- metadata +40 -103
- data/gemfiles/Gemfile.rails-3.0.rb +0 -21
- data/gemfiles/Gemfile.rails-3.1.rb +0 -22
- data/gemfiles/Gemfile.rails-3.2.rb +0 -22
- data/lib/friendly_id/finder_methods.rb +0 -35
- data/lib/friendly_id/globalize.rb +0 -115
- data/test/globalize_test.rb +0 -57
data/test/object_utils_test.rb
CHANGED
@@ -20,7 +20,6 @@ class ObjectUtilsTest < MiniTest::Unit::TestCase
|
|
20
20
|
|
21
21
|
test "ActiveRecord::Base instances should be unfriendly_ids" do
|
22
22
|
model_class = Class.new(ActiveRecord::Base) do
|
23
|
-
self.abstract_class = true
|
24
23
|
self.table_name = "authors"
|
25
24
|
end
|
26
25
|
assert model_class.new.unfriendly_id?
|
data/test/schema.rb
CHANGED
@@ -1,9 +1,4 @@
|
|
1
1
|
require "friendly_id/migration"
|
2
|
-
require "globalize3"
|
3
|
-
|
4
|
-
class TranslatedArticle < ActiveRecord::Base
|
5
|
-
translates :slug, :title
|
6
|
-
end
|
7
2
|
|
8
3
|
module FriendlyId
|
9
4
|
module Test
|
@@ -14,7 +9,6 @@ module FriendlyId
|
|
14
9
|
tables.each do |name|
|
15
10
|
drop_table name
|
16
11
|
end
|
17
|
-
TranslatedArticle.drop_translation_table!
|
18
12
|
end
|
19
13
|
|
20
14
|
def up
|
@@ -55,9 +49,6 @@ module FriendlyId
|
|
55
49
|
add_column :journalists, "slug_es", :string
|
56
50
|
add_column :journalists, "slug_de", :string
|
57
51
|
|
58
|
-
# This will be used to test globalize translations
|
59
|
-
TranslatedArticle.create_translation_table! :slug => :string, :title => :string
|
60
|
-
|
61
52
|
# This will be used to test relationships
|
62
53
|
add_column :books, :author_id, :integer
|
63
54
|
|
@@ -70,7 +61,7 @@ module FriendlyId
|
|
70
61
|
private
|
71
62
|
|
72
63
|
def slugged_tables
|
73
|
-
%w[journalists articles novelists novels manuals
|
64
|
+
%w[journalists articles novelists novels manuals]
|
74
65
|
end
|
75
66
|
|
76
67
|
def scoped_tables
|
data/test/shared.rb
CHANGED
@@ -7,18 +7,19 @@ module FriendlyId
|
|
7
7
|
assert !model_class.friendly_id_config.sequence_separator.empty?
|
8
8
|
end
|
9
9
|
|
10
|
-
test "should make a new slug if the
|
10
|
+
test "should make a new slug if the slug has been set to nil changed" do
|
11
11
|
with_instance_of model_class do |record|
|
12
12
|
record.name = "Changed Value"
|
13
|
+
record.slug = nil
|
13
14
|
record.save!
|
14
15
|
assert_equal "changed-value", record.slug
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
test "should
|
19
|
+
test "should add a UUID for duplicate friendly ids" do
|
19
20
|
with_instance_of model_class do |record|
|
20
21
|
record2 = model_class.create! :name => record.name
|
21
|
-
assert record2.friendly_id.match(/
|
22
|
+
assert record2.friendly_id.match(/([0-9a-z]+\-){4}[0-9a-z]+\z/)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -32,12 +33,13 @@ module FriendlyId
|
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
|
-
test "should not
|
36
|
+
test "should not change the sequence on save" do
|
36
37
|
with_instance_of model_class do |record|
|
37
38
|
record2 = model_class.create! :name => record.name
|
39
|
+
friendly_id = record2.friendly_id
|
38
40
|
record2.active = !record2.active
|
39
41
|
record2.save!
|
40
|
-
|
42
|
+
assert_equal friendly_id, record2.reload.friendly_id
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -45,8 +47,6 @@ module FriendlyId
|
|
45
47
|
with_instance_of model_class do |record|
|
46
48
|
record.slug = nil
|
47
49
|
record.save!
|
48
|
-
assert_nil record.slug
|
49
|
-
record.save!
|
50
50
|
refute_nil record.slug
|
51
51
|
end
|
52
52
|
end
|
@@ -56,7 +56,7 @@ module FriendlyId
|
|
56
56
|
self.class.const_set("Foo", my_model_class)
|
57
57
|
with_instance_of my_model_class do |record|
|
58
58
|
record.update_attributes my_model_class.friendly_id_config.slug_column => nil
|
59
|
-
record = my_model_class.find(record.id)
|
59
|
+
record = my_model_class.friendly.find(record.id)
|
60
60
|
record.class.validate Proc.new {errors[:name] = "FAIL"}
|
61
61
|
record.save
|
62
62
|
assert_equal record.to_param, record.friendly_id
|
@@ -69,36 +69,40 @@ module FriendlyId
|
|
69
69
|
test "finds should respect conditions" do
|
70
70
|
with_instance_of(model_class) do |record|
|
71
71
|
assert_raises(ActiveRecord::RecordNotFound) do
|
72
|
-
model_class.where("1 = 2").find record.friendly_id
|
72
|
+
model_class.where("1 = 2").friendly.find record.friendly_id
|
73
|
+
end
|
74
|
+
assert_raises(ActiveRecord::RecordNotFound) do
|
75
|
+
model_class.where("1 = 2").friendly.find record.id
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
76
79
|
|
77
80
|
test "should be findable by friendly id" do
|
78
|
-
with_instance_of(model_class) {|record| assert model_class.find record.friendly_id}
|
81
|
+
with_instance_of(model_class) {|record| assert model_class.friendly.find record.friendly_id}
|
79
82
|
end
|
80
83
|
|
81
84
|
test "should exist? by friendly id" do
|
82
85
|
with_instance_of(model_class) do |record|
|
83
|
-
assert model_class.exists? record.id
|
84
|
-
assert model_class.exists? record.
|
85
|
-
assert model_class.exists?
|
86
|
-
assert model_class.exists?(
|
87
|
-
assert
|
88
|
-
assert !model_class.exists?(
|
86
|
+
assert model_class.friendly.exists? record.id
|
87
|
+
assert model_class.friendly.exists? record.id.to_s
|
88
|
+
assert model_class.friendly.exists? record.friendly_id
|
89
|
+
assert model_class.friendly.exists?({:id => record.id})
|
90
|
+
assert model_class.friendly.exists?(['id = ?', record.id])
|
91
|
+
assert !model_class.friendly.exists?(record.friendly_id + "-hello")
|
92
|
+
assert !model_class.friendly.exists?(0)
|
89
93
|
end
|
90
94
|
end
|
91
95
|
|
92
96
|
test "should be findable by id as integer" do
|
93
|
-
with_instance_of(model_class) {|record| assert model_class.find record.id.to_i}
|
97
|
+
with_instance_of(model_class) {|record| assert model_class.friendly.find record.id.to_i}
|
94
98
|
end
|
95
99
|
|
96
100
|
test "should be findable by id as string" do
|
97
|
-
with_instance_of(model_class) {|record| assert model_class.find record.id.to_s}
|
101
|
+
with_instance_of(model_class) {|record| assert model_class.friendly.find record.id.to_s}
|
98
102
|
end
|
99
103
|
|
100
104
|
test "should be findable by numeric friendly_id" do
|
101
|
-
with_instance_of(model_class, :name => "206") {|record| assert model_class.find record.friendly_id}
|
105
|
+
with_instance_of(model_class, :name => "206") {|record| assert model_class.friendly.find record.friendly_id}
|
102
106
|
end
|
103
107
|
|
104
108
|
test "to_param should return the friendly_id" do
|
@@ -106,23 +110,23 @@ module FriendlyId
|
|
106
110
|
end
|
107
111
|
|
108
112
|
test "should be findable by themselves" do
|
109
|
-
with_instance_of(model_class) {|record| assert_equal record, model_class.find(record)}
|
113
|
+
with_instance_of(model_class) {|record| assert_equal record, model_class.friendly.find(record)}
|
110
114
|
end
|
111
115
|
|
112
116
|
test "updating record's other values should not change the friendly_id" do
|
113
117
|
with_instance_of model_class do |record|
|
114
118
|
old = record.friendly_id
|
115
119
|
record.update_attributes! :active => false
|
116
|
-
assert model_class.find old
|
120
|
+
assert model_class.friendly.find old
|
117
121
|
end
|
118
122
|
end
|
119
123
|
|
120
124
|
test "instances found by a single id should not be read-only" do
|
121
|
-
with_instance_of(model_class) {|record| assert !model_class.find(record.friendly_id).readonly?}
|
125
|
+
with_instance_of(model_class) {|record| assert !model_class.friendly.find(record.friendly_id).readonly?}
|
122
126
|
end
|
123
127
|
|
124
128
|
test "failing finds with unfriendly_id should raise errors normally" do
|
125
|
-
assert_raises(ActiveRecord::RecordNotFound) {model_class.find 0}
|
129
|
+
assert_raises(ActiveRecord::RecordNotFound) {model_class.friendly.find 0}
|
126
130
|
end
|
127
131
|
|
128
132
|
test "should return numeric id if the friendly_id is nil" do
|
data/test/simple_i18n_test.rb
CHANGED
@@ -83,7 +83,7 @@ class SimpleI18nTest < MiniTest::Unit::TestCase
|
|
83
83
|
journalist.save!
|
84
84
|
assert_equal "john-smith", journalist.to_param
|
85
85
|
I18n.with_locale(:es) do
|
86
|
-
|
86
|
+
assert_match(/juan-fulano-.+/, journalist.to_param)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -91,12 +91,13 @@ class SimpleI18nTest < MiniTest::Unit::TestCase
|
|
91
91
|
class RegressionTest < MiniTest::Unit::TestCase
|
92
92
|
include FriendlyId::Test
|
93
93
|
|
94
|
-
test "should not overwrite slugs on update_attributes" do
|
94
|
+
test "should not overwrite other locale's slugs on update_attributes" do
|
95
95
|
transaction do
|
96
96
|
journalist = Journalist.create!(:name => "John Smith")
|
97
97
|
journalist.set_friendly_id("Juan Fulano", :es)
|
98
98
|
journalist.save!
|
99
99
|
assert_equal "john-smith", journalist.to_param
|
100
|
+
journalist.slug = nil
|
100
101
|
journalist.update_attributes :name => "Johnny Smith"
|
101
102
|
assert_equal "johnny-smith", journalist.to_param
|
102
103
|
I18n.with_locale(:es) do
|
data/test/slugged_test.rb
CHANGED
@@ -88,14 +88,18 @@ class SlugGeneratorTest < MiniTest::Unit::TestCase
|
|
88
88
|
|
89
89
|
test "should quote column names" do
|
90
90
|
model_class = Class.new(ActiveRecord::Base) do
|
91
|
-
|
91
|
+
# This has been added in 635731bb to fix MySQL/Rubinius. It may still
|
92
|
+
# be necessary, but causes an exception to be raised on Rails 4, so I'm
|
93
|
+
# commenting it out. If it causes MySQL/Rubinius to fail again we'll
|
94
|
+
# look for another solution.
|
95
|
+
# self.abstract_class = true
|
92
96
|
self.table_name = "journalists"
|
93
97
|
extend FriendlyId
|
94
98
|
friendly_id :name, :use => :slugged, :slug_column => "strange name"
|
95
99
|
end
|
96
100
|
|
97
101
|
begin
|
98
|
-
with_instance_of(model_class) {|record| assert model_class.find(record.friendly_id)}
|
102
|
+
with_instance_of(model_class) {|record| assert model_class.friendly.find(record.friendly_id)}
|
99
103
|
rescue ActiveRecord::StatementInvalid
|
100
104
|
flunk "column name was not quoted"
|
101
105
|
end
|
@@ -106,7 +110,7 @@ class SlugGeneratorTest < MiniTest::Unit::TestCase
|
|
106
110
|
m1 = model_class.create! :name => "a b c d"
|
107
111
|
assert_equal "a-b-c-d", m1.slug
|
108
112
|
model_class.create! :name => "a b c d"
|
109
|
-
m1 = model_class.find(m1.id)
|
113
|
+
m1 = model_class.friendly.find(m1.id)
|
110
114
|
m1.save!
|
111
115
|
assert_equal "a-b-c-d", m1.slug
|
112
116
|
end
|
@@ -117,13 +121,13 @@ class SlugGeneratorTest < MiniTest::Unit::TestCase
|
|
117
121
|
record1 = model_class.create! :name => "Peugeuot 206"
|
118
122
|
assert_equal "peugeuot-206", record1.slug
|
119
123
|
record2 = model_class.create! :name => "Peugeuot 206"
|
120
|
-
|
124
|
+
assert_match(/\Apeugeuot-206-([a-z0-9]+\-){4}[a-z0-9]+\z/, record2.slug)
|
121
125
|
end
|
122
126
|
end
|
123
127
|
|
124
128
|
test "should correctly sequence slugs with underscores" do
|
125
129
|
transaction do
|
126
|
-
|
130
|
+
Novelist.create! :name => 'wordsfail, buildings tumble'
|
127
131
|
record2 = Novelist.create! :name => 'word fail'
|
128
132
|
assert_equal 'word_fail', record2.slug
|
129
133
|
end
|
@@ -144,19 +148,17 @@ class SlugSeparatorTest < MiniTest::Unit::TestCase
|
|
144
148
|
Journalist
|
145
149
|
end
|
146
150
|
|
147
|
-
test "should
|
151
|
+
test "should sequence with configured sequence separator" do
|
148
152
|
with_instance_of model_class do |record|
|
149
153
|
record2 = model_class.create! :name => record.name
|
150
|
-
assert record2.friendly_id.match(
|
154
|
+
assert record2.friendly_id.match(/:.*\z/)
|
151
155
|
end
|
152
156
|
end
|
153
157
|
|
154
|
-
test "should detect when a
|
158
|
+
test "should detect when a stored slug has been cleared" do
|
155
159
|
with_instance_of model_class do |record|
|
156
|
-
|
157
|
-
assert
|
158
|
-
record2.name = "hello world"
|
159
|
-
assert record2.should_generate_new_friendly_id?
|
160
|
+
record.slug = nil
|
161
|
+
assert record.should_generate_new_friendly_id?
|
160
162
|
end
|
161
163
|
end
|
162
164
|
|
@@ -173,23 +175,7 @@ class SlugSeparatorTest < MiniTest::Unit::TestCase
|
|
173
175
|
record1 = model_class.create! :name => "Peugeuot 206"
|
174
176
|
assert_equal "peugeuot-206", record1.slug
|
175
177
|
record2 = model_class.create! :name => "Peugeuot 206"
|
176
|
-
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
test "should detect when a sequenced slug has changed when name ends in number and using single dash" do
|
181
|
-
model_class = Class.new(ActiveRecord::Base) do
|
182
|
-
self.table_name = "journalists"
|
183
|
-
extend FriendlyId
|
184
|
-
friendly_id :name, :use => :slugged, :sequence_separator => '-'
|
185
|
-
end
|
186
|
-
transaction do
|
187
|
-
record1 = model_class.create! :name => "Peugeuot 206"
|
188
|
-
assert !record1.should_generate_new_friendly_id?
|
189
|
-
record1.save!
|
190
|
-
assert !record1.should_generate_new_friendly_id?
|
191
|
-
record1.name = "Peugeot 307"
|
192
|
-
assert record1.should_generate_new_friendly_id?
|
178
|
+
assert_match(/\Apeugeuot-206-([a-z0-9]+\-){4}[a-z0-9]+\z/, record2.slug)
|
193
179
|
end
|
194
180
|
end
|
195
181
|
end
|
@@ -201,7 +187,7 @@ class DefaultScopeTest < MiniTest::Unit::TestCase
|
|
201
187
|
class Journalist < ActiveRecord::Base
|
202
188
|
extend FriendlyId
|
203
189
|
friendly_id :name, :use => :slugged
|
204
|
-
default_scope :
|
190
|
+
default_scope -> { where(:active => true).order('id ASC') }
|
205
191
|
end
|
206
192
|
|
207
193
|
test "friendly_id should correctly sequence a default_scoped ordered table" do
|
@@ -218,23 +204,6 @@ class DefaultScopeTest < MiniTest::Unit::TestCase
|
|
218
204
|
end
|
219
205
|
end
|
220
206
|
|
221
|
-
class SluggedRegressionsTest < MiniTest::Unit::TestCase
|
222
|
-
include FriendlyId::Test
|
223
|
-
|
224
|
-
def model_class
|
225
|
-
Journalist
|
226
|
-
end
|
227
|
-
|
228
|
-
test "should increment the slug sequence for duplicate friendly ids beyond 10" do
|
229
|
-
with_instance_of model_class do |record|
|
230
|
-
(2..12).each do |i|
|
231
|
-
r = model_class.create! :name => record.name
|
232
|
-
assert r.friendly_id.match(/#{i}\z/)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
207
|
class UnderscoreAsSequenceSeparatorRegressionTest < MiniTest::Unit::TestCase
|
239
208
|
include FriendlyId::Test
|
240
209
|
|
@@ -255,7 +224,7 @@ class UnderscoreAsSequenceSeparatorRegressionTest < MiniTest::Unit::TestCase
|
|
255
224
|
|
256
225
|
end
|
257
226
|
|
258
|
-
# https://github.com/
|
227
|
+
# https://github.com/FriendlyId/friendly_id/issues/148
|
259
228
|
class FailedValidationAfterUpdateRegressionTest < MiniTest::Unit::TestCase
|
260
229
|
include FriendlyId::Test
|
261
230
|
|
data/test/sti_test.rb
CHANGED
@@ -50,13 +50,13 @@ class StiTest < MiniTest::Unit::TestCase
|
|
50
50
|
assert_equal :bar, klass.friendly_id_config.slug_column
|
51
51
|
end
|
52
52
|
|
53
|
-
test "friendly_id slugs should not clash with
|
53
|
+
test "friendly_id slugs should not clash with each other" do
|
54
54
|
transaction do
|
55
55
|
journalist = model_class.base_class.create! :name => 'foo bar'
|
56
56
|
editoralist = model_class.create! :name => 'foo bar'
|
57
57
|
|
58
58
|
assert_equal 'foo-bar', journalist.slug
|
59
|
-
|
59
|
+
assert_match(/foo-bar-.+/, editoralist.slug)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease: 6
|
4
|
+
version: 5.0.0.alpha.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Norman Clarke
|
@@ -10,179 +9,127 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-01
|
12
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: railties
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
18
|
- - ~>
|
21
19
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
20
|
+
version: 4.0.0
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
25
|
- - ~>
|
29
26
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
27
|
+
version: 4.0.0
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: activerecord
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
32
|
- - ~>
|
37
33
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
34
|
+
version: 4.0.0
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
39
|
- - ~>
|
45
40
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
41
|
+
version: 4.0.0
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: minitest
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- - '
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
48
|
+
version: 4.4.0
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- - '
|
53
|
+
- - '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
55
|
+
version: 4.4.0
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: mocha
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0'
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ! '>='
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
|
-
name: maruku
|
81
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
|
-
requirements:
|
84
|
-
- - ! '>='
|
60
|
+
- - ~>
|
85
61
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
62
|
+
version: 0.13.3
|
87
63
|
type: :development
|
88
64
|
prerelease: false
|
89
65
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
66
|
requirements:
|
92
|
-
- -
|
67
|
+
- - ~>
|
93
68
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
69
|
+
version: 0.13.3
|
95
70
|
- !ruby/object:Gem::Dependency
|
96
71
|
name: yard
|
97
72
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
73
|
requirements:
|
100
|
-
- -
|
74
|
+
- - '>='
|
101
75
|
- !ruby/object:Gem::Version
|
102
76
|
version: '0'
|
103
77
|
type: :development
|
104
78
|
prerelease: false
|
105
79
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
80
|
requirements:
|
108
|
-
- -
|
81
|
+
- - '>='
|
109
82
|
- !ruby/object:Gem::Version
|
110
83
|
version: '0'
|
111
84
|
- !ruby/object:Gem::Dependency
|
112
85
|
name: i18n
|
113
86
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
87
|
requirements:
|
116
|
-
- -
|
88
|
+
- - '>='
|
117
89
|
- !ruby/object:Gem::Version
|
118
90
|
version: '0'
|
119
91
|
type: :development
|
120
92
|
prerelease: false
|
121
93
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
94
|
requirements:
|
124
|
-
- -
|
95
|
+
- - '>='
|
125
96
|
- !ruby/object:Gem::Version
|
126
97
|
version: '0'
|
127
98
|
- !ruby/object:Gem::Dependency
|
128
99
|
name: ffaker
|
129
100
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
101
|
requirements:
|
132
|
-
- -
|
102
|
+
- - '>='
|
133
103
|
- !ruby/object:Gem::Version
|
134
104
|
version: '0'
|
135
105
|
type: :development
|
136
106
|
prerelease: false
|
137
107
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
108
|
requirements:
|
140
|
-
- -
|
109
|
+
- - '>='
|
141
110
|
- !ruby/object:Gem::Version
|
142
111
|
version: '0'
|
143
112
|
- !ruby/object:Gem::Dependency
|
144
113
|
name: simplecov
|
145
114
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
|
-
requirements:
|
148
|
-
- - ! '>='
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '0'
|
151
|
-
type: :development
|
152
|
-
prerelease: false
|
153
|
-
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ! '>='
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '0'
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: globalize3
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
115
|
requirements:
|
164
|
-
- -
|
116
|
+
- - '>='
|
165
117
|
- !ruby/object:Gem::Version
|
166
118
|
version: '0'
|
167
119
|
type: :development
|
168
120
|
prerelease: false
|
169
121
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
122
|
requirements:
|
172
|
-
- -
|
123
|
+
- - '>='
|
173
124
|
- !ruby/object:Gem::Version
|
174
125
|
version: '0'
|
175
|
-
description:
|
176
|
-
plugins for
|
177
|
-
|
126
|
+
description: |
|
127
|
+
FriendlyId is the "Swiss Army bulldozer" of slugging and permalink plugins for
|
178
128
|
Ruby on Rails. It allows you to create pretty URLs and work with human-friendly
|
179
|
-
|
180
129
|
strings as if they were numeric ids for Active Record models.
|
181
|
-
|
182
|
-
'
|
183
130
|
email:
|
184
131
|
- norman@njclarke.com
|
185
|
-
-
|
132
|
+
- p@arndt.io
|
186
133
|
executables: []
|
187
134
|
extensions: []
|
188
135
|
extra_rdoc_files: []
|
@@ -200,23 +147,23 @@ files:
|
|
200
147
|
- WhatsNew.md
|
201
148
|
- bench.rb
|
202
149
|
- friendly_id.gemspec
|
203
|
-
- gemfiles/Gemfile.rails-
|
204
|
-
- gemfiles/Gemfile.rails-3.1.rb
|
205
|
-
- gemfiles/Gemfile.rails-3.2.rb
|
150
|
+
- gemfiles/Gemfile.rails-4.0.rb
|
206
151
|
- lib/friendly_id.rb
|
152
|
+
- lib/friendly_id/.gitattributes
|
207
153
|
- lib/friendly_id/base.rb
|
154
|
+
- lib/friendly_id/candidates.rb
|
208
155
|
- lib/friendly_id/configuration.rb
|
209
|
-
- lib/friendly_id/finder_methods.rb
|
210
|
-
- lib/friendly_id/globalize.rb
|
211
156
|
- lib/friendly_id/history.rb
|
212
157
|
- lib/friendly_id/migration.rb
|
213
158
|
- lib/friendly_id/object_utils.rb
|
214
159
|
- lib/friendly_id/reserved.rb
|
215
160
|
- lib/friendly_id/scoped.rb
|
161
|
+
- lib/friendly_id/scopes.rb
|
216
162
|
- lib/friendly_id/simple_i18n.rb
|
217
163
|
- lib/friendly_id/slug.rb
|
218
164
|
- lib/friendly_id/slug_generator.rb
|
219
165
|
- lib/friendly_id/slugged.rb
|
166
|
+
- lib/friendly_id/version.rb
|
220
167
|
- lib/generators/friendly_id_generator.rb
|
221
168
|
- test/base_test.rb
|
222
169
|
- test/compatibility/ancestry/Gemfile
|
@@ -228,7 +175,6 @@ files:
|
|
228
175
|
- test/core_test.rb
|
229
176
|
- test/databases.yml
|
230
177
|
- test/generator_test.rb
|
231
|
-
- test/globalize_test.rb
|
232
178
|
- test/helper.rb
|
233
179
|
- test/history_test.rb
|
234
180
|
- test/object_utils_test.rb
|
@@ -239,38 +185,29 @@ files:
|
|
239
185
|
- test/simple_i18n_test.rb
|
240
186
|
- test/slugged_test.rb
|
241
187
|
- test/sti_test.rb
|
242
|
-
homepage: http://github.com/
|
243
|
-
licenses:
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
from 3.x, please see this document:
|
248
|
-
|
249
|
-
|
250
|
-
http://rubydoc.info/github/norman/friendly_id/master/file/WhatsNew.md
|
251
|
-
|
252
|
-
|
253
|
-
'
|
188
|
+
homepage: http://github.com/FriendlyId/friendly_id
|
189
|
+
licenses:
|
190
|
+
- MIT
|
191
|
+
metadata: {}
|
192
|
+
post_install_message:
|
254
193
|
rdoc_options: []
|
255
194
|
require_paths:
|
256
195
|
- lib
|
257
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
258
|
-
none: false
|
259
197
|
requirements:
|
260
|
-
- -
|
198
|
+
- - '>='
|
261
199
|
- !ruby/object:Gem::Version
|
262
|
-
version:
|
200
|
+
version: 1.9.3
|
263
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
|
-
none: false
|
265
202
|
requirements:
|
266
|
-
- -
|
203
|
+
- - '>'
|
267
204
|
- !ruby/object:Gem::Version
|
268
205
|
version: 1.3.1
|
269
206
|
requirements: []
|
270
207
|
rubyforge_project: friendly_id
|
271
|
-
rubygems_version:
|
208
|
+
rubygems_version: 2.0.3
|
272
209
|
signing_key:
|
273
|
-
specification_version:
|
210
|
+
specification_version: 4
|
274
211
|
summary: A comprehensive slugging and pretty-URL plugin.
|
275
212
|
test_files: []
|
276
213
|
has_rdoc:
|