friendly_id 5.4.0 → 5.5.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/dependabot.yml +6 -0
  5. data/.github/stale.yml +1 -1
  6. data/.github/workflows/test.yml +38 -36
  7. data/.yardopts +2 -0
  8. data/Changelog.md +19 -0
  9. data/Gemfile +9 -13
  10. data/README.md +31 -8
  11. data/Rakefile +24 -27
  12. data/bench.rb +30 -27
  13. data/certs/parndt.pem +25 -23
  14. data/friendly_id.gemspec +26 -29
  15. data/gemfiles/Gemfile.rails-5.2.rb +11 -16
  16. data/gemfiles/Gemfile.rails-6.0.rb +11 -16
  17. data/gemfiles/Gemfile.rails-6.1.rb +22 -0
  18. data/gemfiles/Gemfile.rails-7.0.rb +22 -0
  19. data/guide.rb +13 -6
  20. data/lib/friendly_id/base.rb +59 -60
  21. data/lib/friendly_id/candidates.rb +9 -11
  22. data/lib/friendly_id/configuration.rb +6 -7
  23. data/lib/friendly_id/finder_methods.rb +63 -15
  24. data/lib/friendly_id/finders.rb +66 -66
  25. data/lib/friendly_id/history.rb +62 -63
  26. data/lib/friendly_id/initializer.rb +4 -4
  27. data/lib/friendly_id/migration.rb +6 -6
  28. data/lib/friendly_id/object_utils.rb +2 -2
  29. data/lib/friendly_id/reserved.rb +30 -32
  30. data/lib/friendly_id/scoped.rb +99 -102
  31. data/lib/friendly_id/sequentially_slugged/calculator.rb +69 -0
  32. data/lib/friendly_id/sequentially_slugged.rb +17 -64
  33. data/lib/friendly_id/simple_i18n.rb +78 -69
  34. data/lib/friendly_id/slug.rb +1 -2
  35. data/lib/friendly_id/slug_generator.rb +1 -3
  36. data/lib/friendly_id/slugged.rb +238 -239
  37. data/lib/friendly_id/version.rb +1 -1
  38. data/lib/friendly_id.rb +47 -49
  39. data/lib/generators/friendly_id_generator.rb +9 -9
  40. data/test/base_test.rb +10 -13
  41. data/test/benchmarks/finders.rb +28 -26
  42. data/test/benchmarks/object_utils.rb +13 -13
  43. data/test/candidates_test.rb +17 -18
  44. data/test/configuration_test.rb +7 -11
  45. data/test/core_test.rb +1 -2
  46. data/test/databases.yml +4 -3
  47. data/test/finders_test.rb +36 -13
  48. data/test/generator_test.rb +16 -26
  49. data/test/helper.rb +31 -24
  50. data/test/history_test.rb +70 -74
  51. data/test/numeric_slug_test.rb +4 -4
  52. data/test/object_utils_test.rb +0 -2
  53. data/test/reserved_test.rb +9 -11
  54. data/test/schema.rb +5 -4
  55. data/test/scoped_test.rb +18 -20
  56. data/test/sequentially_slugged_test.rb +65 -50
  57. data/test/shared.rb +15 -16
  58. data/test/simple_i18n_test.rb +22 -12
  59. data/test/slugged_test.rb +125 -113
  60. data/test/sti_test.rb +19 -21
  61. data.tar.gz.sig +0 -0
  62. metadata +38 -34
  63. metadata.gz.sig +0 -0
  64. data/gemfiles/Gemfile.rails-5.0.rb +0 -28
  65. data/gemfiles/Gemfile.rails-5.1.rb +0 -27
data/test/sti_test.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  require "helper"
2
2
 
3
3
  class StiTest < TestCaseClass
4
-
5
4
  include FriendlyId::Test
6
5
  include FriendlyId::Test::Shared::Core
7
6
  include FriendlyId::Test::Shared::Slugged
8
7
 
9
8
  class Journalist < ActiveRecord::Base
10
9
  extend FriendlyId
11
- friendly_id :name, :use => [:slugged]
10
+ friendly_id :name, use: [:slugged]
12
11
  end
13
12
 
14
13
  class Editorialist < Journalist
@@ -20,9 +19,11 @@ class StiTest < TestCaseClass
20
19
 
21
20
  test "friendly_id should accept a base and a hash with single table inheritance" do
