wulffeld_slug 0.0.25 → 0.0.26
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/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
|