friendly_id 2.2.7 → 2.3.0

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.
Files changed (73) hide show
  1. data/Changelog.md +225 -0
  2. data/Contributors.md +28 -0
  3. data/Guide.md +509 -0
  4. data/LICENSE +1 -1
  5. data/README.md +76 -0
  6. data/Rakefile +48 -15
  7. data/extras/bench.rb +59 -0
  8. data/extras/extras.rb +31 -0
  9. data/extras/prof.rb +14 -0
  10. data/extras/template-gem.rb +1 -1
  11. data/extras/template-plugin.rb +1 -1
  12. data/generators/friendly_id/friendly_id_generator.rb +1 -1
  13. data/generators/friendly_id/templates/create_slugs.rb +2 -2
  14. data/lib/friendly_id.rb +54 -63
  15. data/lib/friendly_id/active_record2.rb +47 -0
  16. data/lib/friendly_id/active_record2/configuration.rb +66 -0
  17. data/lib/friendly_id/active_record2/finders.rb +140 -0
  18. data/lib/friendly_id/active_record2/simple_model.rb +162 -0
  19. data/lib/friendly_id/active_record2/slug.rb +111 -0
  20. data/lib/friendly_id/active_record2/slugged_model.rb +317 -0
  21. data/lib/friendly_id/active_record2/tasks.rb +66 -0
  22. data/lib/friendly_id/active_record2/tasks/friendly_id.rake +19 -0
  23. data/lib/friendly_id/configuration.rb +132 -0
  24. data/lib/friendly_id/finders.rb +106 -0
  25. data/lib/friendly_id/slug_string.rb +292 -0
  26. data/lib/friendly_id/slugged.rb +91 -0
  27. data/lib/friendly_id/status.rb +35 -0
  28. data/lib/friendly_id/test.rb +168 -0
  29. data/lib/friendly_id/version.rb +5 -5
  30. data/rails/init.rb +2 -0
  31. data/test/active_record2/basic_slugged_model_test.rb +14 -0
  32. data/test/active_record2/cached_slug_test.rb +61 -0
  33. data/test/active_record2/core.rb +93 -0
  34. data/test/active_record2/custom_normalizer_test.rb +20 -0
  35. data/test/active_record2/custom_table_name_test.rb +22 -0
  36. data/test/active_record2/scoped_model_test.rb +111 -0
  37. data/test/active_record2/simple_test.rb +59 -0
  38. data/test/active_record2/slug_test.rb +34 -0
  39. data/test/active_record2/slugged.rb +30 -0
  40. data/test/active_record2/slugged_status_test.rb +61 -0
  41. data/test/active_record2/sti_test.rb +22 -0
  42. data/test/active_record2/support/database.mysql.yml +4 -0
  43. data/test/{support/database.yml.postgres → active_record2/support/database.postgres.yml} +0 -0
  44. data/test/{support/database.yml.sqlite3 → active_record2/support/database.sqlite3.yml} +0 -0
  45. data/test/{support → active_record2/support}/models.rb +28 -0
  46. data/test/active_record2/tasks_test.rb +82 -0
  47. data/test/active_record2/test_helper.rb +107 -0
  48. data/test/friendly_id_test.rb +23 -0
  49. data/test/slug_string_test.rb +74 -0
  50. data/test/test_helper.rb +7 -102
  51. metadata +64 -56
  52. data/History.txt +0 -194
  53. data/README.rdoc +0 -385
  54. data/generators/friendly_id_20_upgrade/friendly_id_20_upgrade_generator.rb +0 -12
  55. data/generators/friendly_id_20_upgrade/templates/upgrade_friendly_id_to_20.rb +0 -19
  56. data/init.rb +0 -1
  57. data/lib/friendly_id/helpers.rb +0 -12
  58. data/lib/friendly_id/non_sluggable_class_methods.rb +0 -34
  59. data/lib/friendly_id/non_sluggable_instance_methods.rb +0 -45
  60. data/lib/friendly_id/slug.rb +0 -98
  61. data/lib/friendly_id/sluggable_class_methods.rb +0 -110
  62. data/lib/friendly_id/sluggable_instance_methods.rb +0 -161
  63. data/lib/friendly_id/tasks.rb +0 -56
  64. data/lib/tasks/friendly_id.rake +0 -25
  65. data/lib/tasks/friendly_id.rb +0 -1
  66. data/test/cached_slug_test.rb +0 -109
  67. data/test/custom_slug_normalizer_test.rb +0 -36
  68. data/test/non_slugged_test.rb +0 -99
  69. data/test/scoped_model_test.rb +0 -64
  70. data/test/slug_test.rb +0 -105
  71. data/test/slugged_model_test.rb +0 -348
  72. data/test/sti_test.rb +0 -49
  73. data/test/tasks_test.rb +0 -105
