wulffeld_slug 0.0.25 → 0.0.26
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/lib/wulffeld_slug/slug_include.rb +29 -28
- data/spec/app/models/article.rb +1 -1
- data/spec/lib/slug_spec.rb +24 -0
- data/wulffeld_slug.gemspec +44 -2
- metadata +519 -365
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.26
|
@@ -56,36 +56,37 @@ module WulffeldSlug
|
|
56
56
|
return slug if !slug.blank? && slug_unique?(slug)
|
57
57
|
|
58
58
|
# First loop we do some optimistic searching.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
n ||= find_n_optimistically(str_part) || 0
|
60
|
+
n += 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def find_n_optimistically(str_part)
|
65
|
+
# There's often a difference between adding a number to a slug where the string is present
|
66
|
+
# and one where we only have the number for the final slug.
|
67
|
+
# :blank_loop_start and :blank_loop_chunk helps speed up the looping on blank slugs.
|
68
|
+
if str_part.blank?
|
69
|
+
b = slug_config[:blank_loop_start]
|
70
|
+
else
|
71
|
+
b = slug_config[:loop_start]
|
72
|
+
end
|
73
|
+
|
74
|
+
last_used_postfix = nil
|
68
75
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
else
|
83
|
-
b /= 2
|
84
|
-
end
|
85
|
-
end
|
76
|
+
loop do
|
77
|
+
slug = [str_part, b].reject(&:blank?).join('-')
|
78
|
+
if slug_unique?(slug) || b < 1
|
79
|
+
# No postfixes used yet.
|
80
|
+
return 0 if b < 1
|
81
|
+
else
|
82
|
+
return b
|
83
|
+
end
|
84
|
+
|
85
|
+
if str_part.blank? && slug_config[:blank_loop_chunk] && b - slug_config[:blank_loop_chunk] > slug_config[:blank_loop_chunk]
|
86
|
+
b -= slug_config[:blank_loop_chunk]
|
87
|
+
else
|
88
|
+
b /= 2
|
86
89
|
end
|
87
|
-
n ||= 0
|
88
|
-
n += 1
|
89
90
|
end
|
90
91
|
end
|
91
92
|
end
|
data/spec/app/models/article.rb
CHANGED
data/spec/lib/slug_spec.rb
CHANGED
@@ -40,6 +40,30 @@ describe 'WulffeldSlug' do
|
|
40
40
|
article.valid?
|
41
41
|
article.slug.should == "the-shawshank-redemption"
|
42
42
|
end
|
43
|
+
|
44
|
+
describe ":blank_loop_start and :blank_loop_chunk options" do
|
45
|
+
it "should generate correct slugs with a blank string part" do
|
46
|
+
71.times do |i|
|
47
|
+
Article.create!(:title => "하")
|
48
|
+
end
|
49
|
+
a = Article.create!(:title => "하")
|
50
|
+
a.save!
|
51
|
+
a.slug.should == '72'
|
52
|
+
|
53
|
+
Article.all.map(&:slug).sort.should == 72.times.map { |i| "#{i + 1}"}.sort
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should generate correct slugs with a blank string part" do
|
57
|
+
21.times do |i|
|
58
|
+
Article.create!(:title => "하")
|
59
|
+
end
|
60
|
+
a = Article.create!(:title => "하")
|
61
|
+
a.save!
|
62
|
+
a.slug.should == '22'
|
63
|
+
|
64
|
+
Article.all.map(&:slug).sort.should == 22.times.map { |i| "#{i + 1}"}.sort
|
65
|
+
end
|
66
|
+
end
|
43
67
|
end
|
44
68
|
|
45
69
|
context "dynamic slug fields" do
|
data/wulffeld_slug.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wulffeld_slug"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.26"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Martin Moen Wulffeld"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-04"
|
13
13
|
s.description = ""
|
14
14
|
s.email = "martin@wulffeld.org"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -223,6 +223,20 @@ Gem::Specification.new do |s|
|
|
223
223
|
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
224
224
|
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
225
225
|
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
226
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
227
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
228
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
229
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
230
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
231
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
232
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
233
|
+
s.add_development_dependency(%q<mongoid>, ["= 2.2.0"])
|
234
|
+
s.add_development_dependency(%q<bson>, ["= 1.3.0"])
|
235
|
+
s.add_development_dependency(%q<bson_ext>, ["= 1.3.0"])
|
236
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.21"])
|
237
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.2"])
|
238
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.8"])
|
239
|
+
s.add_development_dependency(%q<rspec>, [">= 2.7.0"])
|
226
240
|
s.add_runtime_dependency(%q<babosa>, [">= 0.3.7"])
|
227
241
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.1.0"])
|
228
242
|
else
|
@@ -405,6 +419,20 @@ Gem::Specification.new do |s|
|
|
405
419
|
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
406
420
|
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
407
421
|
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
422
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
423
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
424
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
425
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
426
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
427
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
428
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
429
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
430
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
431
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
432
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
433
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
434
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
435
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
408
436
|
s.add_dependency(%q<babosa>, [">= 0.3.7"])
|
409
437
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
410
438
|
end
|
@@ -588,6 +616,20 @@ Gem::Specification.new do |s|
|
|
588
616
|
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
589
617
|
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
590
618
|
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
619
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
620
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
621
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
622
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
623
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
624
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
625
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
626
|
+
s.add_dependency(%q<mongoid>, ["= 2.2.0"])
|
627
|
+
s.add_dependency(%q<bson>, ["= 1.3.0"])
|
628
|
+
s.add_dependency(%q<bson_ext>, ["= 1.3.0"])
|
629
|
+
s.add_dependency(%q<bundler>, [">= 1.0.21"])
|
630
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.2"])
|
631
|
+
s.add_dependency(%q<rdoc>, [">= 3.8"])
|
632
|
+
s.add_dependency(%q<rspec>, [">= 2.7.0"])
|
591
633
|
s.add_dependency(%q<babosa>, [">= 0.3.7"])
|
592
634
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
593
635
|
end
|