diff --git a/lib/friendly_id/slug_generator.rb b/lib/friendly_id/slug_generator.rb index 4c2e5c5c..1dd73fce 100644 --- a/lib/friendly_id/slug_generator.rb +++ b/lib/friendly_id/slug_generator.rb @@ -28,11 +28,8 @@ def generate(candidates) def purely_numeric_slug?(slug) return false unless slug - begin - Integer(slug, 10).to_s == slug.to_s - rescue ArgumentError, TypeError - false - end + + slug.to_s.match?(/\A[0-9]+\z/) end end end diff --git a/test/numeric_slug_test.rb b/test/numeric_slug_test.rb index 982dab12..2c0df018 100644 --- a/test/numeric_slug_test.rb +++ b/test/numeric_slug_test.rb @@ -2,12 +2,14 @@ class Article < ActiveRecord::Base extend FriendlyId + friendly_id :name, use: :slugged end class ArticleWithNumericPrevention < ActiveRecord::Base self.table_name = "articles" extend FriendlyId + friendly_id :name, use: :slugged friendly_id_config.treat_numeric_as_conflict = true end @@ -71,6 +73,14 @@ def model_class end end + test "should handle numbers with leading zeroes as numeric when treat_numeric_as_conflict is enabled" do + transaction do + record = ArticleWithNumericPrevention.create! name: "00123" + refute_equal "00123", record.slug + assert_match(/\A00123-[0-9a-f-]{36}\z/, record.slug) + end + end + test "should handle large numbers as numeric when treat_numeric_as_conflict is enabled" do transaction do record = ArticleWithNumericPrevention.create! name: "999999999"