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 CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wulffeld_slug (0.0.25)
4
+ wulffeld_slug (0.0.26)
5
5
  activesupport (>= 3.1.0)
6
6
  babosa (>= 0.3.7)
7
7
  wulffeld_slug
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.25
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
- if n.nil?
60
- # There's often a difference between adding a number to a slug where the string is present
61
- # and one where we only have the number for the final slug.
62
- # :blank_loop_start and :blank_loop_chunk helps speed up the looping on blank slugs.
63
- if str_part.blank?
64
- b = slug_config[:blank_loop_start]
65
- else
66
- b = slug_config[:loop_start]
67
- end
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
- last_b = nil
70
- loop do
71
- slug = [str_part, b].reject(&:blank?).join('-')
72
- if slug_unique?(slug) || b < 1
73
- last_b = b
74
- break if b < 1
75
- else
76
- n = last_b
77
- break
78
- end
79
-
80
- if str_part.blank? && slug_config[:blank_loop_chunk] && b - slug_config[:blank_loop_chunk] > slug_config[:blank_loop_chunk]
81
- b -= slug_config[:blank_loop_chunk]
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
@@ -5,5 +5,5 @@ class Article
5
5
  field :title
6
6
  field :author
7
7
 
8
- has_slug :title, :mongo => true
8
+ has_slug :title, :mongo => true, :loop_start => 6, :blank_loop_start => 50, :blank_loop_chunk => 10
9
9
  end
@@ -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
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wulffeld_slug"
8
- s.version = "0.0.25"
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-03"
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