22
21
  abstract_klass = Class.new(ActiveRecord::Base) do
23
- def self.table_exists?; false end
22
+ def self.table_exists?
23
+ false
24
+ end
24
25
  extend FriendlyId
25
- friendly_id :foo, :use => :slugged, :slug_column => :bar
26
+ friendly_id :foo, use: :slugged, slug_column: :bar
26
27
  end
27
28
  klass = Class.new(abstract_klass)
28
29
  assert klass < FriendlyId::Slugged
@@ -36,7 +37,9 @@ class StiTest < TestCaseClass
36
37
 
37
38
  test "friendly_id should accept a block with single table inheritance" do
38
39
  abstract_klass = Class.new(ActiveRecord::Base) do
39
- def self.table_exists?; false end
40
+ def self.table_exists?
41
+ false
42
+ end
40
43
  extend FriendlyId
41
44
  friendly_id :foo do |config|
42
45
  config.use :slugged
@@ -52,10 +55,10 @@ class StiTest < TestCaseClass
52
55
 
53
56
  test "friendly_id slugs should not clash with each other" do
54
57
  transaction do
55
- journalist = model_class.base_class.create! :name => 'foo bar'
56
- editoralist = model_class.create! :name => 'foo bar'
58
+ journalist = model_class.base_class.create! name: "foo bar"
59
+ editoralist = model_class.create! name: "foo bar"
57
60
 
58
- assert_equal 'foo-bar', journalist.slug
61
+ assert_equal "foo-bar", journalist.slug
59
62
  assert_match(/foo-bar-.+/, editoralist.slug)
60
63
  end
61
64
  end
@@ -64,7 +67,7 @@ end
64
67
  class StiTestWithHistory < StiTest
65
68
  class Journalist < ActiveRecord::Base
66
69
  extend FriendlyId
67
- friendly_id :name, :use => [:slugged, :history]
70
+ friendly_id :name, use: [:slugged, :history]
68
71
  end
69
72
 
70
73
  class Editorialist < Journalist
@@ -75,19 +78,17 @@ class StiTestWithHistory < StiTest
75
78
  end
76
79
  end
77
80
 
78
-
79
81
  class StiTestWithFinders < TestCaseClass
80
-
81
82
  include FriendlyId::Test
82
83
 
83
84
  class Journalist < ActiveRecord::Base
84
85
  extend FriendlyId
85
- friendly_id :name, :use => [:slugged, :finders]
86
+ friendly_id :name, use: [:slugged, :finders]
86
87
  end
87
88
 
88
89
  class Editorialist < Journalist
89
90
  extend FriendlyId
90
- friendly_id :name, :use => [:slugged, :finders]
91
+ friendly_id :name, use: [:slugged, :finders]
91
92
  end
92
93
 
93
94
  def model_class
@@ -96,22 +97,20 @@ class StiTestWithFinders < TestCaseClass
96
97
 
97
98
  test "friendly_id slugs should be looked up from subclass with friendly" do
98
99
  transaction do
99
- editoralist = model_class.create! :name => 'foo bar'
100
+ editoralist = model_class.create! name: "foo bar"
100
101
  assert_equal editoralist, model_class.friendly.find(editoralist.slug)
101
102
  end
102
103
  end
103
104
 
104
105
  test "friendly_id slugs should be looked up from subclass" do
105
106
  transaction do
106
- editoralist = model_class.create! :name => 'foo bar'
107
+ editoralist = model_class.create! name: "foo bar"
107
108
  assert_equal editoralist, model_class.find(editoralist.slug)
108
109
  end
109
110
  end
110
-
111
111
  end
112
112
 
113
113
  class StiTestSubClass < TestCaseClass
114
-
115
114
  include FriendlyId::Test
116
115
 
117
116
  class Journalist < ActiveRecord::Base
@@ -120,7 +119,7 @@ class StiTestSubClass < TestCaseClass
120
119
 
121
120
  class Editorialist < Journalist
122
121
  extend FriendlyId
123
- friendly_id :name, :use => [:slugged, :finders]
122
+ friendly_id :name, use: [:slugged, :finders]
124
123
  end
125
124
 
126
125
  def model_class
@@ -129,9 +128,8 @@ class StiTestSubClass < TestCaseClass
129
128
 
130
129
  test "friendly_id slugs can be created and looked up from subclass" do
131
130
  transaction do
