friendly_id 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -105,7 +105,7 @@ an example of one way to set this up:
105
105
  # @return Symbol The scope value
106
106
  attr_accessor :scope
107
107
 
108
- # Gets the scope column.
108
+ # Gets the scope columns.
109
109
  #
110
110
  # Checks to see if the +:scope+ option passed to
111
111
  # {FriendlyId::Base#friendly_id} refers to a relation, and if so, returns
@@ -113,19 +113,19 @@ an example of one way to set this up:
113
113
  # the name of column and returns it cast to a String.
114
114
  #
115
115
  # @return String The scope column
116
- def scope_column
117
- (reflection_foreign_key or @scope).to_s
116
+ def scope_columns
117
+ [@scope].flatten.map { |s| (reflection_foreign_key(s) or s).to_s }
118
118
  end
119
119
 
120
120
  private
121
121
 
122
122
  if ActiveRecord::VERSION::STRING < "3.1"
123
- def reflection_foreign_key
124
- model_class.reflections[@scope].try(:primary_key_name)
123
+ def reflection_foreign_key(scope)
124
+ model_class.reflections[scope].try(:primary_key_name)
125
125
  end
126
126
  else
127
- def reflection_foreign_key
128
- model_class.reflections[@scope].try(:foreign_key)
127
+ def reflection_foreign_key(scope)
128
+ model_class.reflections[scope].try(:foreign_key)
129
129
  end
130
130
  end
131
131
  end
@@ -137,8 +137,12 @@ an example of one way to set this up:
137
137
  private
138
138
 
139
139
  def conflict
140
- column = friendly_id_config.scope_column
141
- conflicts.where(column => sluggable.send(column)).first
140
+ columns = friendly_id_config.scope_columns
141
+ matched = columns.inject(conflicts) do |memo, column|
142
+ memo.where(column => sluggable.send(column))
143
+ end
144
+
145
+ matched.first
142
146
  end
143
147
  end
144
148
  end
@@ -4,7 +4,7 @@ module FriendlyId
4
4
 
5
5
  =begin
6
6
 
7
- == Basic I18n
7
+ == Simple I18n
8
8
 
9
9
  The {FriendlyId::SimpleI18n SimpleI18n} module adds very basic i18n support to
10
10
  FriendlyId.
@@ -12,10 +12,7 @@ module FriendlyId
12
12
 
13
13
  # Given a slug, get the next available slug in the sequence.
14
14
  def next
