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 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