132
- editoralist = model_class.create! :name => 'foo bar'
131
+ editoralist = model_class.create! name: "foo bar"
133
132
  assert_equal editoralist, model_class.find(editoralist.slug)
134
133
  end
135
134
  end
136
-
137
- end
135
+ end
data.tar.gz.sig CHANGED
Binary file
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: 5.4.0
4
+ version: 5.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
@@ -11,31 +11,33 @@ bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIEMjCCApqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhnZW1z
15
- L0RDPXAvREM9YXJuZHQvREM9aW8wHhcNMjAwNTEwMjIxOTQ2WhcNMjEwNTEwMjIx
16
- OTQ2WjAjMSEwHwYDVQQDDBhnZW1zL0RDPXAvREM9YXJuZHQvREM9aW8wggGiMA0G
17
- CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDT+JzHYPGMYJt9ct2DCsbIymn1uJJp
18
- HnDkQESfsGe40jTC90oF2iVbVOkaacNc1N3CSWUZvZjuygUuS86P6/kpBILGdO2+
19
- bkXXKtfGC2YGGx9TdNLpCb4925vQHvdFeKXGpQDZdDw1SNC6zraZou47CvOE1cl2
20
- Bp+1QMZuGRZ4+5CzOEWDWurjqce3O1jUEbyBB7z5H0h/YEaxfXipxhL1Dhi0sgkH
21
- qP/e6SxzifdifdZCksJFQ06a1ji9hJY6eM23qbv/aaluVHAZSVBAQBS7rYniLo+N
22
- G4vpFhoubQO5u8UluUtCaPUpI/qOvVcSaZn3ZkzlMwC8b1RwAeXBQmtFE2wnrv2i
23
- ovTwoN7rHchwhgaHbkuFh4Wr92wGbrWL7J+X8rWKk1f8RF4kvtNE/NA6YrkxTpVh
24
- QMyDmekt7rTxvcq2NneLGroWIUVCx/JID+Jw492LKQ6Sl1/P2TRzdEDtqZAZL0gt
25
- xlWeMUfGG2D/gLnhs5qnaFaWQwGTmBnTgHcCAwEAAaNxMG8wCQYDVR0TBAIwADAL
26
- BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEqtAyQVxPgKsrgoTQ1YmaIu/fmvMBoGA1Ud
27
- EQQTMBGBD2dlbXNAcC5hcm5kdC5pbzAaBgNVHRIEEzARgQ9nZW1zQHAuYXJuZHQu
28
- aW8wDQYJKoZIhvcNAQELBQADggGBALu2HM50B8xqlAXkCwavJDvWWtV9pG1igFUg
29
- friZRWprUQ5nTaNmAd8p8qbJQwaIK2gt+DfYWfB9LtKnQTfbhLRBbmJ7zYw8LjKY
30
- PwCs4RWjDAiuyCO3ppfsz+1bsMUXPLgWlaUkXsUy3nr2NruEFTO9zu3wGYQQ93Tt
31
- vYSHOnP35UB4QjsjNrOO7FBaQfy6O909PP+GnVcJ62s9c26voJz63RSolwY7Jydw
32
- XUlG68jjJKSoDHRzVTmNB7sX8rs8P2kvYkpIUXPHyls3mWBWjBWbdEYWESZrxI2x
33
- dS7jY3AnfqhvsWra2pSREb2IDqPnJrHVOejnEI/zuuufUxLwDx3AC6SMdsyWkZ7V
34
- 9OmLt2rg75Sct6h2220lO5ySqYtqAXuOMBDGv5L0zLalx1g8LACA7uILTKVWh8B8
35
- Hsej0MQ3drCB1eA4c9OXdCUQJnY2aLTq3uNvTbZvoTgWK55eq3KLBJ4zzoKZ4tBX
36
- /HIFI/fEwYlI1Ji3oikUrHkc4rWgaQ==
14
+ MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBRMREwDwYDVQQDDAhydWJ5
15
+ Z2VtczERMA8GCgmSJomT8ixkARkWAXAxFTATBgoJkiaJk/IsZAEZFgVhcm5kdDES
16
+ MBAGCgmSJomT8ixkARkWAmlvMB4XDTIyMTExNTIyMjQzMFoXDTIzMTExNTIyMjQz
17
+ MFowUTERMA8GA1UEAwwIcnVieWdlbXMxETAPBgoJkiaJk/IsZAEZFgFwMRUwEwYK
18
+ CZImiZPyLGQBGRYFYXJuZHQxEjAQBgoJkiaJk/IsZAEZFgJpbzCCAaIwDQYJKoZI
19
+ hvcNAQEBBQADggGPADCCAYoCggGBAMPq2bIEO+BmmBeuidSySK7xlL/LWBHzyDxw
20
+ EMgWsHqJMDZYCZI4WoWbSTSSLrp5zPXLWN0hB23u3dxFp4RVygTTZkc8k05mteab
21
+ fdREGgdcP+mY8/ASQSvb1VW6IM51Srgjy1SK0S5Qf3HAiQafFvRsxRkY0SWyth24
22
+ ne/7HG667vHQ1+t0VFl8twupJE9S8p2zgX3eZBl2yRNm/kE5reUsOLvmS58Iri/X
23
+ 9tnz0SGkzrKkim9OIByq7XkFLL3oaIyfbBVgOWilM5pvxj/xNuRH7EIM6aE3q0UZ
24
+ xo7o9u9Iz2zApDEjejByPjxWAhLuP3v3bJyinRFE1rO47lEM/s6KM/6YooxvgYIN
25
+ miYYFRtTj9nmKEMv6+h1mZ1/ZwqStTTRh/T90T65dcgsoqRd0JNvpNRjFrYH5cuj
26
+ QZWMl/FE6AADm0GXa34ZiTQx3Wx2ctqJLFak8+imPwes90nCpiYmgaZpwBI+shjU
27
+ AddbPDNq+EoxPMWTh0Er3w76fywOWQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1Ud
28
+ DwQEAwIEsDAdBgNVHQ4EFgQUxRJaTQZmtkN8FKUWVHKc2riND18wHgYDVR0RBBcw
29
+ FYETcnVieWdlbXNAcC5hcm5kdC5pbzAeBgNVHRIEFzAVgRNydWJ5Z2Vtc0BwLmFy
30
+ bmR0LmlvMA0GCSqGSIb3DQEBCwUAA4IBgQBSRGMkZ2dvJ0LSjFz+rIt3G3AZMbKD
31
+ tjaaQRuC9rOkrl3Rml6h9j7cHYiM0wkTjXneFNySc8jWmM/jKnxiiUfUK9r1XL4n
32
+ 71tz39+MD2lIpLVVEQ69MIoUseppNUTCg0mNghSDYNwISMD/hoWwbJudBi56DbhE
33
+ xkulLbw8qtcEE+iilIKibe+eJF4platKScsOA7d1AuilR1/S245UzeqwwyI52/xK
34
+ dfoP928X9Tb/48+83lWUgAgCQOd6WdfCpgQ5H6R90lc8L7OfuDR/vgcmSOTsNVgG
35
+ 1TC3b2FISS0p0qfZsiS7BXh+ARoBKLXsV1a7WR36X0dUpajvk+zzBGrFCdbW43Gx
36
+ wmJzIksYnf9Ktg8Ux+FLcRBGw4qEIyWvqmS0obB1Hke68rTg0uNTFcKXsNw33XF5
37
+ fw1cbj95g7OPe0feGK8+afXh/L38vx/hIIOGlUEZ+HaWL2Dki/7vRGvda8dfOpG5
38
+ bJfaoyKbVsrK+gGKFJv860zsO8lg6BGLsUw=
37
39
  -----END CERTIFICATE-----