@@ -0,0 +1,23 @@
1
+ require(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ module FriendlyId
4
+
5
+ module Test
6
+
7
+ class FriendlyIdTest < ::Test::Unit::TestCase
8
+
9
+ test "should parse a friendly_id name and sequence" do
10
+ assert_equal ["test", "2"], "test--2".parse_friendly_id
11
+ end
12
+
13
+ test "should parse with a default sequence of 1" do
14
+ assert_equal ["test", "1"], "test".parse_friendly_id
15
+ end
16
+
17
+ test "should be parseable with a custom separator" do
18
+ assert_equal ["test", "2"], "test:2".parse_friendly_id(":")
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+ require(File.dirname(__FILE__) + "/test_helper")
3
+
4
+ module FriendlyId
5
+ module Test
6
+
7
+ class SlugStringTest < ::Test::Unit::TestCase
8
+
9
+ test "should approximate ascii" do
10
+ # create string with range of Unicode"s western characters with
11
+ # diacritics, excluding the division and multiplication signs which for
12
+ # some reason or other are floating in the middle of all the letters.
13
+ s = SlugString.new((0xC0..0x17E).to_a.reject {|c| [0xD7, 0xF7].include? c}.pack("U*"))
14
+ output = s.approximate_ascii
15
+ assert(output.length > s.length)
16
+ assert_match output, /^[a-zA-Z']*$/
17
+ end
18
+
19
+ test "should strip non-word chars" do
20
+ s = SlugString.new "¡feliz año!"
21
+ assert_equal "feliz año", s.word_chars
22
+ end
23
+
24
+ test "should lowercase strings" do
25
+ assert_equal "feliz año", SlugString.new("FELIZ AÑO").downcase
26
+ end
27
+
28
+ test "should uppercase strings" do
29
+ assert_equal "FELIZ AÑO", SlugString.new("feliz año").upcase
30
+ end
31
+
32
+ test "should replace whitespace with dashes" do
33
+ assert_equal "a-b", SlugString.new("a b").clean.with_dashes
34
+ end
35
+
36
+ test "should replace multiple spaces with 1 dash" do
37
+ assert_equal "a-b", SlugString.new("a b").clean.with_dashes
38
+ end
39
+
40
+ test "should strip trailing space" do
41
+ assert_equal "ab", SlugString.new("ab ").clean
42
+ end
43
+
44
+ test "should strip leading space" do
45
+ assert_equal "ab", SlugString.new(" ab").clean
46
+ end
47
+
48
+ test "should strip trailing slashes" do
49
+ assert_equal "ab", SlugString.new("ab-").clean
50
+ end
51
+
52
+ test "should strip leading slashes" do
53
+ assert_equal "ab", SlugString.new("-ab").clean
54
+ end
55
+
56
+ test "should not modify valid name strings" do
57
+ assert_equal "a-b-c-d", SlugString.new("a-b-c-d").clean
58
+ end
59
+
60
+ test "should do special approximations for German" do
61
+ assert_equal "Juergen", SlugString.new("Jürgen").approximate_ascii(:german)
62
+ end
63
+
64
+ test "should do special approximations for Spanish" do
65
+ assert_equal "anno", SlugString.new("año").approximate_ascii(:spanish)
66
+ end
67
+
68
+ test "should work with non roman chars" do
69
+ assert_equal "検-索", SlugString.new("検 索").with_dashes
70
+ end
71
+
72
+ end
73
+ end
74
+ end
data/test/test_helper.rb CHANGED
@@ -1,104 +1,9 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib')
2
- $:.unshift(File.dirname(__FILE__))
3
-
4
- $KCODE = 'UTF8' if RUBY_VERSION < '1.9'
1
+ $KCODE = "UTF8" if RUBY_VERSION < "1.9"
5
2
  $VERBOSE = false
6
3
 
7
- require 'rubygems'
8
- require 'test/unit'
9
- require 'contest'
10
- require 'mocha'
11
-
12
- # You can use "rake test AR_VERSION=2.2.3" to test against 2.2.3 for example.
13
- # The default is to use the latest installed ActiveRecord.
14
- if ENV["AR_VERSION"]
15
- gem 'activerecord', "#{ENV["AR_VERSION"]}"
16
- gem 'activesupport', "#{ENV["AR_VERSION"]}"
17
- end
18
-
19
- require 'active_record'
20
- require 'active_support'
21
- require 'friendly_id'
22
- require File.dirname(__FILE__) + '/../generators/friendly_id/templates/create_slugs'
23
- require File.dirname(__FILE__) + '/support/models'
24
-
25
- local_db_settings = File.dirname(__FILE__) + '/support/database.yml'
26
- default_db_settings = File.dirname(__FILE__) + '/support/database.yml.sqlite3'
27
- db_settings = File.exists?(local_db_settings) ? local_db_settings : default_db_settings
28
- ActiveRecord::Base.establish_connection(YAML::load(File.open(db_settings)))
29
-
30
- class ActiveRecord::Base
31
- def log_protected_attribute_removal(*args) end
32
- end
33
-
34
- ActiveRecord::Base.connection.tables.each do |table|
35
- ActiveRecord::Base.connection.drop_table(table)
36
- end
37
- ActiveRecord::Migration.verbose = false
38
- CreateSlugs.up
39
- CreateSupportModels.up
40
-
41
- # A model that uses the automagically configured "cached_slug" column
42
- class District < ActiveRecord::Base
43
- has_friendly_id :name, :use_slug => true
44
- end
45
-
46
- # A model that specifies a custom cached slug column
47
- class City < ActiveRecord::Base
48
- attr_accessible :name
49
- has_friendly_id :name, :use_slug => true, :cache_column => 'my_slug'
50
- end
51
-
52
- # A model with a custom slug text normalizer
53
- class Person < ActiveRecord::Base
54
- has_friendly_id :name, :use_slug => true do |text|
55
- text.upcase
56
- end
57
- end
58
-
59
- # A slugged model that uses a scope
60
- class Resident < ActiveRecord::Base
61
- belongs_to :country
62
- has_friendly_id :name, :use_slug => true, :scope => :country
63
- end
64
-
65
- # A model used as a scope
66
- class Country < ActiveRecord::Base
67
- has_many :people
68
- has_friendly_id :name, :use_slug => true
69
- end
70
-
71
- # A model that doesn't use slugs
72
- class User < ActiveRecord::Base
73
- has_friendly_id :name
74
- end
75
-
76
- # A model that uses default slug settings and has a named scope
77
- class Post < ActiveRecord::Base
78
- has_friendly_id :name, :use_slug => true
79
- named_scope :published, :conditions => { :published => true }
80
- end
81
-
82
- # Model that uses a custom table name
83
- class Place < ActiveRecord::Base
84
- self.table_name = "legacy_table"
85
- has_friendly_id :name, :use_slug => true
86
- end
87
-
88
- # A model that uses a datetime field for its friendly_id
89
- class Event < ActiveRecord::Base
90
- has_friendly_id :event_date, :use_slug => true
91
- end
92
-
93
- # A base model for single table inheritence
94
- class Book < ActiveRecord::Base ; end
95
-
96
- # A model that uses STI
97
- class Novel < ::Book
98
- has_friendly_id :name, :use_slug => true
99
- end
100
-
101
- # A model with no table
102
- class Question < ActiveRecord::Base
103
- has_friendly_id :name, :use_slug => true
104
- end
4
+ require "rubygems"
5
+ require "test/unit"
6
+ require "mocha"
7
+ require "active_support"
8
+ require File.dirname(__FILE__) + "/../lib/friendly_id"
9
+ require File.dirname(__FILE__) + "/../lib/friendly_id/test"
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: 2.2.7
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-12-16 00:00:00 -03:00
14
+ date: 2010-02-04 00:00:00 -03:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -22,7 +22,7 @@ dependencies:
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 2.2.3
25
+ version: "2.2"
26
26
  version:
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
@@ -32,19 +32,9 @@ dependencies:
32
32
  requirements:
33
33
  - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 2.2.3
35
+ version: "2.2"
36
36
  version:
37
- - !ruby/object:Gem::Dependency
38
- name: contest
39
- type: :development
40
- version_requirement:
41
- version_requirements: !ruby/object:Gem::Requirement
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
46
- version:
47
- description: " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink\n plugins for Ruby on Rails. It allows you to create pretty URL\xE2\x80\x99s\n and work with human-friendly strings as if they were numeric ids for\n ActiveRecord models.\n"
37
+ description: " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink plugins\n for Ruby on Rails. It allows you to create pretty URL\xE2\x80\x99s and work with\n human-friendly strings as if they were numeric ids for ActiveRecord models.\n"
48
38
  email:
49
39
  - norman@njclarke.com
50
40
  - adrian@mugnolo.com
@@ -53,47 +43,62 @@ executables: []
53
43
 
54
44
  extensions: []
55
45
 
56
- extra_rdoc_files:
57
- - README.rdoc
58
- - History.txt
46
+ extra_rdoc_files: []
47
+
59
48
  files:
60
- - lib/friendly_id/helpers.rb
61
- - lib/friendly_id/non_sluggable_class_methods.rb
62
- - lib/friendly_id/non_sluggable_instance_methods.rb
63
- - lib/friendly_id/slug.rb
64
- - lib/friendly_id/sluggable_class_methods.rb
65
- - lib/friendly_id/sluggable_instance_methods.rb
66
- - lib/friendly_id/tasks.rb
49
+ - lib/friendly_id/active_record2/configuration.rb
50
+ - lib/friendly_id/active_record2/finders.rb
51
+ - lib/friendly_id/active_record2/simple_model.rb
52
+ - lib/friendly_id/active_record2/slug.rb
53
+ - lib/friendly_id/active_record2/slugged_model.rb
54
+ - lib/friendly_id/active_record2/tasks.rb
55
+ - lib/friendly_id/active_record2.rb
56
+ - lib/friendly_id/configuration.rb
57
+ - lib/friendly_id/finders.rb
58
+ - lib/friendly_id/slug_string.rb
59
+ - lib/friendly_id/slugged.rb
60
+ - lib/friendly_id/status.rb
61
+ - lib/friendly_id/test.rb
67
62
  - lib/friendly_id/version.rb
68
63
  - lib/friendly_id.rb
69
- - lib/tasks/friendly_id.rb
70
- - lib/tasks/friendly_id.rake
71
- - init.rb
72
- - README.rdoc
73
- - History.txt
64
+ - lib/friendly_id/active_record2/tasks/friendly_id.rake
65
+ - Changelog.md
66
+ - Contributors.md
67
+ - Guide.md
68
+ - README.md
74
69
  - LICENSE
75
70
  - Rakefile
71
+ - rails/init.rb
76
72
  - generators/friendly_id/friendly_id_generator.rb
77
73
  - generators/friendly_id/templates/create_slugs.rb
78
- - generators/friendly_id_20_upgrade/friendly_id_20_upgrade_generator.rb
79
- - generators/friendly_id_20_upgrade/templates/upgrade_friendly_id_to_20.rb
80
- - test/cached_slug_test.rb
81
- - test/custom_slug_normalizer_test.rb
82
- - test/non_slugged_test.rb
83
- - test/scoped_model_test.rb
84
- - test/slug_test.rb
85
- - test/slugged_model_test.rb
86
- - test/sti_test.rb
87
- - test/support/database.yml.postgres
88
- - test/support/database.yml.sqlite3
89
- - test/support/models.rb
90
- - test/tasks_test.rb
74
+ - test/active_record2/basic_slugged_model_test.rb
75
+ - test/active_record2/cached_slug_test.rb
76
+ - test/active_record2/core.rb
77
+ - test/active_record2/custom_normalizer_test.rb
78
+ - test/active_record2/custom_table_name_test.rb
79
+ - test/active_record2/scoped_model_test.rb
80
+ - test/active_record2/simple_test.rb
81
+ - test/active_record2/slug_test.rb
82
+ - test/active_record2/slugged.rb
83
+ - test/active_record2/slugged_status_test.rb
84
+ - test/active_record2/sti_test.rb
85
+ - test/active_record2/support/database.mysql.yml
86
+ - test/active_record2/support/database.postgres.yml
87
+ - test/active_record2/support/database.sqlite3.yml
88
+ - test/active_record2/support/models.rb
89
+ - test/active_record2/tasks_test.rb
90
+ - test/active_record2/test_helper.rb
91
+ - test/friendly_id_test.rb
92
+ - test/slug_string_test.rb
91
93
  - test/test_helper.rb
94
+ - extras/bench.rb
95
+ - extras/extras.rb
96
+ - extras/prof.rb
92
97
  - extras/README.txt
93
98
  - extras/template-gem.rb
94
99
  - extras/template-plugin.rb
95
100
  has_rdoc: true
96
- homepage: http://rdoc.info/projects/norman/friendly_id
101
+ homepage: http://norman.github.com/friendly_id
97
102
  licenses: []
98
103
 
99
104
  post_install_message: |+
@@ -109,9 +114,8 @@ post_install_message: |+
109
114
 
110
115
  ***********************************************************
111
116
 
112
- rdoc_options:
113
- - --main
114
- - README.rdoc
117
+ rdoc_options: []
118
+
115
119
  require_paths:
116
120
  - lib
117
121
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -132,13 +136,17 @@ rubyforge_project: friendly-id
132
136
  rubygems_version: 1.3.5
133
137
  signing_key:
134
138
  specification_version: 3
135
- summary: A comprehensive slugging and pretty-URL plugin for ActiveRecord.
139
+ summary: A comprehensive slugging and pretty-URL plugin.
136
140
  test_files:
137
- - test/cached_slug_test.rb
138
- - test/custom_slug_normalizer_test.rb
139
- - test/non_slugged_test.rb
140
- - test/scoped_model_test.rb
141
- - test/slug_test.rb
142
- - test/slugged_model_test.rb
143
- - test/sti_test.rb
144
- - test/tasks_test.rb
141
+ - test/active_record2/basic_slugged_model_test.rb
142
+ - test/active_record2/cached_slug_test.rb
143
+ - test/active_record2/custom_normalizer_test.rb
144
+ - test/active_record2/custom_table_name_test.rb
145
+ - test/active_record2/scoped_model_test.rb
146
+ - test/active_record2/simple_test.rb
147
+ - test/active_record2/slug_test.rb
148
+ - test/active_record2/slugged_status_test.rb
149
+ - test/active_record2/sti_test.rb
150
+ - test/active_record2/tasks_test.rb
151
+ - test/friendly_id_test.rb
152
+ - test/slug_string_test.rb
data/History.txt DELETED
@@ -1,194 +0,0 @@
1
- == 2.2.7 2009-12-16
2
-
3
- * 1 minor fix
4
- * Fixed typo in Rake tasks which caused delete_old_slugs to fail. (Diego R.V.)
5
-
6
- == 2.2.6 2009-12-10
7
-
8
- * 2 major fixes
9
- * Made cached_slug automagic configuration occur outside of has_friendly_id. This was causing problems
10
- in code where the class is loaded before ActiveRecord has established its connection.
11
- * Fixes for scope feature with Postgres (Ben Woosley)
12
-
13
- * 2 minor enhancements
14
- * Migrated away from Hoe/Newgem for gem management.
15
- * Made tests database-agnostic (Ben Woosley)
16
-
17
- == 2.2.5 2009-11-30
18
-
19
- * 1 minor fix
20
- * Fixed typo which in config options (Steven Noble).
21
-
22
- == 2.2.4 2009-11-12
23
-
24
- * 1 minor fix
25
- * Fixed typo in post-install message.
26
-
27
- == 2.2.3 2009-11-12
28
-
29
- * 4 minor enhancements:
30
- * Fixed some issues with gem load order under 1.8.x (closes GH Issue #20)
31
- * Made sure friendly_id generator makes a lib/tasks directory (Josh Nichols)
32
- * Finders now accept instances of ActiveRecord::Base, matching AR's behavior (Josh Nichols)
33
- * SlugGenerationError now raise when a blank value is passed to strip_diacritics
34
-
35
- == 2.2.2 2009-10-26
36
-
37
- * 1 minor enhancement:
38
- * Fixed Rake tasks creating duplicate slugs and not properly clearing cached slugs (closes GH issues #14 and #15)
39
-
40
- == 2.2.1 2009-10-23
41
-
42
- * 2 minor enhancements:
43
- * slug cache now properly caches the slug sequence (closes GH issue #10)
44
- * attr_protected is now only invoked on the cached_slug column if attr_accessible has not already been invoked. (closes GH issue #11)
45
-
46
- == 2.2.0 2009-10-19
47
-
48
- * 1 major enhancement:
49
- * Added slug caching, offers huge performance boost (Bruno Michel)
50
-
51
- * 2 minor enhancements:
52
- * Handle Unicode string length correctly (Mikhail Shirkov)
53
- * Remove alias_method_chain in favor of super (Diego Carrion)
54
-
55
- == 2.1.4 2009-09-01
56
-
57
- * 3 minor enhancements:
58
- * Fixed upgrade generator not installing rake tasks (Harry Love)
59
- * Fixed handling of very large id's (Nathan Phelps)
60
- * Fixed long index name on migration (Rob Ingram)
61
-
62
- == 2.1.3 2009-06-03
63
-
64
- * 1 minor enhancement:
65
- * Always call #to_s on slug_text to allow objects such as DateTimes to be used for the friendly_id text. (reported by Jon Ng)
66
-
67
- == 2.1.2 2009-05-21
68
-
69
- * 2 minor enhancements:
70
- * Non-slugged models now validate the friendly_id on save as well as create (Joe Van Dyk).
71
- * Replaced Shoulda with Contest.
72
-
73
- == 2.1.1 2009-03-25
74
-
75
- * 2 minor enhancements:
76
- * Fixed bug with find_some; if a record has old slugs, find_some will no longer return
77
- multiple copies of that record when finding by numerical ID. (Steve Luscher)
78
- * Fixed bug with find_some: you can now find_some with an array of numerical IDs without
79
- an error being thrown. (Steve Luscher)
80
-
81
- == 2.1.0 2009-03-25
82
-
83
- * 2 major enhancements:
84
- * Ruby 1.9 compatibility.
85
- * Removed dependency on ancient Unicode gem.
86
-
87
- == 2.0.4 2009-02-12
88
-
89
- * 1 major enhancment:
90
- * You can now pass in your own custom slug generation blocks while setting up friendly_id.
91
-
92
- == 2.0.3 2009-02-11
93
-
94
- * 1 minor enhancment:
95
- * Fixed to_param returning an empty string for non-slugged models with a null friendly_id.
96
-
97
- == 2.0.2 2009-02-09
98
-
99
- * 2 major enhancements:
100
- * Made FriendlyId depend only on ActiveRecord. It should now be possible to
101
- use FriendlyId with Camping or any other codebase that uses AR.
102
- * Overhauled creaky testing setup and switched to Shoulda.
103
-
104
- * 1 minor enhancment:
105
- * Made reserved words work for non-slugged models.
106
-
107
- == 2.0.1 2009-01-19
108
-
109
- * 1 minor enhancements:
110
- * Fix infinite redirect bug when using .has_better_id? in your controllers (Sean Abrahams)
111
-
112
-
113
- == 2.0.0 2009-01-03
114
-
115
- * 5 major enhancements:
116
- * Support for scoped slugs (Norman Clarke)
117
- * Support for UTF-8 friendly_ids (Norman Clarke)
118
- * Can now be installed via Ruby Gems, or as a Rails plugin (Norman Clarke)
119
- * Improved handling of non-unique slugs (Norman Clarke and Adrian Mugnolo)
120
- * 2 minor enhancements:
121
- * Shoulda macro (Josh Nichols)
122
- * Various small bugfixes, cleanups and refactorings
123
-
124
- == 2008-12-01
125
-
126
- * Fixed bug that may return invalid records having similar id/names and using MySQL. (Emilio Tagua)
127
- * Fixed slug generation to increment only numeric extension without modifying the name on duplicated slugs. (Emilio Tagua)
128
-
129
- == 2008-10-31
130
-
131
- * Fixed compatibility with Rails 2.0.x. (Norman Clarke)
132
- * friendly_id::make_slugs update records in chunks of 1000 to avoid running out of memory with large datasets. (Tim Kadom)
133
- * Fixed logic error with slug name collisions. Thanks to Tim Kadom for reporting this bug.
134
-
135
- == 2008-10-22
136
-
137
- * Reverted use of UTF8Handler - was causing errors for some people (Bence Nagy)
138
- * Corrected find in case if a friendly_id begins with number (Bence Nagy)
139
- * Added ability to reserve words from slugs (Adam Cigánek)
140
-
141
- == 2008-10-09
142
-
143
- * Moved "require"" for iconv to init.rb (Florian Aßmann)
144
- * Removed "require" for Unicode, use Rails' handler instead (Florian Aßmann)
145
- * Replaced some magic numbers with constants (Florian Aßmann)
146
- * Don't overwrite find, alias_method_chain find_one and find_some instead (Florian Aßmann)
147
- * Slugs behave more like ids now (Florian Aßmann)
148
- * Can find by mixture of ids and slugs (Florian Aßmann)
149
- * Reformatted code and comments (Florian Aßmann)
150
- * Added support for Edge Rails' Inflector::parameterize (Norman Clarke)
151
-
152
- == 2008-08-25
153
-
154
- * Moved strip_diacritics into Slug for easier reuse/better organization.
155
- * Put class methods inside class << self block. (Norman Clarke)
156
-
157
- * Small change to allow friendly_id to work better with STI. (David Ramalho)
158
-
159
- == 2008-07-14
160
-
161
- * Improved slug generation for friendly id's with apostrophes. (Alistair Holt)
162
- * Added support for namespaced models in Rakefile. (David Ramalho)
163
-
164
- == 2008-06-23
165
-
166
- * Cached most recent slug to improve performance (Emilio Tagua).
167
-
168
- == 2008-06-10
169
-
170
- * Added ability to find friendly_ids by array (Emilio Tagua)
171
-
172
- == 2008-05-15
173
-
174
- * Made friendly_id raise an error if slug method returns a blank value.
175
-
176
- == 2008-05-12
177
-
178
- * Added experimental Github gemspec.
179
-
180
- == 2008-04-18
181
-
182
- * Improved slug name collision avoidance.
183
-
184
- == 2008-03-13
185
-
186
- * Added :dependent => :destroy to slug relation, as suggested by Emilio Tagua.
187
- * Fixed error when renaming a slugged item back to a previously used name.
188
- * Incorporated documentation changes suggested by Jesse Crouch and Chris Nolan.
189
-
190
- == 2008-02-07
191
-
192
- * Applied patches from blog commenter "suntzu" to fix problem with model values were being overwritten.
193
- * Applied patch from Dan Blue to make friendly_id no longer ignore options on ActiveRecordBase#find.
194
- * Added call to options.assert_valid_keys in has_friendly_id. Thanks to W. Andrew Loe III for pointing out that this was missing.