15
- # Don't assume that the separator is unique within the slug
16
- sequence = conflict.to_param.gsub(/^#{Regexp.quote(normalized)}(#{Regexp.quote(separator)})?/, '').to_i
17
- next_sequence = sequence == 0 ? 2 : sequence.next
18
- "#{normalized}#{separator}#{next_sequence}"
15
+ "#{normalized}#{separator}#{next_in_sequence}"
19
16
  end
20
17
 
21
18
  # Generate a new sequenced slug.
@@ -25,6 +22,15 @@ module FriendlyId
25
22
 
26
23
  private
27
24
 
25
+ def next_in_sequence
26
+ last_in_sequence == 0 ? 2 : last_in_sequence.next
27
+ end
28
+
29
+ def last_in_sequence
30
+ # Don't assume that the separator is unique in the slug.
31
+ @_last_in_sequence ||= conflict.to_param.gsub(/^#{Regexp.quote(normalized)}(#{Regexp.quote(separator)})?/, '').to_i
32
+ end
33
+
28
34
  def column
29
35
  sluggable.connection.quote_column_name friendly_id_config.slug_column
30
36
  end
@@ -41,9 +47,11 @@ module FriendlyId
41
47
  end
42
48
 
43
49
  def conflicts
44
- pkey = sluggable.class.primary_key
50
+ sluggable_class = friendly_id_config.model_class
51
+
52
+ pkey = sluggable_class.primary_key
45
53
  value = sluggable.send pkey
46
- scope = sluggable.class.unscoped.where("#{column} = ? OR #{column} LIKE ?", normalized, wildcard)
54
+ scope = sluggable_class.unscoped.where("#{column} = ? OR #{column} LIKE ?", normalized, wildcard)
47
55
  scope = scope.where("#{pkey} <> ?", value) unless sluggable.new_record?
48
56
  scope = scope.order("LENGTH(#{column}) DESC, #{column} DESC")
49
57
  end
data/test/base_test.rb CHANGED
@@ -5,6 +5,7 @@ class CoreTest < MiniTest::Unit::TestCase
5
5
 
6
6
  test "friendly_id should accept a base and a hash" do
7
7
  klass = Class.new(ActiveRecord::Base) do
8
+ self.abstract_class = true
8
9
  extend FriendlyId
9
10
  friendly_id :foo, :use => :slugged, :slug_column => :bar
10
11
  end
@@ -16,6 +17,7 @@ class CoreTest < MiniTest::Unit::TestCase
16
17
 
17
18
  test "friendly_id should accept a block" do
18
19
  klass = Class.new(ActiveRecord::Base) do
20
+ self.abstract_class = true
19
21
  extend FriendlyId
20
22
  friendly_id :foo do |config|
21
23
  config.use :slugged
@@ -30,6 +32,7 @@ class CoreTest < MiniTest::Unit::TestCase
30
32
 
31
33
  test "the block passed to friendly_id should be evaluated before arguments" do
32
34
  klass = Class.new(ActiveRecord::Base) do
35
+ self.abstract_class = true
33
36
  extend FriendlyId
34
37
  friendly_id :foo do |config|
35
38
  config.base = :bar
@@ -44,6 +47,7 @@ class CoreTest < MiniTest::Unit::TestCase
44
47
  config.base = :foo
45
48
  end
46
49
  klass = Class.new(ActiveRecord::Base) do
50
+ self.abstract_class = true
47
51
  extend FriendlyId
48
52
  end
49
53
  assert_equal :foo, klass.friendly_id_config.base
@@ -5,7 +5,9 @@ class ConfigurationTest < MiniTest::Unit::TestCase
5
5
  include FriendlyId::Test
6
6
 
7
7
  def setup
8
- @model_class = Class.new(ActiveRecord::Base)
8
+ @model_class = Class.new(ActiveRecord::Base) do
9
+ self.abstract_class = true
10
+ end
9
11
  end
10
12
 
11
13
  test "should set model class on initialization" do
data/test/core_test.rb CHANGED
@@ -20,7 +20,9 @@ class CoreTest < MiniTest::Unit::TestCase
20
20
  end
21
21
 
22
22
  test "models don't use friendly_id by default" do
23
- assert !Class.new(ActiveRecord::Base).respond_to?(:friendly_id)
23
+ assert !Class.new(ActiveRecord::Base) {
24
+ self.abstract_class = true
25
+ }.respond_to?(:friendly_id)
24
26
  end
25
27
 
26
28
  test "model classes should have a friendly id config" do
@@ -1,6 +1,5 @@
1
1
  require File.expand_path("../helper", __FILE__)
2
2
 
3
- require "test/unit"
4
3
  require "rails/generators"
5
4
  require "generators/friendly_id_generator"
6
5
 
data/test/helper.rb CHANGED
@@ -51,15 +51,6 @@ module FriendlyId
51
51
  driver = FriendlyId::Test::Database.driver
52
52
  engine = RUBY_ENGINE rescue "ruby"
53
53
 
54
- # This hack is needed to get AR 3.1 + JDBC to play nicely together
55
- if version >= "3.1" && engine == "jruby"
56
- if driver == "sqlite3"
57
- puts "Skipping SQLite3 test on JRuby with AR 3.1; it doesn't currently work."
58
- exit 0
59
- end
60
- config.each { |_, value| value["adapter"] = "jdbc" + value["adapter"].gsub(/2\z/, '') }
61
- end
62
-
63
54
  ActiveRecord::Base.establish_connection config[driver]
64
55
  message = "Using #{engine} #{RUBY_VERSION} AR #{version} with #{driver}"
65
56
 
data/test/history_test.rb CHANGED
@@ -15,7 +15,7 @@ class HistoryTest < MiniTest::Unit::TestCase
15
15
  end
16
16
 
17
17
  test "should insert record in slugs table on create" do
18
- with_instance_of(model_class) {|record| assert !record.slugs.empty?}
18
+ with_instance_of(model_class) {|record| assert record.slugs.any?}
19
19
  end
20
20
 
21
21
  test "should not create new slug record if friendly_id is not changed" do
@@ -48,6 +48,17 @@ class HistoryTest < MiniTest::Unit::TestCase
48
48
  end
49
49
  end
50
50
 
51
+ test "should create slug records on each change" do
52
+ transaction do
53
+ record = model_class.create! :name => "hello"
54
+ assert_equal 1, FriendlyId::Slug.count
55
+ record = model_class.find("hello")
56
+ record.name = "hello again"
57
+ record.save!
58
+ assert_equal 2, FriendlyId::Slug.count
59
+ end
60
+ end
61
+
51
62
  test "should not be read only when found by old slug" do
52
63
  with_instance_of(model_class) do |record|
53
64
  old_friendly_id = record.friendly_id
@@ -59,8 +70,10 @@ class HistoryTest < MiniTest::Unit::TestCase
59
70
 
60
71
 
61
72
  test "should raise error if used with scoped" do
62
- model_class = Class.new(ActiveRecord::Base)
63
- model_class.extend FriendlyId
73
+ model_class = Class.new(ActiveRecord::Base) do
74
+ self.abstract_class = true
75
+ extend FriendlyId
76
+ end
64
77
  assert_raises RuntimeError do
65
78
  model_class.friendly_id :name, :use => [:history, :scoped]
66
79
  end
@@ -77,4 +90,36 @@ class HistoryTest < MiniTest::Unit::TestCase
77
90
  end
78
91
  end
79
92
 
93
+ test "should not create new slugs that match old slugs" do
94
+ transaction do
95
+ first_record = model_class.create! :name => "foo"
96
+ first_record.name = "bar"
97
+ first_record.save!
98
+ second_record = model_class.create! :name => "foo"
99
+ assert second_record.slug != "foo"
100
+ assert second_record.slug == "foo--2"
101
+ end
102
+ end
103
+
104
+ test 'should increment the sequence by one for each historic slug' do
105
+ transaction do
106
+ previous_record = model_class.create! :name => "foo"
107
+ first_record = model_class.create! :name => 'another'
108
+ second_record = model_class.create! :name => 'another'
109
+ assert second_record.slug == "another--2"
110
+ end
111
+ end
112
+
113
+ test 'should not fail when updating historic slugs' do
114
+ transaction do
115
+ first_record = model_class.create! :name => "foo"
116
+ second_record = model_class.create! :name => 'another'
117
+
118
+ second_record.update_attributes :name => 'foo'
119
+ assert second_record.slug == "foo--2"
120
+ first_record.update_attributes :name => 'another'
121
+ assert first_record.slug == "another--2"
122
+ end
123
+ end
124
+
80
125
  end
data/test/i18n_test.rb CHANGED
@@ -100,6 +100,7 @@ class I18nTest < MiniTest::Unit::TestCase
100
100
 
101
101
  test "should add locale to non-default slug column and non-default locale" do
102
102
  model_class = Class.new(ActiveRecord::Base) do
103
+ self.abstract_class = true
103
104
  extend FriendlyId
104
105
  friendly_id :name, :use => :simple_i18n, :slug_column => :foo
105
106
  end
@@ -19,8 +19,10 @@ class ObjectUtilsTest < MiniTest::Unit::TestCase
19
19
  end
20
20
 
21
21
  test "ActiveRecord::Base instances should be unfriendly_ids" do
22
- model_class = Class.new(ActiveRecord::Base)
23
- model_class.table_name = "authors"
22
+ model_class = Class.new(ActiveRecord::Base) do
23
+ self.abstract_class = true
24
+ self.table_name = "authors"
25
+ end
24
26
  assert model_class.new.unfriendly_id?
25
27
  end
26
28
  end
data/test/schema.rb CHANGED
@@ -30,6 +30,7 @@ module FriendlyId
30
30
 
31
31
  # This will be used to test scopes
32
32
  add_column :novels, :novelist_id, :integer
33
+ add_column :novels, :publisher_id, :integer
33
34
  remove_index :novels, :slug
34
35
 
35
36
  # This will be used to test column name quoting
@@ -53,7 +54,7 @@ module FriendlyId
53
54
  end
54
55
 
55
56
  def simple_tables
56
- ["authors", "books"]
57
+ ["authors", "books", "publishers"]
57
58
  end
58
59
 
59
60
  def tables
@@ -62,4 +63,4 @@ module FriendlyId
62
63
  end
63
64
  end
64
65
  end
65
- end
66
+ end
data/test/scoped_test.rb CHANGED
@@ -8,7 +8,12 @@ end
8
8
  class Novel < ActiveRecord::Base
9
9
  extend FriendlyId
10
10
  belongs_to :novelist
11
- friendly_id :name, :use => :scoped, :scope => :novelist
11
+ belongs_to :publisher
12
+ friendly_id :name, :use => :scoped, :scope => [:publisher, :novelist]
13
+ end
14
+
15
+ class Publisher < ActiveRecord::Base
16
+ has_many :novels
12
17
  end
13
18
 
14
19
  class ScopedTest < MiniTest::Unit::TestCase
@@ -21,14 +26,16 @@ class ScopedTest < MiniTest::Unit::TestCase
21
26
  end
22
27
 
23
28
  test "should detect scope column from belongs_to relation" do
24
- assert_equal "novelist_id", Novel.friendly_id_config.scope_column
29
+ assert_equal ["publisher_id", "novelist_id"], Novel.friendly_id_config.scope_columns
25
30
  end
26
31
 
27
32
  test "should detect scope column from explicit column name" do
28
- model_class = Class.new(ActiveRecord::Base)
29
- model_class.extend FriendlyId
30
- model_class.friendly_id :empty, :use => :scoped, :scope => :dummy
31
- assert_equal "dummy", model_class.friendly_id_config.scope_column
33
+ model_class = Class.new(ActiveRecord::Base) do
34
+ self.abstract_class = true
35
+ extend FriendlyId
36
+ friendly_id :empty, :use => :scoped, :scope => :dummy
37
+ end
38
+ assert_equal ["dummy"], model_class.friendly_id_config.scope_columns
32
39
  end
33
40
 
34
41
  test "should allow duplicate slugs outside scope" do
@@ -48,10 +55,29 @@ class ScopedTest < MiniTest::Unit::TestCase
48
55
  end
49
56
 
50
57
  test "should raise error if used with history" do
51
- model_class = Class.new(ActiveRecord::Base)
52
- model_class.extend FriendlyId
58
+ model_class = Class.new(ActiveRecord::Base) do
59
+ self.abstract_class = true
60
+ extend FriendlyId
61
+ end
62
+
53
63
  assert_raises RuntimeError do
54
64
  model_class.friendly_id :name, :use => [:scoped, :history]
55
65
  end
56
66
  end
57
- end
67
+
68
+ test "should apply scope with multiple columns" do
69
+ transaction do
70
+ novelist = Novelist.create! :name => "a"
71
+ publisher = Publisher.create! :name => "b"
72
+
73
+ novel1 = Novel.create! :name => "c", :novelist => novelist, :publisher => publisher
74
+ novel2 = Novel.create! :name => "c", :novelist => novelist, :publisher => Publisher.create(:name => "d")
75
+ novel3 = Novel.create! :name => "c", :novelist => Novelist.create(:name => "e"), :publisher => publisher
76
+ novel4 = Novel.create! :name => "c", :novelist => novelist, :publisher => publisher
77
+
78
+ assert_equal novel1.friendly_id, novel2.friendly_id
79
+ assert_equal novel2.friendly_id, novel3.friendly_id
80
+ assert novel3.friendly_id != novel4.friendly_id
81
+ end
82
+ end
83
+ end
data/test/slugged_test.rb CHANGED
@@ -78,10 +78,13 @@ class SlugGeneratorTest < MiniTest::Unit::TestCase
78
78
  end
79
79
 
80
80
  test "should quote column names" do
81
- model_class = Class.new(ActiveRecord::Base)
82
- model_class.table_name = "journalists"
83
- model_class.extend FriendlyId
84
- model_class.friendly_id :name, :use => :slugged, :slug_column => "strange name"
81
+ model_class = Class.new(ActiveRecord::Base) do
82
+ self.abstract_class = true
83
+ self.table_name = "journalists"
84
+ extend FriendlyId
85
+ friendly_id :name, :use => :slugged, :slug_column => "strange name"
86
+ end
87
+
85
88
  begin
86
89
  with_instance_of(model_class) {|record| assert model_class.find(record.friendly_id)}
87
90
  rescue ActiveRecord::StatementInvalid
data/test/sti_test.rb CHANGED
@@ -20,6 +20,7 @@ class StiTest < MiniTest::Unit::TestCase
20
20
 
21
21
  test "friendly_id should accept a base and a hash with single table inheritance" do
22
22
  abstract_klass = Class.new(ActiveRecord::Base) do
23
+ def self.table_exists?; false end
23
24
  extend FriendlyId
24
25
  friendly_id :foo, :use => :slugged, :slug_column => :bar
25
26
  end
@@ -29,9 +30,9 @@ class StiTest < MiniTest::Unit::TestCase
29
30
  assert_equal :bar, klass.friendly_id_config.slug_column
30
31
  end
31
32
 
32
-
33
33
  test "friendly_id should accept a block with single table inheritance" do
34
34
  abstract_klass = Class.new(ActiveRecord::Base) do
35
+ def self.table_exists?; false end
35
36
  extend FriendlyId
36
37
  friendly_id :foo do |config|
37
38
  config.use :slugged
@@ -45,4 +46,12 @@ class StiTest < MiniTest::Unit::TestCase
45
46
  assert_equal :bar, klass.friendly_id_config.slug_column
46
47
  end
47
48
 
48
- end
49
+ test "friendly_id slugs should not clash with eachother" do
50
+ journalist = Journalist.create! :name => 'foo bar'
51
+ editoralist = Editorialist.create! :name => 'foo bar'
52
+
53
+ assert_equal 'foo-bar', journalist.slug
54
+ assert_equal 'foo-bar--2', editoralist.slug
55
+ end
56
+
57
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,110 +9,99 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-27 00:00:00.000000000 Z
12
+ date: 2012-02-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70322990492320 !ruby/object:Gem::Requirement
16
+ requirement: &70170127893680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.1.0
21
+ version: 3.2.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70322990492320
24
+ version_requirements: *70170127893680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activerecord
27
- requirement: &70322990491640 !ruby/object:Gem::Requirement
27
+ requirement: &70170127892900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 3.1.0
32
+ version: 3.2.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70322990491640
36
- - !ruby/object:Gem::Dependency
37
- name: sqlite3
38
- requirement: &70322990490880 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: 1.3.4
44
- type: :development
45
- prerelease: false
46
- version_requirements: *70322990490880
35
+ version_requirements: *70170127892900
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: minitest
49
- requirement: &70322990489960 !ruby/object:Gem::Requirement
38
+ requirement: &70170127892400 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
- - - ~>
41
+ - - ! '>='
53
42
  - !ruby/object:Gem::Version
54
- version: 2.4.0
43
+ version: '0'
55
44
  type: :development
56
45
  prerelease: false
57
- version_requirements: *70322990489960
46
+ version_requirements: *70170127892400
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: mocha
60
- requirement: &70322990489120 !ruby/object:Gem::Requirement
49
+ requirement: &70170127891740 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
- - - ~>
52
+ - - ! '>='
64
53
  - !ruby/object:Gem::Version
65
- version: 0.9.12
54
+ version: '0'
66
55
  type: :development
67
56
  prerelease: false
68
- version_requirements: *70322990489120
57
+ version_requirements: *70170127891740
69
58
  - !ruby/object:Gem::Dependency
70
- name: ffaker
71
- requirement: &70322990487800 !ruby/object:Gem::Requirement
59
+ name: maruku
60
+ requirement: &70170127891160 !ruby/object:Gem::Requirement
72
61
  none: false
73
62
  requirements:
74
- - - ~>
63
+ - - ! '>='
75
64
  - !ruby/object:Gem::Version
76
- version: 1.8.0
65
+ version: '0'
77
66
  type: :development
78
67
  prerelease: false
79
- version_requirements: *70322990487800
68
+ version_requirements: *70170127891160
80
69
  - !ruby/object:Gem::Dependency
81
- name: maruku
82
- requirement: &70322990507280 !ruby/object:Gem::Requirement
70
+ name: yard
71
+ requirement: &70170127890460 !ruby/object:Gem::Requirement
83
72
  none: false
84
73
  requirements:
85
- - - ~>
74
+ - - ! '>='
86
75
  - !ruby/object:Gem::Version
87
- version: 0.6.0
76
+ version: '0'
88
77
  type: :development
89
78
  prerelease: false
90
- version_requirements: *70322990507280
79
+ version_requirements: *70170127890460
91
80
  - !ruby/object:Gem::Dependency
92
- name: yard
93
- requirement: &70322990506220 !ruby/object:Gem::Requirement
81
+ name: i18n
82
+ requirement: &70170127889980 !ruby/object:Gem::Requirement
94
83
  none: false
95
84
  requirements:
96
- - - ~>
85
+ - - ! '>='
97
86
  - !ruby/object:Gem::Version
98
- version: 0.7.2
87
+ version: '0'
99
88
  type: :development
100
89
  prerelease: false
101
- version_requirements: *70322990506220
90
+ version_requirements: *70170127889980
102
91
  - !ruby/object:Gem::Dependency
103
- name: i18n
104
- requirement: &70322990504860 !ruby/object:Gem::Requirement
92
+ name: ffaker
93
+ requirement: &70170127889500 !ruby/object:Gem::Requirement
105
94
  none: false
106
95
  requirements:
107
- - - ~>
96
+ - - ! '>='
108
97
  - !ruby/object:Gem::Version
109
- version: 0.6.0
98
+ version: '0'
110
99
  type: :development
111
100
  prerelease: false
112
- version_requirements: *70322990504860
101
+ version_requirements: *70170127889500
113
102
  - !ruby/object:Gem::Dependency
114
103
  name: simplecov
115
- requirement: &70322990503800 !ruby/object:Gem::Requirement
104
+ requirement: &70170127888840 !ruby/object:Gem::Requirement
116
105
  none: false
117
106
  requirements:
118
107
  - - ! '>='
@@ -120,13 +109,13 @@ dependencies:
120
109
  version: '0'
121
110
  type: :development
122
111
  prerelease: false
123
- version_requirements: *70322990503800
112
+ version_requirements: *70170127888840
124
113
  description: ! 'FriendlyId is the "Swiss Army bulldozer" of slugging and permalink
125
114
  plugins for
126
115
 
127
- Ruby on Rails. It allows you to create pretty URL''s and work with
116
+ Ruby on Rails. It allows you to create pretty URLs and work with human-friendly
128
117
 
129
- human-friendly strings as if they were numeric ids for ActiveRecord models.
118
+ strings as if they were numeric ids for Active Record models.
130
119
 
131
120
  '
132
121
  email:
@@ -155,6 +144,7 @@ files:
155
144
  - lib/friendly_id/base.rb
156
145
  - lib/friendly_id/configuration.rb
157
146
  - lib/friendly_id/finder_methods.rb
147
+ - lib/friendly_id/globalize.rb
158
148
  - lib/friendly_id/history.rb
159
149
  - lib/friendly_id/migration.rb
160
150
  - lib/friendly_id/object_utils.rb
@@ -185,7 +175,7 @@ files:
185
175
  - test/shared.rb
186
176
  - test/slugged_test.rb
187
177
  - test/sti_test.rb
188
- homepage: http://norman.github.com/friendly_id
178
+ homepage: http://github.com/norman/friendly_id
189
179
  licenses: []
190
180
  post_install_message: ! 'NOTE: FriendlyId 4.x breaks compatibility with 3.x. If you''re
191
181
  upgrading
@@ -214,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
204
  version: '0'
215
205
  requirements: []
216
206
  rubyforge_project: friendly_id
217
- rubygems_version: 1.8.10
207
+ rubygems_version: 1.8.11
218
208
  signing_key:
219
209
  specification_version: 3
220
210
  summary: A comprehensive slugging and pretty-URL plugin.