38
- date: 2020-08-13 00:00:00.000000000 Z
40
+ date: 2023-11-12 00:00:00.000000000 Z
39
41
  dependencies:
40
42
  - !ruby/object:Gem::Dependency
41
43
  name: activerecord
@@ -99,14 +101,14 @@ dependencies:
99
101
  requirements:
100
102
  - - "~>"
101
103
  - !ruby/object:Gem::Version
102
- version: '1.1'
104
+ version: '2.1'
103
105
  type: :development
104
106
  prerelease: false
105
107
  version_requirements: !ruby/object:Gem::Requirement
106
108
  requirements:
107
109
  - - "~>"
108
110
  - !ruby/object:Gem::Version
109
- version: '1.1'
111
+ version: '2.1'
110
112
  - !ruby/object:Gem::Dependency
111
113
  name: yard
112
114
  requirement: !ruby/object:Gem::Requirement
@@ -163,10 +165,9 @@ dependencies:
163
165
  - - ">="
164
166
  - !ruby/object:Gem::Version
165
167
  version: '0'
166
- description: |
167
- FriendlyId is the "Swiss Army bulldozer" of slugging and permalink plugins for
168
- Active Record. It lets you create pretty URLs and work with human-friendly
169
- strings as if they were numeric ids.
168
+ description: FriendlyId is the "Swiss Army bulldozer" of slugging and permalink plugins
169
+ for Active Record. It lets you create pretty URLs and work with human-friendly strings
170
+ as if they were numeric ids.
170
171
  email:
