mongoid_slug 0.2.0 → 0.2.1

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/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Mongoid Slug
2
2
 
3
- This gem generates a URL slug/permalink based on a field or set of fields in a Mongoid model.
3
+ This gem generates a URL slug/permalink based on fields in a Mongoid model.
4
4
 
5
5
  class Book
6
6
  include Mongoid::Document
data/lib/mongoid_slug.rb CHANGED
@@ -1,16 +1,16 @@
1
- # Generates a URL slug/permalink based on a field in a Mongoid model.
1
+ # Generates a URL slug/permalink based on fields in a Mongoid model.
2
2
  module Mongoid::Slug
3
3
 
4
- def self.included(base)
4
+ def self.included(base) #:nodoc:
5
5
  base.extend ClassMethods
6
6
  base.class_eval { field :slug; before_save :slugify }
7
7
  end
8
8
 
9
9
  module ClassMethods #:nodoc:
10
10
 
11
- # Set a field as source of slug
12
- def slug(*field)
13
- class_variable_set(:@@slugged_fields, field)
11
+ # Set a field or a number of fields as source of slug
12
+ def slug(*fields)
13
+ class_variable_set(:@@slugged, fields)
14
14
  end
15
15
 
16
16
  def find_by_slug(slug)
@@ -29,18 +29,19 @@ module Mongoid::Slug
29
29
  private
30
30
 
31
31
  def slugify
32
- self.slug = find_unique_slug if new_record? || slugged_fields_changed?
32
+ self.slug = find_unique_slug if new_record? || slugged_changed?
33
33
  end
34
34
 
35
- def slugged_fields_changed?
36
- self.class.class_eval('@@slugged_fields').any? do |field|
35
+ def slugged_changed?
36
+ self.class.class_eval('@@slugged').any? do |field|
37
37
  self.send(field.to_s + '_changed?')
38
38
  end
39
39
  end
40
40
 
41
41
  def find_unique_slug(suffix='')
42
42
  slug = ("#{slug_base} #{suffix}").parameterize
43
- if (embedded? ? self._parent.collection.find("#{self.class.to_s.downcase.pluralize}.slug" => slug) : collection.find(:slug => slug)).count == 0
43
+ if (embedded? ? _parent.collection.find("#{self.class.to_s.downcase.pluralize}.slug" => slug) : collection.find(:slug => slug)).
44
+ to_a.reject{ |doc| doc.id == self.id }.count == 0
44
45
  slug
45
46
  else
46
47
  new_suffix = suffix.blank? ? '1' : "#{suffix.to_i + 1}"
@@ -49,6 +50,6 @@ module Mongoid::Slug
49
50
  end
50
51
 
51
52
  def slug_base
52
- self.class.class_eval('@@slugged_fields').collect{ |field| self.send(field) }.join(" ")
53
+ self.class.class_eval('@@slugged').collect{ |field| self.send(field) }.join(" ")
53
54
  end
54
55
  end
@@ -6,7 +6,7 @@ describe Mongoid::Slug do
6
6
  @book = Book.create(:title => "A Thousand Plateaus", :isbn => "9789245242475")
7
7
  end
8
8
 
9
- context "root" do
9
+ context "root document" do
10
10
 
11
11
  it "generates slug" do
12
12
  @book.to_param.should eql @book.title.parameterize
@@ -31,10 +31,16 @@ describe Mongoid::Slug do
31
31
  @book.slug.should_not match /\d$/
32
32
  end
33
33
 
34
- it "does not update slug if slugged field has not changed" do
35
- existing_slug = @book.slug
36
- @book.update_attributes('isbn' => "9785545858118")
37
- @book.slug.should eql existing_slug
34
+ it "does not update slug if slugged fields have not changed" do
35
+ former_slug = @book.slug
36
+ @book.update_attributes(:isbn => "9785545858118")
37
+ @book.slug.should eql former_slug
38
+ end
39
+
40
+ it "does not update slug if slugged fields have changed but generated slug is the same" do
41
+ former_slug = @book.slug
42
+ @book.update_attributes(:title => "A thousand plateaus")
43
+ @book.slug.should eql former_slug
38
44
  end
39
45
 
40
46
  context ".find_by_slug" do
@@ -75,9 +81,9 @@ describe Mongoid::Slug do
75
81
  end
76
82
 
77
83
  it "does not update slug if slugged field has not changed" do
78
- existing_slug = @subject.slug
84
+ former_slug = @subject.slug
79
85
  @subject.update_attributes(:description => "Lorem ipsum dolor sit amet")
80
- @subject.slug.should eql existing_slug
86
+ @subject.slug.should eql former_slug
81
87
  end
82
88
 
83
89
  context ".find_by_slug" do
@@ -108,14 +114,14 @@ describe Mongoid::Slug do
108
114
  end
109
115
 
110
116
  it "does not update slug if slugged field has not changed" do
111
- existing_slug = @publisher.slug
117
+ former_slug = @publisher.slug
112
118
  @publisher.update_attributes(:year => 2001)
113
- @publisher.slug.should eql existing_slug
119
+ @publisher.slug.should eql former_slug
114
120
  end
115
121
 
116
122
  end
117
123
 
118
- context "slugging composite fields" do
124
+ context "composite fields" do
119
125
  before(:each) do
120
126
  @author = Author.create(:first_name => "Gilles", :last_name => "Deleuze")
121
127
  end
metadata CHANGED
@@ -1,21 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_slug
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Hakan Ensari
14
+ - Gerhard Lazu
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-06-24 00:00:00 +01:00
19
+ date: 2010-06-29 00:00:00 +01:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
@@ -35,7 +36,7 @@ dependencies:
35
36
  version: 2.0.0.beta7
36
37
  type: :runtime
37
38
  version_requirements: *id001
38
- description: Mongoid Slug generates a URL slug/permalink based on a field in a Mongoid model.
39
+ description: Mongoid Slug generates a URL slug/permalink based on fields in a Mongoid model.
39
40
  email: code@papercavalier.com
40
41
  executables: []
41
42
 
@@ -52,8 +53,8 @@ files:
52
53
  - spec/models/book.rb
53
54
  - spec/models/publisher.rb
54
55
  - spec/models/subject.rb
56
+ - spec/mongoid_slug_spec.rb
55
57
  - spec/spec_helper.rb
56
- - spec/unit/mongoid_slug_spec.rb
57
58
  has_rdoc: true
58
59
  homepage: http://github.com/papercavalier/mongoid-slug
59
60
  licenses: []
@@ -93,5 +94,5 @@ test_files:
93
94
  - spec/models/book.rb
94
95
  - spec/models/publisher.rb
95
96
  - spec/models/subject.rb
97
+ - spec/mongoid_slug_spec.rb
96
98
  - spec/spec_helper.rb
97
- - spec/unit/mongoid_slug_spec.rb