171
172
  - norman@njclarke.com
172
173
  - p@arndt.io
@@ -175,6 +176,8 @@ extensions: []
175
176
  extra_rdoc_files: []
176
177
  files:
177
178
  - ".gemtest"
179
+ - ".github/FUNDING.yml"
180
+ - ".github/dependabot.yml"
178
181
  - ".github/stale.yml"
179
182
  - ".github/workflows/test.yml"
180
183
  - ".gitignore"
@@ -189,10 +192,10 @@ files:
189
192
  - bench.rb
190
193
  - certs/parndt.pem
191
194
  - friendly_id.gemspec
192
- - gemfiles/Gemfile.rails-5.0.rb
193
- - gemfiles/Gemfile.rails-5.1.rb
194
195
  - gemfiles/Gemfile.rails-5.2.rb
195
196
  - gemfiles/Gemfile.rails-6.0.rb
197
+ - gemfiles/Gemfile.rails-6.1.rb
198
+ - gemfiles/Gemfile.rails-7.0.rb
196
199
  - guide.rb
197
200
  - lib/friendly_id.rb
198
201
  - lib/friendly_id/.gitattributes
@@ -208,6 +211,7 @@ files:
208
211
  - lib/friendly_id/reserved.rb
209
212
  - lib/friendly_id/scoped.rb
210
213
  - lib/friendly_id/sequentially_slugged.rb
214
+ - lib/friendly_id/sequentially_slugged/calculator.rb
211
215
  - lib/friendly_id/simple_i18n.rb
212
216
  - lib/friendly_id/slug.rb
213
217
  - lib/friendly_id/slug_generator.rb
@@ -254,7 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
258
  - !ruby/object:Gem::Version
255
259
  version: '0'
256
260
  requirements: []
257
- rubygems_version: 3.1.2
261
+ rubygems_version: 3.4.22
258
262
  signing_key:
259
263
  specification_version: 4
260
264
  summary: A comprehensive slugging and pretty-URL plugin.
metadata.gz.sig CHANGED
Binary file
@@ -1,28 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../'
4
-
5
- gem 'activerecord', '~> 5.0.0'
6
- gem 'railties', '~> 5.0.0'
7
- gem 'i18n', '~> 0.7.0'
8
-
9
- # Database Configuration
10
- group :development, :test do
11
- platforms :jruby do
12
- gem 'activerecord-jdbcmysql-adapter', '~> 50.1'
13
- gem 'activerecord-jdbcpostgresql-adapter', '~> 50.1'
14
- gem 'kramdown'
15
- end
16
-
17
- platforms :ruby, :rbx do
18
- gem 'sqlite3'
19
- gem 'mysql2'
20
- gem 'pg'
21
- gem 'redcarpet'
22
- end
23
-
24
- platforms :rbx do
25
- gem 'rubysl', '~> 2.0'
26
- gem 'rubinius-developer_tools'
27
- end
28
- end
@@ -1,27 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../'
4
-
5
- gem 'activerecord', '~> 5.1.0'
6
- gem 'railties', '~> 5.1.0'
7
-
8
- # Database Configuration
9
- group :development, :test do
10
- platforms :jruby do
11
- gem 'activerecord-jdbcmysql-adapter', '~> 50.1'
12
- gem 'activerecord-jdbcpostgresql-adapter', '~> 50.1'
13
- gem 'kramdown'
14
- end
15
-
16
- platforms :ruby, :rbx do
17
- gem 'sqlite3'
18
- gem 'mysql2'
19
- gem 'pg'
20
- gem 'redcarpet'
21
- end
22
-
23
- platforms :rbx do
24
- gem 'rubysl', '~> 2.0'
25
- gem 'rubinius-developer_tools'
26
- end
27
- end